単一命令、複数データ

単一命令、複数データ

SIMD単一命令複数データ)は、フリン分類における並列コンピューティング(処理)の一種です。SIMDは、複数のデータポイントに対して同時に同じ操作を実行する複数の処理要素を備えたコンピュータを表します。SIMDは内部(ハードウェア設計の一部)に存在する場合もあり、命令セットアーキテクチャ(ISA)を介して直接アクセスすることもできますが、ISAと混同しないでください。

このようなマシンはデータ レベルの並列性を活用しますが、同時実行性は活用しません。つまり、同時 (並列) 計算は行われますが、各ユニットは特定の瞬間に (異なるデータで) まったく同じ命令を実行します。簡単な例として、多数の数値のペアを加算する場合、SIMD ユニットすべてが加算を実行しますが、各ユニットには加算する値のペアが異なります。SIMD は、デジタル画像のコントラストを調整したり、デジタル オーディオの音量を調整したりするなどの一般的なタスクに特に適しています。最新の中央処理装置(CPU) 設計のほとんどには、マルチメディア使用のパフォーマンスを向上させる SIMD 命令が組み込まれています。最近の CPU では、SIMD ユニットはキャッシュ階層およびプリフェッチ メカニズムと密接に結合されており、大きなブロック操作中のレイテンシが最小限に抑えられています。たとえば、AVX-512 対応プロセッサは、キャッシュ ライン全体をプリフェッチし、単一の SIMD サイクルで融合乗加算 (FMA) を適用できます。

SIMTとSIMDの混同

ILLIAC IVアレイの概要、ARPA資金によるスチュワード・デネンバーグによる導入説明より、1971年7月15日[ 2 ]

SIMDは、 Flynnの1972年分類法において3つの異なるサブカテゴリに分類されます。その1つが単一命令複数スレッド(SIMT)です。SIMTは、タスクのタイムシェアリング(タイムスライス)であるソフトウェアスレッドハードウェアスレッドと混同しないでください。SIMTは、 ILLIAC IVに見られるような、真の同時並列ハードウェアレベル実行です。

SIMDは、 Cray 1で特徴付けられ、 Duncanの分類法で明確にされているベクトル処理と混同しないでください。SIMD プロセッサとベクトルプロセッサの主な違いは、Crayスタイルの命令の有無です。 SET VECTOR LENGTH

歴史

レジスタ内で SIMDが初めて運用されたのは、 1958 年のTX-2です。このプロセッサは、36 ビットの演算と、2 つの 18 ビットまたは 4 つの 9 ビットのサブワード演算を実行できました。

SIMD 命令が初めて商用化されたのは、1972 年に完成した ILLIAC IVでした。

CDC Star-100Texas Instruments ASCといった1970年代初頭のベクトル型スーパーコンピュータは、単一の命令で「ベクトル」データを処理することができました。ベクトル処理は、特に1970年代と1980年代にCrayによって普及しました。現在、ベクトル処理アーキテクチャはSIMDコンピュータとは別のものとして考えられています。Duncanの分類法にはベクトル処理アーキテクチャが含まれますが、 Flynnの分類法には含まれません。これは、Flynnの研究(1966年、1972年)がCray-1 (1977年)より前のものであるためです。しかし、ベクトルプロセッサの複雑さから、レジスタ内のSIMDと呼ばれるより単純な構成が生まれました。

現代のSIMD型コンピュータの初期の時代は、シンキング・マシンズ・コネクション・マシンCM-1やCM-2といった超並列処理型のスーパーコンピュータによって特徴づけられました。これらのコンピュータは、並列動作する多数の限定機能プロセッサを搭載していました。例えば、シンキング・マシンズCM-2に搭載された65,536個のシングルビットプロセッサは、それぞれが同じ命令を同時に実行し、ハイパーキューブ接続ネットワークやプロセッサ専用RAMを用いてオペランドを見つけ、例えば一度に65,536組のビットを論理的に結合することが可能でした。Intel i860 XPなどの汎用プロセッサをベースとした安価なスカラーMIMD(複数命令複数データ)アプローチがより強力になり、SIMDへの関心が薄れると、スーパーコンピューティングはSIMDアプローチから遠ざかっていきました。 [ 3 ]

