回 帖 发 新 帖 刷新版面

主题:Intel矢量化区可不可以自己定义

在Intel visual Fortran中,编译的时候经常出现:remark: block was vectorized的提示,现经过上个问题贴各位高手们的帮助,我已经明白这个是干什么的了。
现在的问题是,具体哪里矢量化哪里不矢量化,可不可以我自己决定?不让系统自动矢量化而是我自己来?

回复列表 (共14个回复)

沙发


intel的是加入!DEC$ NOVECTOR

比如
!DEC$ NOVECTOR
do i = 1, 100
    a(i) = b(i) + c(i)
enddo

就会对这个循环禁止向量化

板凳

楼主找出上次问题出在那里了吗?

3 楼

上次的问题在于,在大型机上并行根本不能用OpemMP,得用MPI标准。OpenMP是基于共享存储的,只适用于小规模并行计算

4 楼

[quote]楼主找出上次问题出在那里了吗?[/quote]
自动向量化导致性能下降是可能的,虽然大多数情形都会加快,类似的编译开关还有 unroll之类的展开循环操作,可能加快也可能变慢

5 楼

[quote]上次的问题在于,在大型机上并行根本不能用OpemMP,得用MPI标准。OpenMP是基于共享存储的,只适用于小规模并行计算[/quote]
你另一个帖说的MPI设置, 在cvf下网上有教学帖, ivf我没设置过, 估计差不多. 没试过就不好乱说了. 
奇怪的是, 你给出来的cpu和编译器都支持openmp, 怎么不能启动openmp呢? 我试过openmp和mpi的混合编程, 可以同时实现的.

6 楼

[quote][quote]楼主找出上次问题出在那里了吗?[/quote]
自动向量化导致性能下降是可能的,虽然大多数情形都会加快,类似的编译开关还有 unroll之类的展开循环操作,可能加快也可能变慢[/quote]
我记得看过书的介绍, 这样矢量化相当于是硬件并行, 应该转换的时候也很保守. 所以一直觉得矢量化不应该减慢计算速度的, 至少相对与串行程序应该这样. 我有点怀疑楼主的openmp并行做得太低层, 以至于系统消耗大.

7 楼

个人机和大型机都可以用openmp编译,但openmp是不适合大型机的并行计算的,它只适合小规模的并行

8 楼

我已经打算在程序里面用MPI和OpenMP混合编程了,现在的问题是:MPI的库总是链接不上,想在Intel Fortran里面链接上CVF和IFV好像不大一样,因为CVF中的MPI模块MPICH是后加入的,IVF是本来就在程序里面了。我对链接库,路径什么的这方面比较白,有高手的话麻烦详细的给说说,就是先干啥,后干啥。

9 楼

1. IVF里面没有集成MPI库的, 同样需要你安装MPI(一般人选用免费的MPICH1或者2). 这点你应该是搞错了.
2. 不是openmp不适合大规模, 而是因为你的集群架构不同. openmp是适用于内存共享型. 对应的服务器是同一块主板上装多路cpu. 特点是访问速度快, 共享容易. 缺点是成本高. MPI主要(也可以用于内存共享型, 效率和内存利用率你可以查看一些资料)适用于分布式系统. 特点是需要通过网络通信, 速度相对慢(个人理解是慢很多, 看你们的集群用什么网络了). 但是成本低.

如果一个节点上就能满足你的需要, 你就完全没必要弄MPI. 
我还是比较关心你openmp计算的效率问题, 如果方便可否帖一段你的代码或者简单讲讲你写omp的思路?

10 楼

[quote]1. IVF里面没有集成MPI库的, 同样需要你安装MPI(一般人选用免费的MPICH1或者2). 这点你应该是搞错了.
2. 不是openmp不适合大规模, 而是因为你的集群架构不同. openmp是适用于内存共享型. 对应的服务器是同一块主板上装多路cpu. 特点是访问速度快, 共享容易. 缺点是成本高. MPI主要(也可以用于内存共享型, 效率和内存利用率你可以查看一些资料)适用于分布式系统. 特点是需要通过网络通信, 速度相对慢(个人理解是慢很多, 看你们的集群用什么网络了). 但是成本低.

如果一个节点上就能满足你的需要, 你就完全没必要弄MPI. 
我还是比较关心你openmp计算的效率问题, 如果方便可否帖一段你的代码或者简单讲讲你写omp的思路?[/quote]
反正我觉得是线程开销的问题,我初学openmp时就有点儿乱用,搞得线程开销很大,比单线程慢不少。

我来回复

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