回 帖 发 新 帖 刷新版面

主题:forall在IVF11.0能自动并行赋值?我的怎么不可以?

1.我用的是Intel Fortran Professional11.01编译器,书上说用forall 可以并行赋值,可是我为什么在IVF上无法用这个并行呢?都是串行,需要专门什么设置?

2.最近学习openmp并行,想把数组整体运算A=B+C并行执行

用!$omp parallel workshare
   A=B+C
!$omp end parallel workshare
(据说这样并行效率很低,一般也不用不上,用do就好了,就是好奇试了一下)
发现也没并行计算啊,所以怀疑ivf它不支持workshare并行特性啊
 

注:Intel® Visual Fortran Compiler 9.0 for Windows*Release Notes明明写着
OpenMP WORKSHARE Directive Supported
The OpenMP* 2.0 WORKSHARE directive is now supported.

Intel Fortran Professional11.01编译器都用openmp3.0了,怎么没这个功能了?





回复列表 (共5个回复)

沙发

高人指教啊,我是初学菜鸟,说的不对大家不要笑话啊

板凳

1. forall 我用得不多,当初设计是说有利于并行.

2. workshare确实效率低,这个我试过,就没觉得并行之后提速,我觉得是那个赋值的过程而且没有充分利用cpu缓冲吧.

3. ivf11应该是支持的,是不是你编译的时候没有开openmp并行的选项? 因为omp的语法在串行下编译他本身就是一个注释.

3 楼

谢谢yeg001,不过我的确开了的,cpu50%,我把那段话换成do循环就达到100%了

不过我也不想用它了,只是好奇试了一下。

看书上说的forall ,pure ,elemental什么的都是为并行准备的,自从使用module后发现那些语句对我来说没啥作用了,写程序也不用了。[em11]

4 楼

有利于并行但不等于必须并行,是否会并行得看编译器是否实现了这方面的优化。据我所知除了HPF外大多数的编译器都没有实现ForAll及其他有利于并行的语句。。。

留着吧,或许有一天会有用的:)

另:CoArray有好些编译器明确了是不支持的,PGI就是其中一个:)

5 楼


你好,请问你用的ivf11.0是32位的,还是64位的?

我来回复

您尚未登录,请登录后再回复。点此登录或注册