現在のSIMDプロセッサの時代は、スーパーコンピュータ市場ではなく、デスクトップコンピュータ市場から生まれました。1990年代にデスクトッププロセッサがリアルタイムゲームやオーディオ/ビデオ処理に対応できるほど強力になると、この種の計算能力の需要が高まり、マイクロプロセッサベンダーは需要を満たすためにSIMDを採用するようになりました。[ 4 ]この復活は、内部でSIMDを大いに活用するDirectXとOpenGLシェーダモデルの台頭とも一致しました。グラフィックスAPIは、プログラマがデータ並列プログラミングスタイルを採用することを促し、間接的にデスクトップソフトウェアにおけるSIMDの採用を加速させました。ヒューレット・パッカードは、1994年にMPEGデコードを高速化するMultimedia Acceleration eXtensions(MAX)命令をPA-RISC 1.1デスクトップに導入しました。[ 5 ]サン・マイクロシステムズは、1995年にUltraSPARC Iマイクロプロセッサの「 VIS」命令セット拡張にSIMD整数命令を導入しました。 MIPS も同様のMDMXシステムでこれに追随しました。

デスクトップSIMDが初めて広く導入されたのは、1996年にIntelがx86アーキテクチャ向けにMMX拡張を導入した時でした。これがきっかけとなり、 Motorola PowerPCとIBM POWERシステムに、より強力なAltiVecシステムが導入されました。Intelは1999年に全く新しいSSEシステムを導入することでこれに応えました。それ以来、両アーキテクチャのSIMD命令セットには、いくつかの拡張が加えられてきました。高度なベクトル拡張であるAVX、AVX2AVX-512はIntelによって開発されました。AMDは現在の製品でAVX、AVX2AVX-512をサポートしています。 [ 6 ]

デメリット

SIMDでは、同等のスカラーコードや同等のベクトルコードと比較した場合、コードサイズが1桁増加するのは珍しいことではなく、ベクトルISAでは1桁以上の効率(命令ごとに行われる作業)を達成できます。[ 7 ]

ARMのスケーラブル・ベクター拡張は、 Flynnの分類法では「述語付き」(マスク付き) SIMDとして知られ、現在ではより一般的に知られている別のアプローチを採用しています。このアプローチはベクター処理ほどコンパクトではありませんが、述語なしSIMDよりもはるかに優れています。詳細な比較例は、ベクタープロセッサ § ベクター命令の例に記載されています。

年表

ベクトルプロセッサを除くSIMDスーパーコンピュータの例
1974ILLIAC IV - スカラー64ビットPEで構成されるアレイプロセッサ
1974ICL 分散アレイプロセッサ(DAP)
1976バローズ・サイエンティフィック・プロセッサー
1981Martin Marietta幾何演算並列プロセッサ( Lockheed Martin、その後TeranexおよびSilicon Optixで継続)
1983–1991NASA /ゴダード宇宙飛行センターの超並列プロセッサ(MPP)
1985Thinking Machines CorporationのConnection Machine、モデル 1 および 2 (CM-1 および CM-2)
1987–1996MasPar MP-1およびMP-2
1991WavetracerのZephyr DC
2001Pyxsys, Inc. の Xplor

ハードウェア

CPU

小規模 (64 または 128 ビット) SIMD は、1990 年代初頭に汎用 CPU で普及し、1997 年以降もAlphaの Motion Video Instructions (MVI) で採用され続けました。SIMD 命令は、程度の差はあれ、ほとんどの CPU に採用されています。これには、IBMPowerPC用AltiVecおよび Signal Processing Engine (SPE) 、Hewlett-Packard (HP) のPA-RISC Multimedia Acceleration eXtensions (MAX)、IntelMMX および iwMMXtStreaming SIMD Extensions (SSE)、SSE2SSE3 、 SSSE3SSE4.xAMD3DNow!などがあります。 、ARC のARC ビデオ サブシステム、SPARCVISと VIS2、SunMAJCARM のNeonテクノロジー、MIPSMDMX (MaDMaX) およびMIPS-3D

Intel のAVX-512 SIMD 命令は、一度に 512 ビットのデータを処理します。

コプロセッサ

IBM、ソニー、東芝が共同開発したCell プロセッサのSynergistic Processing Element (SPE) の命令セットは、主に SIMD ベースになっています。

一部のGPUはSIMDベースですが、すべてではありません。AMDのGPUはTeraScale(マイクロアーキテクチャ)以降、SIMDベースであり、この機能は2020年代のRDNAマイクロアーキテクチャとCDNAマイクロアーキテクチャにも引き継がれています。[ 8 ]その上に単一命令複数スレッド(SIMT)レイヤーが配置されています。 [ 9 ]一方、NvidiaのCUDAアーキテクチャは、SIMTを備えたスカラーコアを使用しています。[ 10 ]

