关于vs2013用openmp实现并行计算的问题

关于vs2013用openmp实现并行计算的问题,第1张

代码优化:

属性->配置属性->C/C++->代码生成:启用增强指令集,可选用 流式处理 SIMD 扩展 2 (/arch:SSE2) (/arch:SSE2)、流式处理 SIMD 扩展 2 (/arch:SSE2) (/arch:SSE2) 进行加速浮点模型,可选用 快速 (/fp:fast) 进行浮点数据运算的加速

属性->配置属性->C/C++->优化:可选用 使速度最大化 (/O2) 进行优化。全程序优化选择是(/GL),在debug版本下不能这样设置,必须在release版本

理论上是可以并行的。 先确认你的编译环境有没有装好。依我所知,vs2008下OpenMP应该不是很麻烦,看看编译选项对不对。可以写hello world检查是否可以多线程。 如果并行后时间不减反增,这说明其中有些变量被多个线程竞争访问

备忘:

教程: Parallel Programming in Fortran 95 using OpenMP

使用 OpenMP 应该算是一种比较简单的并行方式,用

将需要并行的部分放进去就行了。

gfortran 编译的话使用 -fopenmp 选项即可

如果不是并行程序的话,仅仅会输出一次,但是这里输出了 4 次,因为有四个线程。而教程中也对这个做了解释:

Since the code enclosed between the two directives is executed by each thread, the message Hello appears in the screen as many times as threads are being used in the parallel region.

不知道那个控制台的图标为啥变成了四个红点,是不是点的个数表示线程数呢?

One of the aims of the OpenMP standard is to offer the possibility of using the same source code lines with an OpenMP-compliant compiler and with a normal compiler. This can only be achieved by hiding the OpenMP directives and commands in such a way, that a normal compiler is unable to see them. For that purpose the following two directive sentinels are introduced: !$OMP & !$

需要注意的是 !$OMP 前面不能出现非空字符,否则将会被认为是普通的注释。OMP的这种方式可以很巧妙地使得程序能够在所有的编译器上运行,如果不支持OMP的话就当作普通的注释,如果支持那么这些就会起作用。另外 指令后面有一个空格,这个主要是为了 指令和后面的语句分隔开。这个空格是强制添加的,否则将作为普通注释来处理。

OMP 的指令行支持续行,和 fortran 没多大区别,只要记得每一行都有指令符号就行了。

暂时就学了这么点。。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11212137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存