SIMD
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/12/29 13:19 UTC 版)
解説
同一の演算を繰り返すような操作をスカラー計算機のように逐次的に行なうのではなく、一度に行なうものである。
例えば、4次元ベクトル同士の加算を実行する場合、X, Y, Z, Wの成分ごとに加算処理を行なう。
ここで、それぞれの成分を32ビットの単精度浮動小数点数で表すとする。32ビットのレジスタ幅を持ち、1命令で32ビットのデータを1組だけ処理できるプロセッサの場合、成分ごとの加算処理すなわち4回の加算命令を逐次実行する必要がある。一方、128ビットのレジスタ幅を持ち、1命令で32ビットのデータ4組を同時に処理できるSIMD命令セットをサポートするプロセッサの場合、1回の命令で全成分をまとめて演算することができ、処理にかかる理論上の消費サイクル数は1/4になる。多くの場合、128ビットを使い切るデータはあまりなく、一般に128ビットを2分割し64ビット×2として使ったり、4分割し32ビット×4として使ったり、8分割し16ビット×8として使ったり、16分割し8ビット×16として使ったりするが、結局それぞれ1回のサイクルで2倍、4倍、8倍、16倍のデータ処理が可能になり、結果として相対的に低いクロック周波数でも高い性能を引き出しやすい。
例えば音声データ全体の音量を倍にしたいとする。デジタルデータではある瞬間の音量が数値として記録されているので、全ての値を倍にすればよい。このように大量のデータに同じ処理を施すときに性能を発揮するため、一般にはマルチメディアの処理に向いているとされる。
SIMD型で、複数の演算装置を並列に使用する計算を初期に試みたコンピュータとしては、ILLIAC IVがある。これに対し、Cray-1のような典型的なベクトル型スーパーコンピュータでは並列に計算するのではなく、パイプライン処理により1個の演算装置を休ませることなく計算させ続ける。ただしベクトル演算という用語は、広義には1命令で複数の要素を計算させるものについて、同時(並列)に計算するものも、パイプラインで計算するものも指すが、ベクトル計算機と言った場合は主として、20世紀のスーパーコンピュータに多く採用されていたパイプライン型を指すことが多い。
他の技術と同じく1990年代後半からパーソナルコンピュータのCPU/GPU、ゲーム機等にも応用された。
なお、SIMD命令を使ったとしても、プロセッサの命令実装形態によっては演算性能が向上しないケースもある。例えば256ビットSIMD命令に対応したプロセッサであっても、256ビット幅の命令を1サイクルで実行できるとは限らず、128ビットの演算器を使って2サイクルで実行する実装になっていることもある。
全ての処理をSIMDで行なえないこともないが、32ビット幅で十分な整数スカラー演算や論理演算の場合、本数の多い従来の汎用レジスタを有効利用するため、SIMDユニットは使わず通常のALUを使うことが多い。また、コンペア・アンド・スワップのような特殊命令は汎用レジスタとメモリの間でデータ交換をするため、SIMDレジスタは使えない。このような演算内容やプロセッサに合わせた最適化をコンパイラが行なってくれることも多い。
注釈
出典
- ^ 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. 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
- ^ SIMD(Single Instruction/Multiple Data)とは - IT用語辞典 e-Words
- ^ 株式会社インプレス (2021年3月31日). “Arm、10年ぶりの新アーキテクチャ「Armv9」。富岳のSVE改良版やコンフィデンシャルコンピューティング機能追加”. PC Watch. 2021年12月30日閲覧。
- ^ 【後藤弘茂のWeekly海外ニュース】NVIDIA次世代SoC「Xavier」は進化版DenverとVoltaを搭載 - PC Watch
- ^ 株式会社インプレス (2014年3月19日). “【後藤弘茂のWeekly海外ニュース】 スマートフォンのグラフィックスを加速する「PowerVR Series6 Rogue」”. PC Watch. 2021年12月29日閲覧。
- ^ NEC SX-Aurora TSUBASA Vector Engineの取り扱いを開始
- ^ Auto-Vectorizer in Visual Studio 2012 – Overview – Parallel Programming in Native Code
- ^ インテル® C++ コンパイラーのベクトル化ガイド - Compiler_AutoVectorization_Guide.pdf
- ^ Auto-Vectorization in LLVM — LLVM git documentation
- ^ OpenMP 4.0 を使用してプログラムで SIMD を有効にする | iSUS
- ^ .NET における数値 | Microsoft Docs
固有名詞の分類
- SIMDのページへのリンク