Enviar pesquisa
Carregar
Intel AVX2を使用したailia sdkの最適化
•
0 gostou
•
535 visualizações
H
HitoshiSHINABE1
Seguir
2022年2月25日DeepLearningLab クラウドxエッジAI Dayの資料です
Leia menos
Leia mais
Engenharia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 29
Baixar agora
Baixar para ler offline
Recomendados
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
Azure仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワーク
Kuninobu SaSaki
【Unite Tokyo 2019】AWS for Unity Developers
【Unite Tokyo 2019】AWS for Unity Developers
UnityTechnologiesJapan002
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
Fixstars Corporation
Active Directory 侵害と推奨対策
Active Directory 侵害と推奨対策
Yurika Kakiuchi
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
Guide To AGPL
Guide To AGPL
Mikiya Okuno
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
Naoyuki Yamada
Recomendados
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
Azure仮想マシンと仮想ネットワーク
Azure仮想マシンと仮想ネットワーク
Kuninobu SaSaki
【Unite Tokyo 2019】AWS for Unity Developers
【Unite Tokyo 2019】AWS for Unity Developers
UnityTechnologiesJapan002
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
Fixstars Corporation
Active Directory 侵害と推奨対策
Active Directory 侵害と推奨対策
Yurika Kakiuchi
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
Guide To AGPL
Guide To AGPL
Mikiya Okuno
KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
Naoyuki Yamada
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
Kentaro Ebisawa
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Takeshi Fukuhara
Androidの新ビルドシステム
Androidの新ビルドシステム
l_b__
GPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIA
NVIDIA Japan
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
日本マイクロソフト株式会社
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
Unity Technologies Japan K.K.
ネットワークエンジニア的Ansibleの始め方
ネットワークエンジニア的Ansibleの始め方
akira6592
IoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL Edge
IoTビジネス共創ラボ
NUCで始めるVMware Tanzu
NUCで始めるVMware Tanzu
Hirotaka Sato
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Mesh Bakerのご紹介 どんなアセット?
Mesh Bakerのご紹介 どんなアセット?
onotchi_
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
Tetsutaro Watanabe
Azure Digital Twins 最新事例紹介 ( IoTビジネス共創ラボ 第16回勉強会 )
Azure Digital Twins 最新事例紹介 ( IoTビジネス共創ラボ 第16回勉強会 )
Takeshi Fukuhara
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット
Takashi Toyosaki
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
Google Cloud Platform - Japan
(今ちゃんと振り返る) ゴール指向要求分析 入門
(今ちゃんと振り返る) ゴール指向要求分析 入門
Fuyuki Ishikawa
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
Minoru Naito
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
Mais conteúdo relacionado
Mais procurados
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
Kentaro Ebisawa
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Takeshi Fukuhara
Androidの新ビルドシステム
Androidの新ビルドシステム
l_b__
GPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIA
NVIDIA Japan
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
日本マイクロソフト株式会社
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
Unity Technologies Japan K.K.
ネットワークエンジニア的Ansibleの始め方
ネットワークエンジニア的Ansibleの始め方
akira6592
IoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL Edge
IoTビジネス共創ラボ
NUCで始めるVMware Tanzu
NUCで始めるVMware Tanzu
Hirotaka Sato
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Mesh Bakerのご紹介 どんなアセット?
Mesh Bakerのご紹介 どんなアセット?
onotchi_
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
増田 亨
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
Tetsutaro Watanabe
Azure Digital Twins 最新事例紹介 ( IoTビジネス共創ラボ 第16回勉強会 )
Azure Digital Twins 最新事例紹介 ( IoTビジネス共創ラボ 第16回勉強会 )
Takeshi Fukuhara
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット
Takashi Toyosaki
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
Google Cloud Platform - Japan
(今ちゃんと振り返る) ゴール指向要求分析 入門
(今ちゃんと振り返る) ゴール指向要求分析 入門
Fuyuki Ishikawa
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
Minoru Naito
Mais procurados
(20)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Part 1: IoT 基盤 (製造リファレンス・アーキテクチャ勉強会)
Androidの新ビルドシステム
Androidの新ビルドシステム
GPU と PYTHON と、それから最近の NVIDIA
GPU と PYTHON と、それから最近の NVIDIA
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
【BS10】Microsoft と GitHub の開発エコシステムで、開発にドライブをかけよう!
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
ネットワークエンジニア的Ansibleの始め方
ネットワークエンジニア的Ansibleの始め方
IoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL Edge
NUCで始めるVMware Tanzu
NUCで始めるVMware Tanzu
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
Mesh Bakerのご紹介 どんなアセット?
Mesh Bakerのご紹介 どんなアセット?
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
JapanTaxiにおけるML Ops 〜機械学習の開発運用プロセス〜
Azure Digital Twins 最新事例紹介 ( IoTビジネス共創ラボ 第16回勉強会 )
Azure Digital Twins 最新事例紹介 ( IoTビジネス共創ラボ 第16回勉強会 )
負荷分散だけじゃないELBのメリット
負荷分散だけじゃないELBのメリット
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
[Cloud OnAir] Cloud Data Fusion で GCP にデータを集約して素早く分析を開始しよう 2019年10月31日 放送
(今ちゃんと振り返る) ゴール指向要求分析 入門
(今ちゃんと振り返る) ゴール指向要求分析 入門
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
一歩先行く Azure Computing シリーズ(全3回) 第2回 Azure VM どれを選ぶの? Azure VM 集中講座
Semelhante a Intel AVX2を使用したailia sdkの最適化
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
llvm入門
llvm入門
MITSUNARI Shigeo
SCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだ
wind06106
TVM の紹介
TVM の紹介
Masahiro Masuda
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
android sola
Elmでjavascript
Elmでjavascript
karky7
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版
Daiyu Hatakeyama
Uart受信設計2013
Uart受信設計2013
Kiyoshi Ogawa
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
俺ASICと俺CPU“松竹V(しょうちくぶい)”
俺ASICと俺CPU“松竹V(しょうちくぶい)”
たけおか しょうぞう
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
Ryo ONODERA
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
Yasuhiro Ishii
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
Mr. Vengineer
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Masahiro Sakai
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ryos36
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE Project
Semelhante a Intel AVX2を使用したailia sdkの最適化
(20)
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
llvm入門
llvm入門
SCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだ
TVM の紹介
TVM の紹介
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
Elmでjavascript
Elmでjavascript
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版
Uart受信設計2013
Uart受信設計2013
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
俺ASICと俺CPU“松竹V(しょうちくぶい)”
俺ASICと俺CPU“松竹V(しょうちくぶい)”
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
NetBSD on Google Compute Engine
NetBSD on Google Compute Engine
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
Intel AVX2を使用したailia sdkの最適化
1.
Intel AVX2を使用したailia SDKの最適化事例 2022.02.25
DeepLearningLab クラウドxエッジAI Day Hitoshi Shinabe / ax Inc.
2.
本講演について ailia SDKを事例としてAIの推論における高速化の方法を解説 • SIMDの基礎 •
x86 SIMD命令の歴史 • intrinsicsを使ったSIMDプログラミング • AVX2 対応 CPU 向け高速化テクニック
3.
ailia SDKについて ailia SDKはCPUやGPUを最大限活用した高速推論が行える
SDK ONNXに対応しており、Intel CPUのAVXを使用した推論が可能 ailia MODELSにて200種類を超える学習済みモデルを提供 無償評価版:https://ailia.jp/trial https://youtu.be/4ZNBZDFhEVI
4.
対象とする計算グラフ AIモデルは計算グラフとして表現される グラフの各ノードがConvolutionなどのオペレータに対応する 膨大な量の数値計算を行う ResNet50
5.
ailia SDKの構成 Vulkan, Metal
NEON AVX Accelerator (Convolution, Pooling, Resize, Add, and more.) Runtime Graph Optimization API (C++, Python, C#, JNI) ONNX (opset=10, 11) (supporting over 150 layers) ailia SDK ailia MODELS
6.
ailia SDK の
SIMD 高速化 ※共に FP32 モデル / ※ CPU i7-11700 で測定 AVX2を使用することで6~約7倍の高速化を実現 3.7倍 6.2倍 4倍 6.9倍
7.
SIMD の基礎 一命令で複数のデータを処理可能 (
MMX 16bit 加算命令 PADDW の例 ) 0x0104 0x0203 0x0302 0x0401 0x0100 0x0200 0x0300 0x0400 0x0004 0x0003 0x0002 0x0001 = + 出力レジスタ (実行後) 出力レジスタ (実行前) 入力レジスタ
8.
SIMD の利点 1. 少ないクロックでより多くのデータを処理可能 ・AVX2
命令を使うと 32bit 整数加算を 1 clock で 24 個処理可能 2. 入力データに依存した分岐を潰せる(後述) ・実行時の分岐予測ミスを減らせる 3. プログラムから扱えるレジスタが増える ・x86 CPU は汎用レジスタが 16 個と少ない ・SIMD レジスタを活用すると中間データを置けるレジスタが倍に増える
9.
拡張命令 レジスタ幅 特徴 MMX
64 bit 整数命令のみ SSE 128 bit 単精度浮動小数命令メイン SSE2 〃 倍精度浮動小数命令と整数命令を追加 SSSE3 ~ SSE4.2 〃 命令の追加・拡張 AVX 256 bit 浮動小数命令のみ AVX2 〃 整数命令を追加 / 同じタイミングで FMA 命令も追加 AVX512 512 bit 第12世代インテル Core CPU の Efficiency コアが非対応 x86 SIMD 命令の歴史
10.
拡張命令 レジスタ幅 特徴 MMX
64 bit 整数命令のみ SSE 128 bit 単精度浮動小数命令メイン SSE2 〃 倍精度浮動小数命令と整数命令を追加 SSSE3 ~ SSE4.2 〃 命令の追加・拡張 AVX 256 bit 浮動小数命令のみ AVX2 〃 整数命令を追加 / 同じタイミングで FMA 命令も追加 AVX512 512 bit 第12世代インテル Core CPU の Efficiency コアが非対応 (第12世代でも使えないものがある) x86 SIMD 命令の歴史 64bit CPU なら利用可能 Haswell (2013年発売) 以降の Core CPU なら利用可能
11.
SIMD 命令を利用する方法 ● intrinsic
を使って C/C++ コードから直接利用 特別なコンパイラは不要 Visual C/C++ Compiler や GCC, LLVM で利用可能 VC2019 以降の場合、通常は intrinsic で十分な性能が出る ● アセンブリで関数を作ってリンク intrinsic でコンパイラが生成する命令列が遅い場合の最終手段
12.
Intrinsic コードサンプル xorps xmm0,
xmm0 movups xmm1 [esi] cmpps xmm0, xmm1, 0x1 andps xmm0, xmm1 movups [edi], xmm0 // 0 で埋めたレジスタを作る __m128 zero = _mm_setzero_ps(); // 入力をレジスタに読み込む __m128 val = _mm_loadu_ps(src); // 0 が入力よりも小さければ bit を立てる __m128 mask = _mm_cmplt_ps(zero, val); // mask と入力でビット演算で and を取る val = _mm_and_ps(val, mask); // 結果を dst に書き出す _mm_storeu_ps(dst, val); アセンブリ Intrinsics
13.
同等コードの pure C/C++
バージョン void relu_4element(float *dst, const float *src) { for (int i=0; i<4; ++i) { // 入力が負なら 0 に潰し、正ならば素通し if (src[i] < 0.0f) { dst[i] = 0.0f; } else { dst[i] = src[i]; } } }
14.
同等コードの pure C/C++
バージョン void relu_4element(float *dst, const float *src) { for (int i=0; i<4; ++i) { // 入力が負なら 0 に潰し、正ならば素通し if (src[i] < 0.0f) { dst[i] = 0.0f; } else { dst[i] = src[i]; } } } 入力データに依存したランダムな分岐処理 CPU は苦手
15.
Intrinsics コードサンプル xorps xmm0,
xmm0 movups xmm1 [esi] cmpps xmm0, xmm1, 0x1 andps xmm0, xmm1 movups [edi], xmm0 // 0 で埋めたレジスタを作る __m128 zero = _mm_setzero_ps(); // 入力をレジスタに読み込む __m128 val = _mm_loadu_ps(src); // 0 が入力よりも小さければ bit を立てる __m128 mask = _mm_cmplt_ps(zero, val); // mask と入力でビット演算で and を取る val = _mm_and_ps(val, mask); // 結果を dst に書き出す _mm_storeu_ps(dst, val); アセンブリ Intrinsics 条件分岐無し
16.
intrinsics 命令の利点 ● レジスタ管理をコンパイラに任せることができる 変数のレジスタ割付や、レジスタが不足する場合のスタック退避をコンパイラ が処理してくれる ●
インライン展開可能 小さな関数の場合、関数呼び出しのオーバーヘッドを削れる ● アセンブリより読みやすい 意味に即した変数名をソースコード内で自由に付けることが可能
17.
Intel Intrinsics Guide
18.
AVX2 対応 CPU
向け高速化テクニック • FMA 命令の利用 • MASKMOV 命令を使った端数処理 • 近似式を用いた高級関数の SIMD 実装
19.
FMA 命令の利用 ● FMA
= Fused Multiply Add ● D = A * B + C を 1 命令で処理 ● AVX2 と同じ Haswell 以降で利用可能 ● 行列積や Neural Network の Convolution で大量に出現 ● FMA を使わないと(使わない場合に比べて) 20~10% 性能低下
20.
MASKMOV 命令を使った端数処理 ● SIMD
レジスタ幅で割り切れない入力の場合に、端数部分で活用 ● AVX 命令から追加 ● MASKMOV の無い CPU の場合 SIMD レジスタの load/store に中間バッファが必要 ● MASKMOV がある CPU の場合 MASKMOVで直接 SIMD レジスタに load/store 可能
21.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ
22.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ 読み書きOK
23.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ 読み書きOK
24.
MASKMOV 命令が有効な場合 データ全体 SIMD レジスタ 対処せずに読み書きすると、不正アクセス例外
25.
MASKMOV サンプル inline __m256i
select_mask(int count) { assert((0 <= count) || (count <= 8)); auto m0 = _mm256_set_epi32(7, 6, 5, 4, 3, 2, 1, 0); auto ulim = _mm256_broadcastd_epi32( _mm_cvtsi32_si128(count) ); return _mm256_cmpgt_epi32(ulim, m0); } void func( float *buf, int size ) { int size8 = (size / 8) * 8; for (int i=0; i<size8; i+=8) { // 本体部分 auto val = _mm256_loadu_ps( buf+i ); // val に対する何らかの SIMD 処理をここに記述 _mm256_storeu_ps( buf+i, val ); } if (size8 < size ) { // 端数処理 auto mask = select_mask(size - size8); auto val = _mm256_maskload_ps(buf+size8, mask); // val に対する何らかの SIMD 処理をここに記述 _mm256_maskstore_ps(buf+size8, mask, val); } }
26.
近似式を使った高級関数の SIMD 実装 //
log(x) = log((2^n) * z) = n*log(2) + log(z) // log(z) ≒ 2 * (w + (w^3)/3 + (w^5)/5 + ..) : w = (z-1)/(z+1) log2 = 0.6931471805599453f; n = pick_exponent(x); // IEEE754 の指数部を取り出す z = pick_fractional(x); // IEEE754 の指数部を 0 にする w = (z-1.0f) / (z+1.0f); ww = w*w; r = (1.0f/7.0f) + (1.0f/9.0f)*ww; r = (1.0f/5.0f) + r*ww; r = (1.0f/3.0f) + r*ww; r = (1.0f + r*ww); r = r*w; // w + (w^3)/3 + (w^5)/5 + (w^7)/7 + (w^9)/9 return (n*log2 + r*2); log() の分岐不要な近似式疑似コード。 exp() や erf() も同様の近似式実装が可能。
27.
まとめ AIは計算グラフによる膨大な数値計算を行う IntelのAVX2を使用することで各種のAIモデルを高速推論可能 ailia SDKはIntelのCPUに最適化しており、産業用PCでもAIを利用可能です その他、演算高速化・チューニングなどの課題もお気軽にご相談下さい
28.
ご清聴有り難うございました ax Inc. https://axinc.jp/ contact@axinc.jp
29.
リンク ax Inc. https://axinc.jp/ ax
Inc. BLOG http://medium.com/axinc ailia SDK https://ailia.jp/ ailia MODELS https://github.com/axinc-ai/ailia-models
Baixar agora