Philips(現NXP)は、 Xetalと呼ばれるSIMDプロセッサを複数開発しました。Xetalは、特にビジョンタスク向けに設計された320個の16ビットプロセッサエレメントを備えています。

AppleのM1およびM2チップには、GPUおよびNeural Engineと深く統合されたSIMDユニットも搭載されており、画像フィルタリング、畳み込み、行列乗算に最適化されたApple設計のSIMDパイプラインを使用しています。この統合メモリアーキテクチャにより、SIMD命令は共有メモリプール上でより効率的に動作します。(CPU部分は通常のNEONを実装しています。)

ソフトウェア

4つの8ビット数値の通常の3倍化です。CPUは1つの8ビット数値をR1にロードし、それをR2と乗算し、その結果をR3からRAMに保存します。この処理は各数値について繰り返されます。
4つの8ビット数値をSIMD方式で3倍に演算する処理です。CPUは4つの数値を一度に読み込み、それらを1回のSIMD乗算で乗算し、それらを一度にRAMに保存します。理論上、速度は4倍になります。

SIMD 命令は 3D グラフィックスの処理に広く使用されていますが、SIMD が組み込まれた最新のグラフィック カードが、このタスクを CPU からほぼ引き継いでいます。一部のシステムでは、ベクトル内の要素を再パックする並べ替え関数も含まれているため、特にデータ処理と圧縮に便利です。暗号化にも使用されています。[ 11 ] [ 12 ] [ 13 ] GPU での汎用コンピューティング ( GPGPU ) のトレンドにより、今後 SIMD の使用が拡大する可能性があります。LLVM 、GNU コンパイラ コレクション(GCC)、Intel の ICC などの最近のコンパイラでは、積極的な自動ベクトル化オプションが用意されています。開発者は、やなどのフラグを使用してこれらを有効にし、コンパイラが SIMD との互換性のためにループを再構築するように指示することが よくあります。-O3-ftree-vectorize

パーソナルコンピュータソフトウェアにおけるSIMDシステムの導入は、当初は多くの問題により遅々として進みませんでした。その一つは、初期のSIMD命令セットの多くは、既存の浮動小数点レジスタを再利用するため、システム全体のパフォーマンスを低下させる傾向があったことです。MMXや3DNow!などのシステムは幅広いユーザーにとって関心の薄いデータ型をサポートしており、 FPUレジスタとMMXレジスタを切り替えるための高負荷なコンテキストスイッチング命令を備えていました。また、コンパイラもサポートしていないことが多く、プログラマはアセンブリ言語コーディングに頼らざるを得ませんでした。

x86におけるSIMDの登場は遅かった。AMDによる3DNow!IntelによるSSEの導入は状況を多少混乱せたが、現在では(AMDがSSEを採用したことで)システムは落ち着きを見せており、新しいコンパイラの登場によりSIMD対応ソフトウェアが増えると予想されている。IntelとAMDは現在、SIMD命令を使用する最適化された数学ライブラリを提供しており、 libSIMDSIMDx86SLEEFといったオープンソースの代替ライブラリも登場し始めている(libmも参照)。[ 14 ]

Apple Computerは、 SIMD市場に参入したのは他より遅かったにもかかわらず、やや成功を収めた。AltiVecは豊富なシステムを提供し、 MotorolaIBMGNUのますます洗練されたコンパイラを使用してプログラムできるため、アセンブリ言語プログラミングはほとんど必要なかった。さらに、SIMDの恩恵を受けるシステムの多くは、iTunesQuickTimeなど、Apple自身によって提供されていた。しかし、2006年に、AppleコンピュータはIntel x86プロセッサに移行した。AppleのAPI開発ツール( XCode )は、AltiVecだけでなくSSE2SSE3をサポートするように修正された。Appleは、IBMとFreescale SemiconductorからPowerPCチップを購入する主要企業だった。Appleは自社製品にPowerPCプロセッサを採用しなくなったが、FreescaleとIBMのいくつかのPowerPCおよびPower ISA設計でAltiVecの開発が続けられている。

レジスタ内SIMDSWAR)とは、SIMD命令を直接サポートしていないハードウェア上で、汎用レジスタ内でSIMDを実行するための一連のテクニックとトリックを指します。これにより、SIMDを直接サポートしていないハードウェア上でも、特定のアルゴリズムの並列処理を活用できます。

プログラマインターフェース

