parallel_computing_for_scientist
作者:cpplinklist
链接:https://www.nowcoder.com/discuss/326852?toCommentId=5021340
来源:牛客网
联系方式:412012558@qq.com
parallel_computing_for_scientist
对于科研工作者来说,并行计算应该是以应用为主,以最小的代价获取最大的收益。对于一些复杂的并行计算原理和细节不应该是研究的重点。
首先要强调的一点是:一定要在LINUX下写程序(推荐安装ubuntu16.04),不要在WINDOWS下写程序!无论是各种环境的支持还有生态,windows的发展和支持都是慢了不止一拍的,而且经常出现一些不能理解的bug,而这些bug和你没有任何关系,只是因为生态不好。
并行计算主要针对的环节就是for循环,如果一个for循环有10000个。我们可以同时启动4个CPU核心,分别计算2500个。这就是最朴素的并行计算思想了。
并行程序设计包括两种,一种是多核并行,另一种是异构并行(典型的是GPU并行加速)
一. 多核并行
推荐使用的并行编程语言是openmp和MPI(CPU并行)
openmp是共享内存的并行语言(所有核心公用内存),MPI是独立内存的,也就是在MPI开始的时候,把现有的东西在内存中复制多份,然后每个线程有自己的内存空间,如果A线程想用B线程的东西,需要A线程发送给B线程,B线程接收后才能拿到数据。
openmp只能在一个服务器上运行程序,而MPI可以在多个服务器之间通过网络布置一个集群,共同运行一个程序。
openmp教程:
1)自行百度可以百度出来很多
这是官方的教程:
2)https://docs.microsoft.com/en-us/cpp/parallel/openmp/openmp-in-visual-cpp?redirectedfrom=MSDN&view=vs-2019
MPI教程:
1)https://mpitutorial.com/tutorials/
我曾经做过一个小例子,就是使用MPI布置一个集群,在上面跑一个简单的小程序,教程如下,还是很有意思的。
https://blog.csdn.net/lusongno1/article/details/82854669
二.GPU并行
GPU并行强烈不推荐使用CUDA。
强烈推荐使用openacc。
openacc有一本非常经典的教材,作者何沧平,openacc并行编程实战。这本书是经典中的经典。非常简单而且贴近中文阅读者的习惯。(强烈推荐买纸质正版,这本书会来回翻阅。电子版看着不方便)
nv推出了一款叫pgi的编译器,使用的是openacc。其中含有pgcc。pgc++ pgfortran等等。
网站上的视频教程的话,百度搜索pgi,第一条,
下面包含:
Documentation
Porting and Tuning Guides
Tutorials
PGI User Forums
那个论坛,你遇到什么问题都可以在论坛里面问。
其中文档就是官方文档,教程里面有视频教程,对应课件,不过是英文的。不含字幕,如果需要字母需要去油管搜索对应视频。油管有自动字幕。
其实NV这一套东西最痛苦的是配环境,如果你把环境配好了,那么你就相当于成功百分之60了,安装显卡驱动+CUDA+PGI耗费几天乃至一周的时间都是很正常的。(反正NVIDIA的东西都这么难受,但是有一点是可以确定的,虽然他难用,但是一定是可以成功的)。