SIMD アーキテクチャーの略語の解説

同カテゴリーの次の記事

ベクトル・プログラミング: インテル® SSE4.2 からインテル® AVX2 への変換例

この記事は、Go Parallel に掲載されている「Decoding Acronyms of SIMD Architectures」の日本語参考訳です。


並列処理関連の資料や記事では、さまざまな略語 (SIMD、SSE4.2、AVX、AVX2 など) が多用されており、理解しづらいこともあるでしょう。ここでは、いくつかの主な略語について説明します。

インテルは次々と新しいプロセッサーを発表しているため、テクノロジーの変化についていくのは大変です。Go Parallel では、主にチップの並列処理機能、特にマルチコアとベクトル化に注目しています。ほとんどの読者は、マルチコアについて、「クアッドコア」チップには 4 つのコアがあり、本質的にはそれぞれが独立したプロセッサーであることは理解しているでしょう。では、コア内部でハイパースレッディングまたは物理スレッドのいずれかのテクノロジーが利用されていることはご存知ですか? ベクトル化に関する略語は非常に多く、専門家でさえも混乱することがあります。この記事では、ベクトル化に関するいくつかのテクノロジーの概要 (および略語) を説明します。ハイパースレッディングと物理スレッドの違い、そして各マルチコア・アーキテクチャーでの利用方法については、次回に説明したいと思います。

ベクトルサイズ (ベクトル長)

各種テクノロジー間の最も大きな違いは、ベクトルのサイズです。最新のチップは 512 ビットのレジスターを搭載しており、16 個の単精度浮動小数点数または 8 個の倍精度浮動小数点数を同時に処理できます。前世代のチップでは、レジスターサイズは 256 ビットでした。さらに、各種テクノロジー間ではベクトル操作をサポートする命令セットも異なります。

命令セット

ベクトル化に関する略語の多くは、異なる SIMD (Single Instruction Multiple Data) ベクトル命令セットを指します。ここでは、最近見かけるいくつかの略語に触れ、MMX のような古いものは取り上げません。

1 つ目は、インテル® ストリーミング SIMD 拡張命令 (インテル® SSE) です。古いバージョン (SSE、SSE2、SSE3) は、浮動小数点ベクトル操作に対応しており、128 ビット・レジスターを搭載したチップで採用されました。その後、ドット積などの拡張を含む SSSE3 (S が 3 つ) が登場し、これも128 ビット・レジスターで処理を行っていました。これは 2006 年、つまり 8 年前で、数世代前のインテル® プロセッサー (インテル® Core™2 プロセッサー) のときのことです。ここで興味深いのは、SSSE3 まではマルチメディア処理に力が入れられたことです。SSE3 (S が 2 つ) には、マルチメディア (特にオーディオ分野) で重要なデジタル信号処理用の命令セットが含まれています。

SSSE3 とほぼ同時期 (2006 年後半) に登場した SSE4 にはいくつかのサブバージョンがあります。1 つ目は SSE4.1 で、一部のインテル® Core™2 プロセッサーで採用されました。2 つ目の SSE4.2 では大幅な変更が加えられました。この命令セットは、インテル® マイクロアーキテクチャー Nehalem (開発コード名) で採用され、このときからプロセッサー名に i3/i5/ i7 という表記が使われ始めました。これこそが、現在のインテル® プロセッサーの始まりと言えるでしょう。2007 年に登場したインテル® Core™ i3/i5/ i7 プロセッサーは、SSE4.2 命令セットにより、ベクトル化された文字列処理に対応していました。ただし、レジスターサイズは 128 ビットのままでした。

次に登場したのが、インテル® アドバンスト・ベクトル・エクステンション (インテル® AVX) です。AVX には 3 つのバージョンがあり、現時点ではそのうちの 2 つが製品化されています。1 つ目の AVX (AVX 1 と呼ばれることもあります) は 256 ビット・レジスター対応の命令を備え、256 ビットで処理を行います。AVX は、2009 年に登場した第 2 世代インテル® Core™ プロセッサー (開発コード名: Sandy Bridge) と 2011 年に登場した第 3 世代インテル® Core™ プロセッサー (開発コード名: Ivy Bridge) で採用され、i3/i5/i7 という製品名称も引き続き使用されました。AVX の後継である AVX2 には、多数のベクトル命令が追加されましたが、レジスターサイズは 256 ビットのままです。AVX2 は、2013 年 6 月に登場した最新の第 4 世代インテル® Core™ プロセッサー (開発コード名: Haswell) で採用されています。

最後に、現在開発中の AVX512 ではベクトルサイズが 512 ビットに拡張されます。AVX512 は、2015 年には製品化される予定です。

まとめ

ここで紹介した略語の多くは命令セットを指しており、プロセッサーは古い命令セットもサポートしているため (例えば、最新のインテル® プロセッサーでも SSE4.2 がサポートされています)、これらの略語は現在もまだ使われています。

各命令セットの詳細は、今後の記事で紹介していたいと思います。通常、C++ プログラマー (および Fortran プログラマー) が、アセンブリー言語に触れる機会はないでしょう。しかし、プロセッサーを最大限に利用するためには、アセンブリー言語の知識も必要になります。次回は、各種 SIMD 命令の詳細に触れる前に、さまざまなスレッド・アーキテクチャーについて説明します。

関連記事