[解決済み】「ベクトル化」とは何ですか?
質問
今まで何度か、matlabやfortran...その他...でこの言葉に出会いましたが、どういう意味で、何をするものなのか、説明を見つけたことがありません?そこで質問なのですが、ベクトル化とは何でしょうか、また、例えば、"ループがベクトル化されるとはどういうことでしょうか?
どのように解決するのですか?
多くのCPUは、2つ、4つ、あるいはそれ以上のデータに対して同時に同じ演算を行うquot;vector" またはquot;SIMD" 命令セットを持っています。 最近のx86チップにはSSE命令、多くのPPCチップにはquot;Altivec命令、そしてARMチップの一部にはNEONと呼ばれるベクトル命令セットが搭載されています。
ベクトル化(簡略化)とは、配列の1つの要素をN回処理する代わりに、配列の4つの要素を同時にN/4回処理するようにループを書き換えることである。
(4としたのは、最新のハードウェアが直接サポートする可能性が高いからです。quot;vectorization"という用語は、ループを完全に抽象化して、それを構成する要素の代わりに配列の操作を記述するような、より高度なソフトウェア変換を表すのにも使用されます)
ベクトル化とループアンロールの違いについて。 2つの配列の要素を加算し、その結果を3番目の配列に格納する次のような非常に単純なループを考えてみましょう。
for (int i=0; i<16; ++i)
C[i] = A[i] + B[i];
このループを展開すると、次のような形になる。
for (int i=0; i<16; i+=4) {
C[i] = A[i] + B[i];
C[i+1] = A[i+1] + B[i+1];
C[i+2] = A[i+2] + B[i+2];
C[i+3] = A[i+3] + B[i+3];
}
一方、これをベクター化すると、次のようなものが出来上がる。
for (int i=0; i<16; i+=4)
addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);
ここで "addFourThingsAtOnceAndStoreResult" は、コンパイラーがベクトル命令を指定するために使用する組込み関数のプレースホルダーです。 一部のコンパイラーは 自動ベクトル化 このような非常に単純なループは、しばしばコンパイル・オプションで有効にすることができます。 より複雑なアルゴリズムでは、良いベクターコードを生成するためにプログラマーの助けが必要です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン