なんだかスケートをしているようなタイトルの連載4回目、
Intelの第10世代CPU IceLakeでOpenVINOを試してみます
前回同様、使用するのはDell XPS 13 2in1、搭載されているのは下記のCPUとなります
Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz
このCPUはGPUを内包しており、64EUのIntel Iris Plus グラフィックスが搭載されています
また実行ユニット数は、過去最大であったIntel Iris Pro Graphics 580(i7-6770HQ)の72EUにつぐ多さとなっています
メモリはDDR4-3733 16GBが搭載されています
このPCにUbuntu18.04をインストールし、OpenVINOの実行をしますが、前回に引き続き今回もCPUでの実行に注目してみましょう
比較するのはCometlake(インテル® Core™ i5-10210U プロセッサー)搭載の ノートPCとなります
前回はCometlakeとIcelake のCPUの機能の違いを比べてみましたが、実際にそれらがアプリケーションから呼ばれているかをOpenVINO toolkitにあるbenchmark_appを使用してチェックしてみましょう
ここで、security_barrier_camera_demoを使わずに最初からbenchmark_app使ったら?と言う声が聞こえてきそうですが、私が試す限りbenchmark_appではCPUの周波数が固定されてしまうようです
そのためデータの確認用に使用します
~/inference_engine_cpp_samples_build/intel64/Release/benchmark_app -i ./images -m ~/openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -pc
このアプリケーションのオプションで-pcがありますが、こちらはPerformance countersオプションとなり、アプリケーションから呼び出しているライブラリが出力されます(下記は出力例となります)
[ INFO ] Pefrormance counts for 0-th infer request: Placeholder NOT_RUN layerType: Input realTime: 0 cpu: 0 execType: unknown Placeholder_U8_FP32_Add_/F... EXECUTED layerType: Reorder realTime: 282 cpu: 282 execType: jit_uni_I8 Add_/Fused_Add_ EXECUTED layerType: ScaleShift realTime: 243 cpu: 243 execType: jit_avx2_FP32 MobilenetV2/Conv/BatchNorm... EXECUTED layerType: Convolution realTime: 615 cpu: 615 execType: jit_avx2_FP32 MobilenetV2/Conv/Relu6 NOT_RUN layerType: Clamp realTime: 0 cpu: 0 execType: undef MobilenetV2/expanded_conv/... EXECUTED layerType: Convolution realTime: 560 cpu: 560 execType: jit_avx2_dw_FP32 MobilenetV2/expanded_conv/... NOT_RUN layerType: Clamp realTime: 0 cpu: 0 execType: undef MobilenetV2/expanded_conv/... EXECUTED layerType: Convolution realTime: 592 cpu: 592 execType: jit_avx2_1x1_FP32 MobilenetV2/expanded_conv/add NOT_RUN layerType: Eltwise realTime: 0 cpu: 0 execType: undef MobilenetV2/expanded_conv_... EXECUTED layerType: Convolution realTime: 2613 cpu: 2613 execType: jit_avx2_1x1_FP32 MobilenetV2/expanded_conv_... NOT_RUN layerType: Clamp realTime: 0 cpu: 0 execType: undef MobilenetV2/expanded_conv_... EXECUTED layerType: Convolution realTime: 2192 cpu: 2192 execType: jit_avx2_dw_FP32 MobilenetV2/expanded_conv_... NOT_RUN layerType: Clamp realTime: 0 cpu: 0 execType: undef MobilenetV2/expanded_conv_... EXECUTED layerType: Convolution realTime: 680 cpu: 680 execType: jit_avx2_1x1_FP32 MobilenetV2/expanded_conv_... EXECUTED layerType: Convolution realTime: 889 cpu: 889 execType: jit_avx2_1x1_FP32 ...
CometlakeでモデルをFP16として実行した結果(左の数値は実際に呼び出された関数の数)は、
148 jit_avx2_1x1_FP32
76 jit_avx2_FP32
64 jit_avx2_dw_FP32
Icelakeで実行した結果は、
4 jit_avx2_1x1_FP32
144 jit_avx512_1x1_FP32
76 jit_avx512_FP32
64 jit_avx512_dw_FP32
となっており、avx2が呼び出されていたほとんどの関数をavx512で置き換えています
これらを元にするとAVX512を使用したことが高速化につながった一つの要因だと考えられます
他の要因としては、キャッシュサイズが考えられます
Icelakeの各キャッシュは
L1d キャッシュ: 48K
L1i キャッシュ: 32K
L2 キャッシュ: 512K
L3 キャッシュ: 8192K
となり、CometlakeのL2キャッシュサイズ256K、L3キャッシュサイズの6MBを上回っていることを考えると、全体のスピードが上がる可能性が高いと考えられます
また、メモリに対するアクセス速度が変更されています
IcelakeはLPDDR4-3733 最大2チャンネルを使用し、チップの制限が無ければ29.8GB/s x 2の転送ができます
CometlakeはLPDDR4-2933 最大2チャンネルとなり、こちらもチップの制限が無ければ23.4GB/s x 2の転送ができます
双方を比較すると27%となります
次回はINT8の場合を考えてみましょう
続く…

産業用画像処理装置開発、
ゲームコンソール開発、半導体エンジニアなどを経て、
Webエンジニア&マーケティングをやっています
好きな分野はハードウェアとソフトウェアの境界くらい