SIMD命令セットの開発者は、ベクトルコードの生成を保証する組み込み関数や特殊なデータ型(演算子オーバーロードを含む)を備えた独自のCおよびC++言語拡張を作成するのが一般的です。Intel、AltiVec、ARM NEONは、各CPUをターゲットとするコンパイラで広く採用されている拡張機能を提供しています。(より複雑な演算はベクトル演算ライブラリが担当します。)

GNU Cコンパイラは、SIMDデータ型を定義する方法を提供することで、拡張機能をあらゆるプラットフォームで使用できるユニバーサルインターフェースに抽象化することで、拡張機能をさらに一歩進めています。[ 15 ] LLVM Clangコンパイラもこの機能を実装しており、IRで定義された類似のインターフェースを備えています。[ 16 ] Rustのpacked_simdクレート(および実験的なstd::simd)はこのインターフェースを使用しており、Swift 2.0以降も使用されています。

C++にはGCC拡張と同様に動作する実験的なインターフェースがありますstd::experimental::simd。LLVMのlibcxxはこれを実装しているようです。GCCとlibstdc++では、GCC拡張をベースに構築されたラッパーライブラリが利用可能です。[ 17 ]

MicrosoftはRyuJITで.NETにSIMDを追加しました。[ 18 ]System.Numerics.Vector NuGetで入手できるパッケージはSIMDデータ型を実装しています。[19] JavaにもSIMD命令用の新しいAPIが提案されており、OpenJDK 17インキュベータモジュールで利用可能です。[20] また、サポートされていないCPUでは単純なループに安全にフォールバックするメカニズム備えます

SIMDデータ型を提供する代わりに、コンパイラにループを自動ベクトル化するようにヒントを与えることもできます。これにより、データ依存性がないというアサーションが考慮される可能性があります。これはSIMD変数を直接操作するほど柔軟ではありませんが、より使いやすいです。OpenMP 4.0以降にはヒントがあります。[ 21 ]このOpenMPインターフェースは、 Cilk[ 22 ]、GCCの[ 23 ]など、多くの非標準拡張機能を置き換えました。#pragma omp simd#pragma simd#pragma GCC ivdep

プラットフォーム固有、汎用ベクトルベース、汎用ヒントベースのインターフェースの使用例としては、「SIMD everywhere」がある。これは、他のプラットフォーム用のプラットフォーム固有の組み込み関数(例えば、ARM NEON用のSSE組み込み関数)を実装したC/C++ヘッダーのコレクションである。[ 24 ]

SIMDマルチバージョン

コンシューマー向けソフトウェアは通常、複数世代にわたる幅広いCPUで動作することが期待されているため、プログラマーが新しいSIMD命令を使用してプログラムの計算性能を向上させる能力が制限される可能性があります。解決策としては、古いSIMD技術または新しいSIMD技術を使用する同じコードの複数のバージョンを用意し、実行時にユーザーのCPUに最適なものを選択する(動的ディスパッチ)ことが挙げられます。解決策には主に2つの種類があります。

FMVはアセンブリ言語で手動でコーディングされ、glibcやlibjpeg-turboといったパフォーマンスが重要なライブラリで広く使用されています。Intel C++コンパイラ、GCC 6以降のGNUコンパイラコレクション、そしてclang 7以降のClangでは、関数の複製と選択をコンパイラが処理する簡略化されたアプローチが採用されています。GCCとclangでは、target_clones関数を「複製」するためにコード内に明示的なラベルが必要ですが[ 25 ]、ICCでは自動的に(コマンドラインオプションで/Qax)実行されます。Rustプログラミング言語もFMVをサポートしています。GCCやClangと同様に、どの命令セットをコンパイル対象として定義するかはコードで定義しますが、複製はインライン展開によって手動で行われます。[ 26 ]

FMVを使用するにはGCCとClangのコード変更が必要となるため、ベンダーはライブラリのマルチバージョン化をより一般的に採用しています。これはコンパイラスイッチの変更のみで実現できるため、より容易です。GlibcLMVをサポートしており、この機能はIntelが支援するClear Linuxプロジェクトで採用されています。[ 27 ]

ウェブ上のSIMD

2013年、ジョン・マカッチャンは、 Dartプログラミング言語用のSIMD命令セットへの高性能インターフェースを作成したと発表しました。これにより、SIMDの利点を初めてWebプログラムに導入することができました。このインターフェースは2つのタイプで構成されています。[ 28 ]

  • Float32x4、4 つの単精度浮動小数点値。
  • Int32x4、4 つの 32 ビット整数値。

