evt312 最近在学习并行计算 通过查到的一些资源,我现在已经可以用foreach和doParallel进行每个loop独立的并行计算。 但如果每个loop不独立(即,每个loop的结果和之前loop的结果相关时),请问还可以进行并行计算吗? 一个简单的例子: V=NULL V[1]=0 for(k in 2:1000000){ V[k]=V[k-1]/2+3 } 如果可以通过并行计算实现的话,那么code需要怎么写?有没有相关资源可以分享一下?感谢!!
tctcab 显然这种情况就不适合并行了。但是加速循环的办法有很多,一个是向量化,但你这个loop层数有依赖的就没办法。另一个办法就是用Rcpp了,其实原理就是用c++代码来写循环函数,再在R里调用。具体可参考这里 当然这还没用到并行,c++也有openmp之类的并行库可用,想必Rcpp也是可以做的。 并行计算在实际工作里接触得不多,我知道的就这么多了。
yufree 这种场景不是并行,属于泛函或递归了,也就是函数的输入还是函数,最简单就是斐波那契数列。R里面是支持泛函的,可以参考这里. Base R 里就有 Map, Reduce, Filter这些可以做,可以避免写 for 循环,不过这函数太小众,而且速度也没快到哪去,入坑可以看这篇。