SlideShare a Scribd company logo
Intel AVX2を使用したailia SDKの最適化事例
2022.02.25  DeepLearningLab クラウドxエッジAI Day
Hitoshi Shinabe / ax Inc.
本講演について
ailia SDKを事例としてAIの推論における高速化の方法を解説
• SIMDの基礎
• x86 SIMD命令の歴史
• intrinsicsを使ったSIMDプログラミング
• AVX2 対応 CPU 向け高速化テクニック
ailia SDKについて
ailia SDKはCPUやGPUを最大限活用した高速推論が行える SDK
ONNXに対応しており、Intel CPUのAVXを使用した推論が可能
ailia MODELSにて200種類を超える学習済みモデルを提供
無償評価版:https://ailia.jp/trial
https://youtu.be/4ZNBZDFhEVI
対象とする計算グラフ
AIモデルは計算グラフとして表現される
グラフの各ノードがConvolutionなどのオペレータに対応する
膨大な量の数値計算を行う
ResNet50
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
ailia SDK の SIMD 高速化
※共に FP32 モデル / ※ CPU i7-11700 で測定
AVX2を使用することで6~約7倍の高速化を実現
3.7倍
6.2倍
4倍
6.9倍
SIMD の基礎
一命令で複数のデータを処理可能 ( MMX 16bit 加算命令 PADDW の例 )
0x0104
0x0203
0x0302
0x0401
0x0100
0x0200
0x0300
0x0400
0x0004
0x0003
0x0002
0x0001
= +
出力レジスタ (実行後) 出力レジスタ (実行前) 入力レジスタ
SIMD の利点
1. 少ないクロックでより多くのデータを処理可能
・AVX2 命令を使うと 32bit 整数加算を 1 clock で 24 個処理可能
2. 入力データに依存した分岐を潰せる(後述)
・実行時の分岐予測ミスを減らせる
3. プログラムから扱えるレジスタが増える
・x86 CPU は汎用レジスタが 16 個と少ない
・SIMD レジスタを活用すると中間データを置けるレジスタが倍に増える
拡張命令 レジスタ幅 特徴
MMX 64 bit 整数命令のみ
SSE 128 bit 単精度浮動小数命令メイン
SSE2 〃 倍精度浮動小数命令と整数命令を追加
SSSE3 ~ SSE4.2 〃 命令の追加・拡張
AVX 256 bit 浮動小数命令のみ
AVX2 〃 整数命令を追加 / 同じタイミングで FMA 命令も追加
AVX512 512 bit 第12世代インテル Core CPU の Efficiency コアが非対応
x86 SIMD 命令の歴史
拡張命令 レジスタ幅 特徴
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 なら利用可能
SIMD 命令を利用する方法
● intrinsic を使って C/C++ コードから直接利用
特別なコンパイラは不要
Visual C/C++ Compiler や GCC, LLVM で利用可能
VC2019 以降の場合、通常は intrinsic で十分な性能が出る
● アセンブリで関数を作ってリンク
intrinsic でコンパイラが生成する命令列が遅い場合の最終手段
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
同等コードの 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];
}
}
}
同等コードの 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 は苦手
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
条件分岐無し
intrinsics 命令の利点
● レジスタ管理をコンパイラに任せることができる
変数のレジスタ割付や、レジスタが不足する場合のスタック退避をコンパイラ
が処理してくれる
● インライン展開可能
小さな関数の場合、関数呼び出しのオーバーヘッドを削れる
● アセンブリより読みやすい
意味に即した変数名をソースコード内で自由に付けることが可能
Intel Intrinsics Guide
AVX2 対応 CPU 向け高速化テクニック
• FMA 命令の利用
• MASKMOV 命令を使った端数処理
• 近似式を用いた高級関数の SIMD 実装
FMA 命令の利用
● FMA = Fused Multiply Add
● D = A * B + C を 1 命令で処理
● AVX2 と同じ Haswell 以降で利用可能
● 行列積や Neural Network の Convolution で大量に出現
● FMA を使わないと(使わない場合に比べて) 20~10% 性能低下
MASKMOV 命令を使った端数処理
● SIMD レジスタ幅で割り切れない入力の場合に、端数部分で活用
● AVX 命令から追加
● MASKMOV の無い CPU の場合
SIMD レジスタの load/store に中間バッファが必要
● MASKMOV がある CPU の場合
MASKMOVで直接 SIMD レジスタに load/store 可能
MASKMOV 命令が有効な場合
データ全体
SIMD レジスタ
MASKMOV 命令が有効な場合
データ全体
SIMD レジスタ
読み書きOK
MASKMOV 命令が有効な場合
データ全体
SIMD レジスタ
読み書きOK
MASKMOV 命令が有効な場合
データ全体
SIMD レジスタ
対処せずに読み書きすると、不正アクセス例外
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);
}
}
近似式を使った高級関数の 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() も同様の近似式実装が可能。
まとめ
AIは計算グラフによる膨大な数値計算を行う
IntelのAVX2を使用することで各種のAIモデルを高速推論可能
ailia SDKはIntelのCPUに最適化しており、産業用PCでもAIを利用可能です
その他、演算高速化・チューニングなどの課題もお気軽にご相談下さい
ご清聴有り難うございました
ax Inc.
https://axinc.jp/
contact@axinc.jp
リンク
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

