ベクトル演算
[Wikipedia|▼Menu]
物理演算プロセッサ

3Dゲームに必要な物理演算を高速化するため、SIMDを利用。

PhysX(用のチップ)

汎用アクセラレータ

PCI Express接続の汎用SIMDアクセラレータ。倍精度行列演算を高速に行う目的で、ワークステーションスーパーコンピュータなどに搭載される。

CSX600 - クリアスピードによるメニーコアSIMD演算ユニット

SX-Aurora TSUBASA Vector Engine - NECのスパコンSX-Aurora TSUBASA搭載の演算ユニットをバラ売りしたもの。8コア、最大2.45TFLOPS[9]

コンパイラサポート

SIMD命令を利用するには、各プロセッサの固有命令をアセンブラで直接記述するほか、高水準言語のコンパイラに実装されている組み込み関数(英語版) (intrinsics/intrinsic functions) を利用する方法もある。通例C言語/C++コンパイラには各プロセッサ固有の組み込み関数を定義したヘッダーファイルが用意されており、組み込み関数を呼び出すことで、アセンブラを使用することなく対応するSIMD命令を利用したソースコードを記述することができる。ただしSIMD命令セットおよび組み込み関数はプロセッサによって異なるため、このように手動でベクトル化するとソースコードの移植性が低下するという問題がある。また、本来のアルゴリズムとは関係のない下位レベルのコードを記述しなければならないため、メンテナンス性も低下する。

コンパイラの中には、SIMD命令による自動ベクトル化に対応しているものもある。自動ベクトル化はコンパイラ最適化の一種であり、特定のデータ型の連続したメモリ領域に対する同一の演算の繰り返しなど、特定のパターンに合致する処理を、SIMD命令を使ったベクトル演算に置き換えて高速化する[10][11][12]。自動ベクトル化は手動ベクトル化と比較してきめ細やかな制御は難しく、高速化の度合いはコンパイラの解析能力に左右されるが、ソースコードの移植性やメンテナンス性を維持したまま高速化できるというメリットもある。Clang/LLVMのように、コンパイラ最適化のヒントとしてベクトル幅などを固有のプラグマ指令で指定できるものもある。

OpenMP 4.0ではSIMDベクトル化のプラグマ指令が導入された[13]

Javaでは自動ベクトル化に対応しているほか、Java 16からVector APIが追加になっている。[14]

.NETおよび.NET Framework 4.6以降の64ビット版実行時コンパイラ (RyuJIT) は、System.Numerics名前空間に含まれるSIMD対応型を使って記述されたマネージコードを、SIMD命令で並列化されたネイティブ機械語コードにJITコンパイルすることができる[15]

WebAssemblyでは、128ビットのSIMD命令があり、Chrome 91、Firefox 89、Safari 16.4などで実装されている。[16]
ビット演算

ビット演算 (bitwise operation) の命令は、複数のビットを同時に処理することのできる並列性を持つため、広義のSIMDとして並列計算に利用されることもある。
脚注
注釈^ 英語では「シムディー」(sim-dee) のように読まれる[1]。日本では「シムド」と呼ぶことがある。
^ "single instruction stream, multiple data stream" とする資料もある[2][3][4]

出典^ SIMD - MDN Web Docs Glossary: Definitions of Web-related terms 。MDN
^ P.HAYES, JOHN (1978,1979). Computer Architecture and Organization. McGRAW-HILL INTERNATIONAL BOOK COMPANY. p. 211. .mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation.cs-ja1 q,.mw-parser-output .citation.cs-ja2 q{quotes:"「""」""『""』"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free a,.mw-parser-output .citation .cs1-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited a,.mw-parser-output .id-lock-registration a,.mw-parser-output .citation .cs1-lock-limited a,.mw-parser-output .citation .cs1-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription a,.mw-parser-output .citation .cs1-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:#d33}.mw-parser-output .cs1-visible-error{color:#d33}.mw-parser-output .cs1-maint{display:none;color:#3a3;margin-left:0.3em}.mw-parser-output .cs1-format{font-size:95%}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}ISBN 0-07-027363-4 
^6 群「コンピュータ - 基礎理論とハードウェア」 - 5 編「コンピュータアーキテクチャ(II) 先進的」 - 4 章「ベクトルコンピュータ」 。電子情報通信学会「知識ベース」
^ David A. Patterson and John L. Hennessy (2007). Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann Publishers. p. 596. ISBN 978-0-12-370606-5 


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

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