(1) MPI_Comm_size(MPI_COMM_WORLD,&numprocs)*********指定进程数
MPI_Comm_rank(MPI_COMM_WORLD,&myid) *********取得进程数
(2)本题是块划分方式
循环划分代码:
i=myid
while(i<size)
{
myresult+=data[i]
i+=numproc
}
(3)书上83-85
(4)SPMD程序的特点:
各个处理机上程序同时并行运行,首凳咐局先初始化好(从/$home/data读取数据并存到data[10]数组中)
然后把任务分配给各个程序简源
最后把结果规约到root进程,
并在root上做出相应处理(本题是打印)
(5)MPI_Bcast(data, SIZE, MPI_INT, 0, MPI_COMM_WORLD)
把data的值广播(Broadcast)给每个进程.
MPI_Reduce(&myresult, &result, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD)
把各个进程的myresult规约到根进程的result结果中。
实现并行的方式有很多种从硬件上分为 CPU 并行和GPU 并行
CPU 并行目前主要有:
1. 进程级适用于分布内存的MPI 并行(参考书 百度 都志辉)
2. 线程级别的openmp (参考书:百度 fortran openmp)
需要注意的是 MPI 相对底层一点,openmp 则非常简单 基本上1个月能够将你的程序并行化。 但前者的效率要高于后者 当然我是说你程序编写合理的情况下。
GPU 并行:
目前的配芦猛显卡基本上都支持GPU并行,只要你的显卡不是很老,都可以用来做GPU 并行计算。 GPU计算说通俗一点就是借助显卡的处理核心来做科学计算,有效发挥显卡的多核计算能力
如果你要进行GPU 编程,那么建议学习CUDA 对应于C 有cuda C 对应于fortran 有cuda fortran 当然 目前cuda fortran 的编译器只有pgi, 你可以很方便在网上下载到试用版本。
就这么多吧,仅供参考。有什么问题可以在群里 或者在论坛里面提问,大家来讨论。
最后还补充一下,如果你有正版PGI的话,也可以用openacc 也是一种简化的cuda 大体上就是你在代码中哗改加入一些编译指导语句培桥,然后编译器帮你把代码cuda 并行化。相当于cpu 并行里的openmp。
需要的芦衡 方法一、图形界面设置 如图所示位置,单击,选start parallel pool command window中会提示 Starting parallel pool (parpool) using the 'local' profile ... 当并行工具箱启动后会提示链接到本地*个核心。 方法二、嫌哗液command启动并芹物行Core欢迎分享,转载请注明来源:内存溢出
评论列表(0条)