Enviar pesquisa
Carregar
x64 のスカラー,SIMD 演算性能を測ってみた @ C++ MIX #10
•
0 gostou
•
146 visualizações
M
Muneyoshi Suzuki
Seguir
発表時点での資料です.最新版の方をご参照ください.
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 16
Baixar agora
Baixar para ler offline
Recomendados
x64 のスカラー,SIMD 演算性能を測ってみた v0.1 @ C++ MIX #10
x64 のスカラー,SIMD 演算性能を測ってみた v0.1 @ C++ MIX #10
Muneyoshi Suzuki
x64 のスカラー,SIMD 演算のスループットを計測してみた
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
https://atnd.org/events/61785
フラグを愛でる
フラグを愛でる
MITSUNARI Shigeo
From IA-32 to avx-512
From IA-32 to avx-512
MITSUNARI Shigeo
システムプログラミング会 http://connpass.com/event/34995/
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
NVIDIA Japan
第23回 GPUコンピューティング講習会 - OpenACC講習会 - http://gpu-computing.gsic.titech.ac.jp/node/97
Prosym2012
Prosym2012
MITSUNARI Shigeo
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
https://atnd.org/events/57640
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
第1回 x86勉強会の発表資料
Recomendados
x64 のスカラー,SIMD 演算性能を測ってみた v0.1 @ C++ MIX #10
x64 のスカラー,SIMD 演算性能を測ってみた v0.1 @ C++ MIX #10
Muneyoshi Suzuki
x64 のスカラー,SIMD 演算のスループットを計測してみた
LLVM最適化のこつ
LLVM最適化のこつ
MITSUNARI Shigeo
https://atnd.org/events/61785
フラグを愛でる
フラグを愛でる
MITSUNARI Shigeo
From IA-32 to avx-512
From IA-32 to avx-512
MITSUNARI Shigeo
システムプログラミング会 http://connpass.com/event/34995/
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
NVIDIA Japan
第23回 GPUコンピューティング講習会 - OpenACC講習会 - http://gpu-computing.gsic.titech.ac.jp/node/97
Prosym2012
Prosym2012
MITSUNARI Shigeo
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
https://atnd.org/events/57640
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
第1回 x86勉強会の発表資料
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
第43回R勉強会@東京(#TokyoR) https://atnd.org/events/56275
ネイティブコードを語る
ネイティブコードを語る
Kenji Imasaki
逆アセンブルを眺めながらネイティブコードの楽しさについて語ります。ハング・メモリリークなど、ソフトウェアエンジニアであればだれでも経験するであろう問題について夏休みの自由研究のように観察します。 簡単な食事および伊藤園からのお茶が提供予定です。 【講演者略歴】 我孫子 泰祐 大学院にて非ノイマン型プロセッサを研究し、卒業後に小さな会社を立ち上げるも諸般の事情で日本マイクロソフトに入社。その後マイクロソフト本社へ転籍。現在は Windows部門にてソフトウェア開発に従事。工学博士。 【内容(予定)】 ネイティブコードとは? 逆アセンブルからCソースを脳内生成してみよう(バグ修正の存在確認) コンパイラによる最適化を観察してみよう(デバッグビルドとリリースビルド) 関数コールの仕組みを観察してみよう(関数呼び出し規約、スタックメモリ) 森の中でメモリリークに出遭ったら(ヒープメモリの観察) 森の中でハングに出遭ったら(クリティカルセクションの観察) 森の中でバッファオーバーランに出遭ったら(ガードページとクラッシュダンプ)
Boost Tour 1.50.0 All
Boost Tour 1.50.0 All
Akira Takahashi
Rの高速化
Rの高速化
弘毅 露崎
Gurobi python
Gurobi python
Mikio Kubo
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
notargs
How to showing cool graphics by a quad polygon
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
sample by xbyak_aarch64
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
2014/06/02 に、社内の新人教育で使ったテキスト。
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
R高速化
R高速化
Monta Yashi
Rのループ(for)がなぜ遅いか? 並列化によってどれくらい早くなるか? (どういった場合に早くなるか) を調べて勉強会で発表した資料になります。
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群
Norishige Fukushima
画像処理ライブラリであるOpenCVに足りない,いくつかの関数を追加し,そのコードの説明を行っています. ソースコードはこちら http://nma.web.nitech.ac.jp/fukushima/opencv/cvutil.zip
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Satoshi Yamada
PostgreSQLカンファレンス2014チュートリアルセッションで発表した際の資料です。
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
7/19に行った無料F#セミナーの資料です。関数プログラミングにご興味があればこちらのセミナーをどうぞ。http://www.mamezou.com/training/f_pro.html
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
第9回 HPC-Phys勉強会資料 https://hpc-phys.kek.jp/workshop/workshop201203.html
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ryos36
高位合成友の会での発表。高位合成とはなんでしょう?にはじまって、Python での高位合成の話と、その応用について。
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
2018/10/18 KMC例会講座 型無しラムダ計算のインタプリタを実装してみる
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
2021/11/20 Kernel/VM探検隊online part4 https://kernelvm.connpass.com/event/225573/
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
https://www.microsoft.com/ja-jp/events/decode/2018/ de:code 2018 セッションID: AD19 日本の第一人者が語る! C# の現状と今後への展望 「.NET Core 2.x 時代の C#」
Slide
Slide
Takefumi MIYOSHI
OpenCL +alpha. (1) OpenCL + I/O (2) trying kinds of high-level languages for OpenCL
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
https://lu.ma/wgpk8fdp
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
今年2月に1.1→2.0に更新されたNIST CSFの変更内容について整理したいと思います。
Mais conteúdo relacionado
Semelhante a x64 のスカラー,SIMD 演算性能を測ってみた @ C++ MIX #10
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
第43回R勉強会@東京(#TokyoR) https://atnd.org/events/56275
ネイティブコードを語る
ネイティブコードを語る
Kenji Imasaki
逆アセンブルを眺めながらネイティブコードの楽しさについて語ります。ハング・メモリリークなど、ソフトウェアエンジニアであればだれでも経験するであろう問題について夏休みの自由研究のように観察します。 簡単な食事および伊藤園からのお茶が提供予定です。 【講演者略歴】 我孫子 泰祐 大学院にて非ノイマン型プロセッサを研究し、卒業後に小さな会社を立ち上げるも諸般の事情で日本マイクロソフトに入社。その後マイクロソフト本社へ転籍。現在は Windows部門にてソフトウェア開発に従事。工学博士。 【内容(予定)】 ネイティブコードとは? 逆アセンブルからCソースを脳内生成してみよう(バグ修正の存在確認) コンパイラによる最適化を観察してみよう(デバッグビルドとリリースビルド) 関数コールの仕組みを観察してみよう(関数呼び出し規約、スタックメモリ) 森の中でメモリリークに出遭ったら(ヒープメモリの観察) 森の中でハングに出遭ったら(クリティカルセクションの観察) 森の中でバッファオーバーランに出遭ったら(ガードページとクラッシュダンプ)
Boost Tour 1.50.0 All
Boost Tour 1.50.0 All
Akira Takahashi
Rの高速化
Rの高速化
弘毅 露崎
Gurobi python
Gurobi python
Mikio Kubo
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
notargs
How to showing cool graphics by a quad polygon
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
sample by xbyak_aarch64
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
2014/06/02 に、社内の新人教育で使ったテキスト。
Wavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
R高速化
R高速化
Monta Yashi
Rのループ(for)がなぜ遅いか? 並列化によってどれくらい早くなるか? (どういった場合に早くなるか) を調べて勉強会で発表した資料になります。
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群
Norishige Fukushima
画像処理ライブラリであるOpenCVに足りない,いくつかの関数を追加し,そのコードの説明を行っています. ソースコードはこちら http://nma.web.nitech.ac.jp/fukushima/opencv/cvutil.zip
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
Satoshi Yamada
PostgreSQLカンファレンス2014チュートリアルセッションで発表した際の資料です。
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
7/19に行った無料F#セミナーの資料です。関数プログラミングにご興味があればこちらのセミナーをどうぞ。http://www.mamezou.com/training/f_pro.html
HPC Phys-20201203
HPC Phys-20201203
MITSUNARI Shigeo
第9回 HPC-Phys勉強会資料 https://hpc-phys.kek.jp/workshop/workshop201203.html
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ryos36
高位合成友の会での発表。高位合成とはなんでしょう?にはじまって、Python での高位合成の話と、その応用について。
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
2018/10/18 KMC例会講座 型無しラムダ計算のインタプリタを実装してみる
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
2021/11/20 Kernel/VM探検隊online part4 https://kernelvm.connpass.com/event/225573/
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
信之 岩永
https://www.microsoft.com/ja-jp/events/decode/2018/ de:code 2018 セッションID: AD19 日本の第一人者が語る! C# の現状と今後への展望 「.NET Core 2.x 時代の C#」
Slide
Slide
Takefumi MIYOSHI
OpenCL +alpha. (1) OpenCL + I/O (2) trying kinds of high-level languages for OpenCL
Semelhante a x64 のスカラー,SIMD 演算性能を測ってみた @ C++ MIX #10
(20)
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
ネイティブコードを語る
ネイティブコードを語る
Boost Tour 1.50.0 All
Boost Tour 1.50.0 All
Rの高速化
Rの高速化
Gurobi python
Gurobi python
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Wavelet matrix implementation
Wavelet matrix implementation
R高速化
R高速化
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
PostgreSQL SQLチューニング入門 実践編(pgcon14j)
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
HPC Phys-20201203
HPC Phys-20201203
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
Slide
Slide
Último
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
https://lu.ma/wgpk8fdp
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
今年2月に1.1→2.0に更新されたNIST CSFの変更内容について整理したいと思います。
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
https://lu.ma/wgpk8fdp
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
ソフトウェア・サプライ・チェーン攻撃は、ソフトウェア開発のプロセス自体が侵害され、その結果、重大なセキュリティインシデントが生じてしまいます。 クラウドネイティブは顧客に迅速な価値を提供できる反面、開発プロセスは複雑で、どのようにセキュリティ対策をすべきかが課題になっています。 本セッションでは改めて上記の課題について整理し、弊社のアプリケーション・セキュリティ・テスト・プラットフォームであるPolarisを用いた解決策を紹介します。
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
Tree Decades of Agileというブログ記事が面白そうなので、これを読んでみたいと思います。 http://www.managecomplexity.dk/blog/2024/03/12/three-decades-of-agile/
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
「ASUENE」は、複雑だったCO2排出量算出業務をカンタンにサポートする、CO2排出量見える化・削減・報告クラウドサービスです。温室効果ガス・CO2排出量の算出・可視化、削減・カーボンオフセット、Scope1-3* のサプライチェーン排出量の報告・情報開示を支援します。
Último
(6)
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
x64 のスカラー,SIMD 演算性能を測ってみた @ C++ MIX #10
1.
x64 のスカラー,SIMD 演算性能を 測ってみた C++
MIX #10 2024/4/19 @suzumushi0 鈴木 宗良
2.
背 景 DAW
(Digital Audio Workstation: 楽曲作成ソフト) 向けのエフェクタープラグインを開発 • 立体音響用プラグイン等のバイナリ,ソースを無償で公開 • DAW はディジタル信号処理の実験プラットフォームとして最適 プラグイン信号処理部の実体はリアルタイムの数値計算 • 処理時間に上限 • CPU 負荷は最大 1%−数% 程度 構想段階で,実現可能性をどう判断する? • 作ってみなければ判らない,出たとこ勝負ではリスクが高い • 経験値から感覚論で判断? • 感覚論であっても CPU の演算性能に関する基本的なデータが必要 2
3.
評価の目的と適用性 評価の目的 • Visual
C++ による x64 スカラー,ベクトル数値演算命令のスループットを評価 • 演算命令の直接記述やアセンブリ言語は使用しない 評価の適用性 • スループットはループ処理による繰り返し演算やベクトル演算の性能指標 • 単発の演算ではレイテンシが重要な性能指標となるが,今回は評価しない • スループット性能は,繰り返し回数やベクトルの次数による影響を強く受ける • コンパイラによって変換された機械語ルーチンの構造はこれらに依存 • Visual C++ の Vup,他のコンパイラ,他の CPU,GPU では全く異なる結果となる可能性は十分にある 3
4.
x64 数値演算の拡張命令 拡張命令 機能概要
VC++ オプション SSE2 128 bit 長 16 本の XMM レジスタ による浮動小数点のスカラー,ベクトル演算 (SIMD),整数のベクトル演算 32 bit 単精度浮動小数点の四則,平方根,逆数,平方根の逆数演算命令 64 bit 倍精度浮動小数点の四則,平方根演算命令 8, 16, 32, 64 bit 整数の加算,減算命令,16, 32 bit 整数の乗算命令 default AVX2 256 bit 長 16 本の YMM レジスタによる浮動小数点のスカラー,ベクトル演算 (SIMD),整数のベクトル演算 32 bit 単精度浮動小数点の四則,平方根,逆数,平方根の逆数,積和演算命令 64 bit 倍精度浮動小数点の四則,平方根,積和演算命令 8, 16, 32, 64 bit 整数の加算,減算命令,16, 32 bit 整数の乗算命令 /arch:AVX2 AVX-512 512 bit 長 32 本 の ZMM レジスタ による浮動小数点のスカラー,ベクトル演算 (SIMD),整数のベクトル演算 32 bit 単精度浮動小数点の四則,平方根,逆数,平方根の逆数,積和演算命令 64 bit 倍精度浮動小数点の四則,平方根,積和演算命令 8, 16, 32, 64 bit 整数の加算,減算命令,16, 32, 64 bit 整数の乗算命令 /arch:AVX512 AMX 512 bit 長ベクトル演算レジスタによる 8 bit 整数,16 bit 半精度浮動小数点行列の積演算 行列の最大サイズは 1K Byte,整数で 16 行 64 列,浮動小数点で 16 行 32 列 演算結果は 32 bit 整数か 32 bit 単精度浮動小数点行列 未サポート 4 Note: Visual C++ オプションは最低要件を示す (機能制限では無い).デフォルトの SSE2 では,SSE4.1 や AVX-512 の命令 (pmulld, vpmullq) と, スカラー演算命令の双方に変換され,実行時に cpuid に基づいて選択される.
5.
Visual C++ におけるベクトル演算
Visual C++ コンパイラの自動ベクトル化機能 • ループ処理における最適化機能の一つ • x64 ベクトル演算命令へ変換される場合がある C++ 標準ライブラリの valarray • 明示的にベクトル演算を記述 • x64 ベクトル演算命令へ変換される場合がある Visual C++ 独自機能の組み込み (intrinsics) 関数 • x64 ベクトル演算命令を直接記述 • 今回は対象としない 5
6.
ループ処理の最適化 演算性能はコンパイラによる最適化に強く依存 Visual
C++ の最適化 /O2 は以下を含む ループ展開 (Loop unrolling) • for 文,while 文による演算のループを,スカラー演算命令を羅列したループに変換 • Visual C++ でループ展開される条件は不明 自動ベクトル化 (Automatic vectorization) • for 文,while 文による演算のループを,ベクトル演算命令を羅列したループに変換 • Visual C++ で自動ベクトル化される条件は不明確 • 自動ベクトル化レポート出力オプション [構成プロパティ]>[C/C++]>[コマンドライン]>[追加のオプション] に /Qvec-report:2 を追加 • 自動ベクトル化の抑止 ループ記述の前に #pragma loop (no_vector) を挿入 6
7.
ループ展開の例 5 回ループ展開された加算命令の例
2, 4, 5, 10 回のループ展開を確認 7 $LL43@main: ; 108 : for (int j = 0; j < len; j++) ; 109 : *c32_p++ = *a32_p++ + *b32_p++; mov eax, DWORD PTR [r10] lea r10, QWORD PTR [rcx+20] r10 update add eax, DWORD PTR [r9] スカラー加算 lea r9, QWORD PTR [rdx+20] r9 update mov DWORD PTR [r11], eax lea r11, QWORD PTR [r8+20] r11 update mov eax, DWORD PTR [rcx+4] add eax, DWORD PTR [rdx+4] スカラー加算 mov DWORD PTR [r8+4], eax mov eax, DWORD PTR [rdx+8] add eax, DWORD PTR [rcx+8] スカラー加算 mov DWORD PTR [r8+8], eax mov eax, DWORD PTR [rcx+12] add eax, DWORD PTR [rdx+12] スカラー加算 mov DWORD PTR [r8+12], eax mov eax, DWORD PTR [rdx+16] mov rdx, r9 rdx update add eax, DWORD PTR [rcx+16] スカラー加算 mov rcx, r10 rcx update mov DWORD PTR [r8+16], eax mov r8, r11 r8 update sub rbx, 1 loop カウンタ更新 jne SHORT $LL43@main
8.
エラーメッセージから推定した 自動ベクトル化の条件 対象は for 文,
while 文によるループ (do 文は対象外) for (int i; i < 1000; i++) ループ変数はローカル変数のみ; ループ終了条件はループ開始時から不変; ループ変数更新は +1 のみ { NG: 依存関係のあるループ計算 NG: if, switch, break, continue 文等の条件分岐 OK: 浮動小数点の四則演算,sqrt (),整数の加減乗算,math 関数 (演算速度は不変),inline 関数 NG: その他の関数 NG: bit 長が異なる変数への代入 NG: 32, 64bit 以外の構造体メンバへの参照 NG: 連続しない配列要素の参照 NG: 可変回数のシフト演算 } 等々謎 8
9.
評価方法 評価環境 • Core
i7 8565U 1.8GHz (8th Gen.) • Visual C++ v143 評価対象 • int16 (short), int32 (int), int64 (long long), float, double の四則,平方根演算 • ループ展開無し,有りにおけるスカラー演算 • 自動ベクトル化,valarray によるベクトル演算 (SSE2, AVX2) 評価指標 • 各演算を 1,000M 回繰り返し,経過時間を計測 • 1 回あたりの平均演算時間を CPU クロック数に換算し,スループットとする 9
10.
スカラー演算のスループット 10 add sub mul
div add sub mul div ループ展開なし ループ展開 int16 1.15 1.16 1.28 4.25 0.48 0.47 0.58 3.22 int32 1.18 1.18 1.18 4.21 0.47 0.46 0.47 3.00 int64 1.18 1.17 1.18 12.19 0.48 0.69 0.48 10.99 float 1.15 1.15 1.15 1.23 0.53 0.51 0.53 1.23 double 1.19 1.16 1.17 1.70 0.51 0.52 0.51 1.69 0.00 0.50 1.00 1.50 2.00 2.50 3.00 3.50 4.00 4.50 5.00 int16 int32 int64 float double 12.19 10.99 Throughput [clocks]
11.
整数ベクトル演算のスループット 11 add sub mul
add sub mul add sub mul add sub mul add sub mul [参考] ループ展開 自動ベクトル化 SSE2 自動ベクトル化 AVX2 valarray SSE2 valarray AVX2 int16 0.48 0.47 0.58 0.08 0.07 0.10 0.07 0.06 0.07 0.28 0.21 0.20 0.20 0.19 0.19 int32 0.47 0.46 0.47 0.15 0.14 0.19 0.10 0.09 0.09 0.35 0.35 0.35 0.30 0.29 0.30 int64 0.48 0.69 0.48 0.29 0.27 0.28 0.24 1.03 1.00 1.58 1.59 0.00 0.10 0.20 0.30 0.40 0.50 0.60 0.70 0.80 int16 int32 int64 Throughput [clocks] 1.03 1.00 1.58 1.59 valarray の int64 のスループットは非実用的
12.
浮動小数点ベクトル演算の スループット 12 add sub mul
div sqrt add sub mul div sqrt add sub mul div sqrt add sub mul div sqrt add sub mul div sqrt [参考] ループ展開 自動ベクトル化 SSE2 自動ベクトル化 AVX2 valarray SSE2 valarray AVX2 float 0.53 0.51 0.53 1.23 1.23 0.18 0.18 0.18 0.31 0.31 0.18 0.18 0.17 0.27 0.31 0.37 0.34 0.35 0.48 0.49 0.32 0.28 0.28 0.45 0.51 double 0.51 0.52 0.51 1.69 2.52 0.28 0.27 0.28 0.81 1.22 0.20 0.20 0.19 0.82 1.23 1.73 1.74 1.71 2.20 2.63 0.86 0.87 0.87 1.47 1.90 0.00 0.50 1.00 1.50 2.00 2.50 3.00 float double Throughput [clocks] valarray の double のスループットは非実用的
13.
[参考] 初等関数のスループット 13 exp (x)
log (x) sin (x) cos (x) tan (x) asin (x) acos (x) atan (x) pow (x, y) pow (x, 2.0) float 6.91 7.87 11.79 12.26 12.55 13.05 17.41 9.85 62.12 24.12 double 8.53 9.74 12.83 12.87 17.69 17.68 18.14 15.34 76.21 50.29 0.00 10.00 20.00 30.00 40.00 50.00 60.00 70.00 80.00 float double Throughput [clocks]
14.
結 果 スカラー演算のスループット
加減乗算のスループットは語長に係わらず整数,浮動小数点で有意差は無い 除算のスループットは,浮動小数点の方が高い ループ展開と比較した,整数ベクトル演算のスループット (自動ベクトル化) SSE2 の int32 は,加減算で約 3 倍,乗算で約 2 倍に性能向上 AVX2 の int32 は 4 −5 倍に性能向上 ループ展開と比較した,浮動小数点ベクトル演算のスループット (自動ベクトル化) SSE2 の float は,加減乗算で約 3 倍,除算平方根で約 4 倍に性能向上 SSE2 の double は約 2 倍の性能向上 AVX2 の double は,加減乗算で約 3 倍の性能向上 (float と同等) その他 valarray は int64, double の演算性能に問題あり,また自動ベクトル化より性能が低い int16 のスカラー乗算,除算は 32bit 命令に変換されている コンパイラは float の 逆数,平方根の逆数演算命令,AVX2 の積和演算命令への変換はしない 14
15.
おわりに スループットをどう使う? • 例えば,サンプリングレートが
48KHz のデータを,クロック速度が 1.8GHz の CPU でリアルタイム処理 • CPU 負荷を 1% 以下とすると 1 サンプル処理のクロック数の上限は 1.8GHz / 48KHz / 100 = 375 clocks • 次数 67 の FIR フィルタは積和演算が 67 回となるから 67 clocks 程度必要か • 5 フィルタは行けるな,という感覚論 x64 ベクトル演算は,使える局面を選ぶが,性能向上に確実に寄与する • Visual C++ はループ展開や自動ベクトル化の条件をドキュメント化して欲しい valarray はベクトル演算を簡潔に記述できる利点がある • Visual C++ は valarray の性能を,自動ベクトル化と比較して遜色ないレベルにして欲しい 今回のスループット評価のソースコード 15
16.
参考資料 Intel CPU
技術資料 Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4. Intel® 64 and IA-32 Architectures Optimization Reference Manual Volume 1. x86, x84 CPU 命令セット一覧 x86, x64 CPU 命令のレイテンシ,スループット一覧 CPU の拡張機能サポート状況表示ツール Coreinfo 16
Baixar agora