如何用CUDA Fortran优化并行计算程序
1个回答
展开全部
分享内存(shared memory),使并行运算时,每个R session可以避免重复读取。包裹有bigmemory等,这样不同的R sessions可以共享内存里的数据。不用再并行运算时,每个R sessions在去读入一遍。
用MPI,避免mclapply等太高等级的关于平行运算的方程。如果用MPI,你的R sessions只会传输你规定它们可以传输的objects。据我所知,mclapply是把所有environment复制到另一个R session里,有一些根本不必要的objects也要被推送,这样毫无意义。
集成运算,比如Map-Reduce或者Storm,把个体服务器的压力变为对运算过程的压力,这个坑太大了。。。
分布储存,比如mongodb,把对内存的压力变为对数据结构的压力,这个坑也太大了。。。
用C或Fortran写底层方程,比如loop structure,基本的科学运算(BLAS)等等。
从算法上的根本优化。很多时候,程序慢,内存溢出,大多都是程序猿懒,不精益求精。再加上服务器动辄16G内存,把码农们都宠坏了,好像什么都能往内存里扔,扔完也不打扫屋子。改进算法,尽量在同一时间,只能看见部分数据的情况下,通过update结果来得到最后答案。
用MPI,避免mclapply等太高等级的关于平行运算的方程。如果用MPI,你的R sessions只会传输你规定它们可以传输的objects。据我所知,mclapply是把所有environment复制到另一个R session里,有一些根本不必要的objects也要被推送,这样毫无意义。
集成运算,比如Map-Reduce或者Storm,把个体服务器的压力变为对运算过程的压力,这个坑太大了。。。
分布储存,比如mongodb,把对内存的压力变为对数据结构的压力,这个坑也太大了。。。
用C或Fortran写底层方程,比如loop structure,基本的科学运算(BLAS)等等。
从算法上的根本优化。很多时候,程序慢,内存溢出,大多都是程序猿懒,不精益求精。再加上服务器动辄16G内存,把码农们都宠坏了,好像什么都能往内存里扔,扔完也不打扫屋子。改进算法,尽量在同一时间,只能看见部分数据的情况下,通过update结果来得到最后答案。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询