ベクトル化のソースを表示
←
ベクトル化
移動先:
案内
、
検索
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
'''ベクトル化'''(ベクトルか、vectorize) *ベクトル命令化 - コンパイル時にループを[[ベクトル演算]]命令に変換すること。この項目で説明。 *ベクトル(1次元[[配列]])の演算をサポートするプログラミング環境で、ループをベクトルに書き換えること *[[行列]](多次元配列)を同じ要素を持つベクトル(1次元配列)に変換すること *他の形式のデータを[[ベクタ形式]]データに変換すること ---- '''ベクトル化'''とは、[[コンピュータ]]の[[プログラム (コンピュータ)|プログラム]]において、繰り返し処理で[[配列]]([[ベクトル]])の要素をひとつひとつ計算しているような部分を、手動あるいは[[コンパイラ]]で(自動ベクトル化)、[[ベクトル計算機]]で高速に演算できるよう変形すること。近年の[[SIMD]]演算のための[[並列化]]や[[スーパースカラ]]機での[[ソフトウェアパイプライン]]に応用できる内容もある。 [[High Performance Fortran]]はこれらの高速化を意識したプログラミング言語である。 ==ベクトル化の手法== 以下ではFORTRANのコードを例にとって説明する。基本的に、ループ演算を1つのベクトル演算命令にするので、DOループがベクトル化対象となる。なお、ベクトル命令に出来るパターンは各機種毎、コンパイラ毎に多少異なる。 ===単純DOループ=== たとえば以下のようなDOループは1つのベクトル命令に出来る。 <source lang="fortran"> DO 100 I = 1, 100 A(I) = A(I) * B(I) 100 CONTINUE </source> ===IF文を含むDOループ=== 以下のような、IF文を含むDOループは、それをサポートするハードウェアがあればベクトル化が可能である。 <source lang="fortran"> DO 100 I = 1, 100 IF (A(I) .GT. 0.0) THEN A(I) = A(I) * 2.0 END IF 100 CONTINUE </source> この場合、たとえば[[NEC SX|SXシリーズ]]では、 * 配列Aの各要素について、IF文を満たすか満たさないかを判断するマスクベクトルを作成。 * マスクが真の部分だけを演算する、ベクトル命令を生成。 という方法でベクトル化を行なう。 ===多重ループ=== 多重ループは、全部まとめて1つのベクトル命令を生成することもある。また、効率化をはかるために、内側のループと外側のループを入れ替える場合もある。これは、ベクトル化を行なうためには、データがメモリ上で連続している必要があるからである。 たとえば、二次元配列を演算する場合、内側のループが連続したメモリをアクセスするようになっていない場合には、演算する順番を入れ替えて(すなわちDOループの内側と外側を入れ替えて)ベクトル化が容易になるようにする。 ==関連項目== *[[SIMD]] *[[並列化]] *[[コンピュータ]] *[[ベクトル化率]] *[[計算機工学]] *[[第一原理バンド計算]] ==参考文献== *SXシステムの言語処理系、NEC技報,Vol 39,No1/1986 [[Category: スーパーコンピュータ|へくとるか べ]] [[Category: プログラミング|へくとるか べ]]
ベクトル化
に戻る。
案内メニュー
個人用ツール
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
その他
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
新しいページ
最近の更新
おまかせ表示
sandbox
commonsupload
ヘルプ
ヘルプ
井戸端
notice
bugreportspage
sitesupport
ウィキペディアに関するお問い合わせ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報