More Related Content

What's hot

PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
 
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話LINE Corporation
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
whywaita
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
MITSUNARI Shigeo
 
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
ryuz88
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorialkocha2012
 
ISS2018 seminar
ISS2018 seminarISS2018 seminar
ISS2018 seminar
Yoshihisa Ijiri
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)
Takanori Ogata
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
なおき きしだ
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動Takashi Takizawa
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
ManaMurakami1
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
narusugimoto
 
遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)
遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)
遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)
Kuniyasu Suzaki
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
直久 住川
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
 

What's hot (20)

PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
Akka ActorとAMQPでLINEのメッセージングパイプラインをリプレースした話
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29Verilator勉強会 2021/05/29
Verilator勉強会 2021/05/29
 
SystemC Tutorial
SystemC TutorialSystemC Tutorial
SystemC Tutorial
 
ISS2018 seminar
ISS2018 seminarISS2018 seminar
ISS2018 seminar
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
 
initとプロセス再起動
initとプロセス再起動initとプロセス再起動
initとプロセス再起動
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
Zynq + Vivado HLS入門
Zynq + Vivado HLS入門Zynq + Vivado HLS入門
Zynq + Vivado HLS入門
 
遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)
遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)
遠隔デバイスとの信頼を築くための技術とその標準(TEEP RATS)
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
 
第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料第9回ACRiウェビナー_セック/岩渕様ご講演資料
第9回ACRiウェビナー_セック/岩渕様ご講演資料
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 

Similar to Intel AVX2を使用したailia sdkの最適化

C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml 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_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
 
SCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだSCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだ
wind06106
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
Masahiro Masuda
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
Elmでjavascript
ElmでjavascriptElmでjavascript
Elmでjavascript
karky7
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版
Daiyu Hatakeyama
 
Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013
Kiyoshi Ogawa
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
 
俺ASICと俺CPU“松竹V(しょうちくぶい)”
俺ASICと俺CPU“松竹V(しょうちくぶい)”俺ASICと俺CPU“松竹V(しょうちくぶい)”
俺ASICと俺CPU“松竹V(しょうちくぶい)”
たけおか しょうぞう
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
Fixstars Corporation
 
NetBSD on Google Compute Engine
NetBSD on Google Compute EngineNetBSD on Google Compute Engine
NetBSD on Google Compute Engine
Ryo ONODERA
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ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...“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)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ryos36
 
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE Project
 

Similar to 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 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_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
llvm入門
llvm入門llvm入門
llvm入門
 
SCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだSCUGJ第18回勉強会:よろしい、ならばVMMだ
SCUGJ第18回勉強会:よろしい、ならばVMMだ
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
Elmでjavascript
ElmでjavascriptElmでjavascript
Elmでjavascript
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版
 
Uart受信設計2013
Uart受信設計2013Uart受信設計2013
Uart受信設計2013
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
俺ASICと俺CPU“松竹V(しょうちくぶい)”
俺ASICと俺CPU“松竹V(しょうちくぶい)”俺ASICと俺CPU“松竹V(しょうちくぶい)”
俺ASICと俺CPU“松竹V(しょうちくぶい)”
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
NetBSD on Google Compute Engine
NetBSD on Google Compute EngineNetBSD on Google Compute Engine
NetBSD on Google Compute Engine
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ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...“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)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
 
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
 

Intel AVX2を使用したailia sdkの最適化