ベクトル計算機
[Wikipedia|▼Menu]
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方
出典検索?: "ベクトル計算機" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2015年9月)

ベクトル計算機(ベクトルけいさんき)は、計算機科学分野の並列計算に関する類型の一つであるベクトル演算SIMDを参照)を実行可能なコンピュータのこと。

狭義ではベクトル演算のために最適化された設計として、高性能でパイプライン化された実行ユニットを持ち、その演算能力を可能な限り発揮できるように構成されたアーキテクチャを持つスーパーコンピュータを指す。広義にはSIMDによるベクトルを対象とした並列演算を指す。以下、主に狭義の、すなわちパイプラインによるベクトル計算機について述べる。


ベクトル計算機のプロセッサを ベクトルプロセッサ (Vector Processor) または アレイプロセッサ (Array Processor) と呼ぶ。ベクトルプロセッサは数値演算を複数のデータに対してパイプラインにより次々と実行できる。ベクトルプロセッサは科学技術計算分野でよく使われ、特に1980年代から1990年代にかけてのスーパーコンピュータでは一般的であった。2020年現在、ベクトルプロセッサを名乗るプロセッサは少ないが(特にスーパコンピュータでは、パイプライン形のベクトルプロセッサはSXシリーズを残すのみである)、SIMDと呼ばれる並列ベクトル演算を行う機能を備えたマイクロプロセッサは多い。グラフィックスやマルチメディアのため、とメーカーはうたっており、実際そのように使われていることは多いが、研究発表などとしては科学技術計算への利用やコンパイラ最適化による利用なども見られる。200x年代後半頃から、GPUによる汎目的計算 (GPGPU) が行われるようになってきている。但し、一般的なCPUSIMD機能やGPGPUは、可変長ベクトル命令をサポートしていなかったり、ランダムメモリアクセスに弱いなどの欠点があるため、完全なベクトルプロセッサではない[1]
概要

ベクトルプロセッサに対し、いわゆる(レトロニムで)スカラプロセッサと呼ばれる、従来の、あるいは一般的なプロセッサの命令は、1個の命令(オペコード)に対する0個?3個の[2]引数(オペランド)として、1個かせいぜい2個[3]のワードから成るスカラ値しか取り扱えない。例として「AとBを加算しCに代入せよ」といったようなプログラムを考えよう(A、B、Cはいずれもメモリにある変数とする)。だいたい、CISCであれば「Copy [A], R1」「Add [B], R1」「Copy R1, [C]」といった感じの機械語命令で、RISCであれば「Load [A], R1」「Load [B], R2」「Add R1, R2, R3」「Store R3, [C]」といった感じの機械語命令で、だいたいどちらも数個の命令により、数個の値(スカラ値)を操作している。

ここで、AやBやCというデータはメモリに保持されるものであり、メモリアドレスにより識別/特定される。アドレスをデコードし、メモリからデータを取り出すには一定の時間が必要となる。プロセッサの高速化に合わせてバスやメモリを高速化(正確には高スループットだけでなく低レイテンシであることも重要)することは不可能であったため(フォン・ノイマン・ボトルネック)、「周辺がプロセッサに追いつかない」ということが問題となる。

また、プロセッサにおける命令の処理は「命令パイプライン」で行われる。最初のサブユニットがアドレスを読み込み、デコード、次のユニットがアドレスからデータを取り出し、その次が演算を行う仕組みである。パイプラインの仕掛けは、まるで組立ラインのように一つ目の命令が終わる前に次の命令をデコードし始めることで、アドレス・デコーダは絶えず使用され続ける。

一方で科学技術計算において必要な大量の計算では、ベクトルの加算のことを考えてみればわかるように、配列のそれぞれのデータに対して、一斉に同じ演算をするようなものが多い。画像処理などはその最たる例であり、さらに行列の乗算などでは行列が大きくなると計算量は飛躍的に大きくなる。これを効率的に処理するには、命令を「アドレスAから始まる配列と、アドレスBから始まる配列の各要素を足し、アドレスCから始まる配列として戻せ」といったようなものにし、パイプラインにはそれぞれの配列のデータを次々と送り込むようにすれば、演算器が常に働き続けることになり、効率よく大量の計算を処理できる。

2組の、それぞれ10個ある数字を加算していく単純なタスクを例に取ると、普通のプログラミングではループ処理で、1組ずつ数字を取り出し、10回加算を繰り返すコードを書く。プロセッサから見ると、以下のような命令となる。execute this loop 10 times(ここから10回ループ) read the next instruction and decode it(次の命令を読み出し、解読) fetch this number(こちらの数字を取り出す) fetch that number(あちらの数字を取り出す) add them(加算) put the result here(ここに結果を)end loop(ループ終わり)

ベクトル計算機だと以下のように、かなり異なったものとなる。read instruction and decode it(命令を読み出し、解読)fetch these 10 numbers(こちらの数字を10個丸ごと取り出す)fetch those 10 numbers(あちらの数字を10個丸ごと取り出す)add them(一気に加算)put the results here(まとめて結果を保存)

この方法ならばアドレスの解読は2箇所だけで済む。ただし短縮できる時間はアーキテクチャによる。もう1つの利点は命令読み出しが10回から1回に減ることである。コード自体も短くなるので、よりメモリの効率化が図られる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:30 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef