OpenMP4.0 でのSIMD プラグマの使用方法と効果に関して | 入門者フォーラム | フォーラム

iSUS に投稿されている記事の内容や、IA プラットフォーム上でのソフトウェア開発に関するトピックを開発者同士でディスカッションできる場としてフォーラムを公開しています。

運営ルールはフォーラムの利用案内をご覧ください。
フォーラムの使い方はこちら

 
フォーラムに投稿するにはログインが必要ですログイン

OpenMP4.0 でのSIMD プラグマの使用方法と効果に関して

メンバー投稿

5:17 PM
2014年9月11日


yoshihingis

投稿数 54

1

 ご無沙汰しています。
 さて、Parallel Studio XEも2015のメジャーアップデートがあり、Intel composer XEのバージョンも上がり、C/C++でOpenMP 4.0の使用が可能となりました。
 OpenMP 4.0では、SIMD用のプラグマがサポートされるようになり、たいへん興味深いです。
 そこで、早速、特集記事を参考に、プラグマでSIMDを有効にしてみたのですが、2点ほど質問が。

(1)SIMDを有効にするプラグマですが、これもOpenMPのプラグマですから、コンパイラのオプションで「OpenMPを使用する」に設定しないと、有効にならない。という事でよろしいでしょうか?

(2)SIMDプラグマでベクトル化すれば、コードは必ず高速化されるか?
 特集記事ではFor LOOPをプラグマでSIMDを有効にしていましたが、For LOOPの中の演算が非常に簡単な演算でも、ベクトル化すれば、必ず高速になるものでしょうか?
 マルチコアCPUでマルチスレッドでfor LOOPを並列化した場合、For LOOPの中があまり簡単な演算だと並列化のオーバーヘッドなどで、かえって処理が遅くなる場合が、ありあしたが、SIMDでも何かの原因で、ベクトル化するとかえって、処理速度が遅くなるという場合はあるのでしょうか?

 以上、非常に基本的な質問で申し訳ありませんが、ご回答頂ければ幸いです。

11:03 PM
2014年9月11日


iSUS編集部 – 菅原

投稿数 206

2

yoshihingis さん

こんにちは。さっそく新バージョンをお試しいただきありがとうございます。

(1)そうですね。#pragma omp simd を使用する場合、たとえほかの omp for 指示句と別の行に記述してもコンパイラーのオプションは必要になります。もし、simd プラグマのみをOpenMPとは関係なく試されたい場合、Cilk Plus でサポートされる #pragma simd をお使いください。実はこれは omp simd と同機能なのです。

(2)omp simd によるオーバーヘッドですが。並列化よりか格段に少ないです。また、これまでベクトル化で生じていたオーバーヘッドを軽減できる場合もあります。ただし、OpenMPによる並列化とSIMDが同一 for ループに適用するばあい、ベクトル化が並列化に影響を与える可能性があります。

OpenMP 4.0 にの機能については、以前スライドをアップしているのがありかすのでご覧ください。
http://www.isus.jp/wp-content/…..finity.pdf

11:08 PM
2014年9月11日


iSUS編集部 – 菅原

投稿数 206

3

すいませんURL途中で切れてますね。以下コピペしてください。

"http://www.isus.jp/wp-content/uploads/pdf/OMP4SIMD+Affinity.pdf"