512ビット・ベクトルプログラミング入門
AVX-512 命令を駆使しよう
著者 | 北山 洋幸 |
---|---|
判型 | B5変型、504頁 |
ISBN | 978-4-87783-507-1 |
価格 | 本体5,000円 |
発行日 | 2021年8月10日(初版 第1刷発行) |
備考 | ダウンロードサービス:学習に使えるサンプルファイル |
本書の記載内容について訂正があります。こちらを参照してください。
本書について
本書では、SIMD命令、特にIntel社CPUのAVX-512命令について解説します。Intel社CPUのSIMD命令は、MMXやSSE命令、そしてAVXやAVX2と進化し、ついに512ビットをサポートしたAVX-512命令を装備するようになりました。AVX-512は、整数演算を強化、ベクトル長の拡張、512ビットだけでなく128ビットまたは256ビットの操作が可能です。また、マスクレジスターやいくつかの機能追加が行われています。
インストラクションの解説から、簡単なサンプルプログラム、そして1次元や2次元のサンプルプログラムまで示し、AVX-512命令の理解を深めます。
目次
- 第1章 SIMD概論
- 1.1 フリンの分類
- 1.2 SIMD概要
- 1.3 SIMD命令で扱うデータ形式
- 1.4 SIMD命令とは
- 第2章 はじめてのプログラム
- 2.1 C++言語で記述
- 2.2 SSE命令で記述
- 2.3 SSE命令をインラインアセンブリで記述
- 2.4 AVX命令で記述
- 2.5 AVX-512命令で記述
- 2.6 イントリンシックの解説
- 2.7 ビルド方法
- 第3章 AVX-512
- 3.1 AVX-512の詳細
- 3.2 AVX(AVX2)からAVX-512へ
- 3.3 命令セットの判断
- 3.4 イントリンシックとインクルードファイル
- 3.5 AVX-512Fの特徴
- 3.6 AVX-512のレジスター
- 3.7 イントリンシックとレジスター
- 3.8 マスクレジスター
- 3.9 プレディケーション
- 3.10 ギャザー・スキャッター
- 3.11 丸め
- 第4章 エミュレーター
- 4.1 Intel Software Development Emulator(Intel SDE)
- 4.2 ダウンロード
- 4.3 インストール
- 4.4 sdeの起動(Windows)
- 4.5 実行例(Windows)
- 4.6 sdeの起動(Linux)
- 4.7 実行例(Linux)
- 第5章 アセンブリ言語で記述
- 5.1 Windowsの例
- 5.2 Ubuntuの例
- 第6章 AVX-512とメモリー
- 6.1 イントリンシックを使用した変数の宣言
- 6.2 アライメント
- 6.3 初期化
- 6.4 メモリーの動的割付
- 6.5 ポータビリティ
- 第7章 簡単な応用例
- 7.1 配列の垂直演算
- 7.2 配列の水平演算
- 7.3 長いデータの総和を求める例
- 第8章 3Dベクトルの正規化(AOS、SOA)
- 8.1 AOSとSOA
- 8.2 AOSからSOAへのシャッフル
- 8.3 AVXで一般化した関数
- 8.4 AVX-512で一般化した関数
- 8.5 AVX-512で一般化した関数(アセンブリ言語版)
- 第9章 1次元データ処理
- 9.1 長大な1次元配列に定数を乗ずる
- 9.2 プログラム全体
- 9.3 1次元配列同士の乗算
- 第10章 フィルター
- 10.1 積和でフィルター
- 10.2 C++による逐次処理プログラム
- 10.3 ベクトル化したプログラム
- 10.4 Cpfmクラス
- 10.5 実行と性能評価
- 10.6 AVXの例
- 10.7 データ操作ツール群
- 第11章 2次元データ
- 11.1 読み込み関数
- 11.2 ネガティブ処理
- 11.3 スレッショルド処理
- 11.4 合成処理
- 11.5 AOS-SOA応用
- 11.6 単純な行列の積
- 11.7 データ操作ツール群
- 第12章 AVX-512系命令
- 12.1 加算の組込み関数
- 12.2 減算の組込み関数
- 12.3 乗算の組込み関数
- 12.4 最大値と最小値を特定する組込み関数
- 12.5 ブレンド組込み関数
- 12.6 ビット単位演算系命令
- 12.7 ブロードキャストスカラー系組込み関数
- 12.8 比較系命令系組込み関数
- 12.9 コンプレス系命令系組込み関数
- 12.10 変換系組込み関数
- 12.11 拡張/ロード操作の組込み関数
- 12.12 集約と分散操作の組込み関数
- 12.13 挿入/抽出操作の組込み関数
- 12.14 ロード/ストア操作の組込み関数
- 12.15 その他の操作の組込み関数
- 12.16 移動操作の組込み関数
- 12.17 パック/アンパック演算の組込み関数
- 12.18 置換操作の組込み関数
- 12.19 リデュース組込み関数
- 12.20 設定操作の組込み関数
- 12.21 シャッフル組込み関数
- 12.22 テスト操作の組込み関数
- 12.23 型キャスト操作の組込み関数
- 12.24 マスク操作の組込み関数
- 12.25 SVML操作の組込み関数
本文訂正情報
[2023-1-24更新]本文中に誤りがありました。お詫びして訂正いたします。
89ページの本文を下記の通り訂正します。
【誤】
RAX、RCX、RDX、R8~R11、YMM0~YMM5の各レジスターは壊してかまいません。それ以外のレジスターは保護しなければなりません。
【正】
RAX、RCX、RDX、R8~R11、ZMM0~ZMM5、ZMM16~ZMM31の各レジスターは壊してかまいません。それ以外のレジスターは保護しなければなりません。
また、90ページの図5.13を下図の通り訂正します。