各社のデバイスのその動作方法は異なる。等のマスキングを使い「条件」を含んだベクトルを同時処理することが出来ないものもあるため、厳密な定義でのベクトル演算とは言えないが、ここでは広義のベクトル処理として扱う。SIMD(ベクトル)処理が可能である。並列単位を作ることで、数多くの並列実行実体を生成して、ハードウェアの並列演算コアとのマッピングを行い、ベクトルならびに並列実行にて高速化を図る。オフロード形式のプログラミングモデルでは、必ず、こうしたベクトル化かつ並列化可能なループ構成をオフロードの対象としてプログラミングを行う。ネイティブモードの場合においても、ベクトル処理を有効に活用しなければ、理想的な高速化ができない。アクセラレータでは、単に「並列処理」の高速化だけではなく、その基本実行主体が「ベクトル処理」されていることによって高速化が達成されるのである。提供されているものの、こうした短いベクトル長であったため、プログラムの「ベクトル化率」が全体プログラムの性能にどの程度影響を及ぼすかと言う議論はあまりなかった。実は、20~30年前にスーパーコンピュータが「ベクトル機」の全盛時代であった時は、プログラムの「ベクトル化率」が性能を左右する大きな要素であった。近づけると言う最適化方針が存在した。出来るようになったため、ベクトル演算効果を阻害しないプログラム作りが必要となる。オフロード対象となるループ部分は、データ依存性がないため、本来ベクトル化も並列化も可能であることが普通であるが、「ベクトル演算効果を阻害しない」というところに意義がある。分岐の論理判断の合理的処理等の方策がチューニングにおいては必要となると言うことである。プログラム全体の何%が並列化可能かと言う指標は「並列化率」と言うが、この割合により並列効果が変化する。並列化しても問題の大きさが変化しないという前提の下、これをモデル化したのがアムダールの法則である。このアムダールの法則を使って、ベクトルプロセッサを対象としたモデル化もできる。プログラム全体のベクトル化可能な割合であるベクトル化率の他に、もう一つのパラメータとして、スカラ実行した場合の時間とベクトル実行した場合の時間の比率(これを「ベクトル加速率」という。)をモデル化パラメータとすれば、全体のプログラムのベクトル化率割合に応じた性能のシミュレートが出来る。ベクトル加速率は、プログラムの演算特性(計算密度や演算命令の種類)によって変化するため、予め何らかの方法で仮定することが必要となる。命令)で行われるベクトル演算の性能を模擬してみたものである。以上であれば加速率が高くなることなどを理解して欲しい。ネイティブモードで実行する際は、全体のプログラムとして、このベクトル演算の恩恵を得ることが重要であるため、プログラム全体のベクトル化率が低いコードの場合、ネイティブモードで実行しても大きな性能の享受を期待できないことが予想できる。超えるようなプログラムでないと、それ相当の性能を期待できないように思う。高速性の恩恵を受けることができると言った誤解を生んでいるようだが、スカラ計算部の比率が高いプログラムではその高速化は難しいだろう。含めて一般的なアクセラレータの性能を最大限引き出すためのプログラミングモデルは、「オフロード型のモデル」が今のところ最適であろうと思っている。処理を任すことによって、CPUとアクセラレータのそれぞれの良さを活用できるからである。アクセラレータ間のデータ転送時間を最小化すると言う課題だけは残る。上記の図の内容を具体的に説明しよう。性能測定の条件は以下に記した。4倍、2倍以上となっている点については、コンパイラによるベクトル化最適化による他の効果、すなわち、メモリプリフェッチやキャッシュの最適利用効果による性能改善が含まれているものと考えられる。上図では、例えば、一般的にプログラムのベクトル化率が低下していくと、性能の劣化が一気に始まることも見て取れる。その劣化の程度は、低い動作クロックで駆動される「スカラ性能」に収束していく。ベクトル性能を優位に働くようにするには、全体プログラムのベクトル化率も考慮に入れなければならないことが分かる。性能と比べると、その性能のベースが大きく低下していることが分かるかと思う(スカラレベルではかなり遅い)。ベクトル演算時の加速率とは、(Scalarのみ計算時の時間÷Vectorのみ計算時の時間)の比率を言う。ベクトル加速率は、一般に演算特性によって比率が異なる。この姫野ベンチの加速率を以下の方法で模擬する。3.40GHzを使用した。命令を使った二つの実行形式を作成して性能を測定。これがベクトル加速率の違いとして現れる。0%の「スカラ性能」の実測値として使用。himenoBMTxp_omp.f90以上の性能値を使用して、2と3時のベクトル加速率を逆算し、アムダール則を使って性能曲線を描いた。乗したものをスカラ性能ベースとした。して性能曲線を描いた。この加速率はもっと大きいかもしれないし、小さいかもしれない。言語で記述されたプログラムの中で、時間が掛かる処理部分をオフロードして、アクセラレータ側で処理することが一般的である。要は、ループ構造を有する繰り返し部分を「並列処理で高速化する」ことをアクセラレータ上で実現する。プログラム内にこうしたループ構造が少ない場合、並列化が出来ないあるいは、並列効果が現れない場合が多いため、そもそもアクセラレータによる高速化の対象外となる。プログラム内で「時間を消費するループ構造」が存在すれば、アクセラレータによる高速化の対象とすることができる。よる場合と同じ構図となる。場合とは異なるチューニング要素があるため、アクセラレータで常に性能加速率が良くなるとは言えない。最後に大事な点は、並列対象となるループでは、並列実行における阻害要因がない(並列依存性がない)ことが求められる。並列依存性が存在するループ構造の場合は、これをなくすためのプログラムの変更が必要とされ、これが不可能な場合は、そもそも「並列化」による高速化はできないことは言うまでもない。ついて簡単に説明する。