これらの型のインスタンスは不変であり、最適化されたコードではSIMDレジスタに直接マッピングされます。Dartで表現された演算は通常、オーバーヘッドなしで単一の命令にコンパイルされます。これはCおよびC++の組み込み関数に似ています。4 ×4行列乗算3D頂点変換マンデルブロ集合の可視化のベンチマークでは、Dartで記述されたスカラーコードと比較して、約400%の高速化が示されています。

IntelはIDF 2013で、McCutchanの仕様をV8SpiderMonkeyの両方に実装していると発表した。[ 29 ]しかし、2017年までにSIMD.jsはECMAScript標準キューから外され、 WebAssemblyで同様のインターフェースを追求することになりました。[ 30 ] SIMDのサポートはWebAssembly 2.0仕様に追加され、2022年に完成し、2024年12月に正式になりました。[ 31 ] LLVMの自動ベクトル化は、CまたはC++をWebAssemblyにコンパイルするときに、WebAssembly SIMDをターゲットにして自動的にSIMDを利用することができ、SIMD組み込み関数も利用できます。[ 32 ]

商用アプリケーション

一般的に、汎用コンピューティングにおいて SIMD 専用プロセッサの持続可能な商用アプリケーションを見つけるのは困難であることが判明しています。

ある程度の成功を収めているものの一つがGAPPです。これはロッキード・マーティン社によって開発され、同社のスピンオフ企業であるTeranex社によって商用部門に導入されました。GAPPの最近の改良版は、様々なビデオ規格やフレームレート(NTSCPAL、NTSCと高精細テレビ(HDTV)フォーマットなど)間の変換、デインターレース、画像ノイズ低減、適応型ビデオ圧縮、画像強調といったリアルタイムビデオ処理アプリケーションにおいて強力なツールとなっています。

SIMDがより広く普及しているアプリケーションはビデオゲームです。 1998年以降、ほぼすべての最新のビデオゲームコンソールは、アーキテクチャのどこかにSIMDプロセッサを組み込んでいます。PlayStation 2は、ベクトル浮動小数点ユニットの1つが、独自の命令ストリームを実行する自律型デジタル信号プロセッサ(DSP)として、または通常のCPU命令で駆動されるコプロセッサとして機能できるという点で、他に類を見ないものでした。3Dグラフィックスアプリケーションは、4次元ベクトルの演算に大きく依存するため、SIMD処理に適している傾向があります。MicrosoftDirect3D 9.0は、SIMD対応命令の使用を含む、独自の演算処理のプロセッサ固有の実装を実行時に選択するようになりました。

ベクトル処理を採用した後期のプロセッサとしては、PlayStation 3に搭載されたCellプロセッサがあります。これはIBMが東芝およびソニーと共同で開発したものです。Cellプロセッサは複数のSIMDプロセッサ(それぞれが独立したローカルストアを持ち、汎用CPUによって制御される非均一メモリアクセス(NUMA)アーキテクチャ)を採用しており、3Dおよびビデオ処理アプリケーションに必要な膨大なデータセットの処理に適しています。従来のISAとは異なり、独立したスカラーレジスタを持たず、最初からSIMDアーキテクチャを採用しています。

Ziilabsは、メディアプレーヤーや携帯電話などのモバイルデバイスで使用するためのSIMD型プロセッサを製造しました。[ 33 ]

より大規模な商用SIMDプロセッサは、ClearSpeed Technology, Ltd.とStream Processors, Inc.から提供されています。ClearSpeedCSX600(2004年)は96個のコアを搭載し、各コアには2つの倍精度浮動小数点演算ユニットが搭載されています。一方、CSX700(2008年)は192個のコアを搭載しています。Stream Processorsは、コンピュータアーキテクトのBill Dally氏が率いる企業です。同社のStorm-1プロセッサ(2007年)は、 MIPS CPUによって制御される80個のSIMDコアを搭載しています。

参照

参考文献

  1. ^ Flynn, Michael J. (1972年9月). 「いくつかのコンピュータ組織とその有効性」(PDF) . IEEE Transactions on Computers . C-21 (9): 948– 960. doi : 10.1109/TC.1972.5009071 .
  2. ^ 「アーカイブコピー」(PDF) 。2024年4月27日時点のオリジナル(PDF)からのアーカイブ{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)
  3. ^ 「MIMD1 - XP/S、CM-5」(PDF) .
  4. ^ Conte, G.; Tommesani, S.; Zanichelli, F. (2000). 「MMX/SSEによる高性能画像処理への長く曲がりくねった道」. Proc. Fifth IEEE Int'l Workshop on Computer Architectures for Machine Perception . doi : 10.1109/CAMP.2000.875989 . hdl : 11381/2297671 . S2CID 13180531 . 
  5. ^ Lee, RB (1995). 「PA-RISCプロセッサによるソフトウェア解凍によるリアルタイムMPEGビデオ」Compcon '95論文集. 情報スーパーハイウェイ技術. pp.  186– 192. doi : 10.1109/CMPCON.1995.512384 . ISBN 0-8186-7029-0. S2CID  2262046 .
  6. ^ 「AMD Zen 4 AVX-512パフォーマンス分析:Ryzen 9 7950Xレビュー」www.phoronix.com . 2023年7月13日閲覧
  7. ^ Patterson, David; Waterman, Andrew (2017年9月18日). 「SIMD命令は有害と考えられる」 . SIGARCH .
  8. ^ Lam, Chester. 「GCN、AMDのGPUアーキテクチャの近代化」 . chipsandcheese.com .
  9. ^ Lam, Chester. 「Hot Chips 34 – AMDのInstinct MI200アーキテクチャ」 . chipsandcheese.com . NVIDIAとAMDの両社において、マトリックス命令はSIMT抽象化モデルを破り、ウェーブフロント(NVIDIAでは「ワープ」)全体にわたって動作します。
  10. ^ 「バージョン 2.3 2009 年 8 月 27 日、CUDA アーキテクチャ向け OpenCL プログラミング ガイド」(PDF)
  11. ^ RE: SSE2 速度、SSE2 を使用して SHA ハッシュ アルゴリズムを実装する方法を示します
  12. ^ Salsa20の速度; Salsa20ソフトウェア、SSE2を使用して実装されたストリーム暗号を表示
  13. ^件名: SSE2 を使用した最大 1.4 倍の RSA スループット。非 SIMD SSE2 整数乗算命令を使用して実装された RSA を示しています。
  14. ^ 「SIMDライブラリ数学関数」 . Stack Overflow . 2020年1月16日閲覧
  15. ^ 「ベクター拡張」 . GNUコンパイラコレクション(GCC)の使用. 2020年1月16日閲覧
  16. ^ 「Clang言語拡張」 . Clang 11ドキュメント. 2020年1月16日閲覧
  17. ^ “VcDevel/std-simd” . VcDevel. 2020年8月6日.
  18. ^ 「RyuJIT: .NET 向け次世代 JIT コンパイラ」 2013 年 9 月 30 日。
  19. ^ 「JIT がついにプロポーズ。JIT と SIMD が結婚する」 2014 年 4 月 7 日。
  20. ^ 「JEP 338: ベクター API」
  21. ^ 「SIMD ディレクティブ。www.openmp.org
  22. ^ “Tutorial pragma simd” . CilkPlus . 2012年7月18日. 2020年12月4日時点のオリジナルよりアーカイブ。 2020年8月9日閲覧
  23. ^ Kruse, Michael. 「OMP5.1: ループ変換」(PDF) .
  24. ^ 「simd-everywhere/simde: SIMD命令セットをネイティブサポートしていないシステム向けの実装」 GitHub SIMD Everywhere 2025年11月6日
  25. ^ 「GCC 6における関数のマルチバージョン化」lwn.net . 2016年6月22日。
  26. ^ "2045-target-feature" . Rust RFCブック.
  27. ^ 「インテル® アーキテクチャー向けに最適化されたライブラリー・パッケージの透過的な使用」 Clear Linux* プロジェクト。 2019年9月8日閲覧
  28. ^ John McCutchan. 「DartでSIMDをWebに導入する」(PDF) 。2013年12月3日時点のオリジナル(PDF)からアーカイブ
  29. ^ 「JavaScriptにおけるSIMD」 . 01.org . 2014年5月8日.
  30. ^ "tc39/ecmascript_simd: EcmaScriptのSIMD数値型" . GitHub . Ecma TC39. 2019年8月22日. 2019年9月8日閲覧
  31. ^ 「Wasm 2.0 が完成 - WebAssembly」
  32. ^ 「WebAssemblyでSIMDを使用する」。Emscripten 4.0.11-git (dev)ドキュメント
  33. ^ 「ZiiLABS ZMS-05 ARM 9 メディアプロセッサ」ZiiLabs . 2011年7月18日時点のオリジナルよりアーカイブ2010年5月24日閲覧。