OpenVINO on IceLake (Vol.3)

なんだかスケートをしているようなタイトルの連載3回目、
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での実行に注目してみましょう

前回のsecurity_barrier_camera_demoのパラメータとFPSが下記となります

~/inference_engine_demos_build/intel64/Release/security_barrier_camera_demo -d CPU -d_va CPU -d_lpr CPU -i /opt/intel/openvino/deployment_tools/demo/car_1.bmp -m /openvino_models/ir/intel/vehicle-license-plate-detection-barrier-0106/FP16/vehicle-license-plate-detection-barrier-0106.xml -m_lpr /openvino_models/ir/intel/license-plate-recognition-barrier-0001/FP16/license-plate-recognition-barrier-0001.xml -m_va /openvino_models/ir/intel/vehicle-attributes-recognition-barrier-0039/FP16/vehicle-attributes-recognition-barrier-0039.xml -no_show;

FP16IcelakeCometlake※1Skylake※2
1回目85.737.331.8
2回目99.933.836.5
3回目90.538.135.8
4回目105.137.531.3
5回目107.335.435.4
6回目84.933.136.4
7回目92.138.230.2
8回目100.431.231.6
9回目105.135.736.1
10回目99.236.331.9
Average97.02 FPS35.66 FPS33.7 FPS

※1: インテル® Core™ i5-10210U プロセッサー搭載 ノートPC
※2: インテル® Core™ i7-6770HQ プロセッサー搭載 PC

理想的にCPUが動作するのであれば、Cometlakeでは最大4.2GHzでの動作、Skylakeでは最大3.5GHzの動作となるので、20%程度の差は発生します
そのため、CometlakeとSkylakeの処理速度はつじつまが合う気がします

次に、CometlakeとIcelakeの差が倍以上となっています
Icelakeは最大3.9GHzでの動作ですので、クロック自体もCometlakeの方が高くなります
ここまで違うと計測ミスの可能性もあります
そのため、CPUの違いや、この実行ファイルがどのような動きをしているか知る必要があります

Icelakeの違い

Skylake、CometlakeとIcelakeの違いはどこにあるのでしょうか?
Linuxで/proc/cpuinfoを確認してみましょう
下記はcpuinfoのflagsだけを取り出した物です
SkylakeとCometlakeには違いがほとんどありませんが、Icelakeには追加されているflagが複数あることがわかります

Skylake Cometlake Icelake
fpu fpu fpu
vme vme vme
de de de
pse pse pse
tsc tsc tsc
msr msr msr
pae pae pae
mce mce mce
cx8 cx8 cx8
apic apic apic
sep sep sep
mtrr mtrr mtrr
pge pge pge
mca mca mca
cmov cmov cmov
pat pat pat
pse36 pse36 pse36
clflush clflush clflush
dts dts dts
acpi acpi acpi
mmx mmx mmx
fxsr fxsr fxsr
sse sse sse
sse2 sse2 sse2
ss ss ss
ht ht ht
tm tm tm
pbe pbe pbe
syscall syscall syscall
nx nx nx
pdpe1gb pdpe1gb pdpe1gb
rdtscp rdtscp rdtscp
lm lm lm
constant_tsc constant_tsc constant_tsc
art art art
arch_perfmon arch_perfmon arch_perfmon
pebs pebs pebs
bts bts bts
rep_good rep_good rep_good
nopl nopl nopl
xtopology xtopology xtopology
nonstop_tsc nonstop_tsc nonstop_tsc
cpuid cpuid cpuid
aperfmperf aperfmperf aperfmperf
tsc_known_freq tsc_known_freq tsc_known_freq
pni pni pni
pclmulqdq pclmulqdq pclmulqdq
dtes64 dtes64 dtes64
monitor monitor monitor
ds_cpl ds_cpl ds_cpl
vmx vmx vmx
est est est
tm2 tm2 tm2
ssse3 ssse3 ssse3
sdbg sdbg sdbg
fma fma fma
cx16 cx16 cx16
xtpr xtpr xtpr
pdcm pdcm pdcm
pcid pcid pcid
sse4_1 sse4_1 sse4_1
sse4_2 sse4_2 sse4_2
x2apic x2apic x2apic
movbe movbe movbe
popcnt popcnt popcnt
tsc_deadline_timer tsc_deadline_timer tsc_deadline_timer
aes aes aes
xsave xsave xsave
avx avx avx
f16c f16c f16c
rdrand rdrand rdrand
lahf_lm lahf_lm lahf_lm
abm abm abm
3dnowprefetch 3dnowprefetch 3dnowprefetch
cpuid_fault cpuid_fault cpuid_fault
epb epb epb
invpcid_single invpcid_single invpcid_single
pti ssbd ssbd
ssbd ibrs ibrs
ibrs ibpb ibpb
ibpb stibp stibp
stibp ibrs_enhanced ibrs_enhanced
tpr_shadow tpr_shadow tpr_shadow
vnmi vnmi vnmi
flexpriority flexpriority flexpriority
ept ept ept
vpid vpid vpid

ept_ad ept_ad
fsgsbase fsgsbase fsgsbase
tsc_adjust tsc_adjust tsc_adjust
bmi1 bmi1 bmi1
hle

avx2 avx2 avx2
smep smep smep
bmi2 bmi2 bmi2
erms erms erms
invpcid invpcid invpcid
rtm

mpx mpx


avx512f


avx512dq
rdseed rdseed rdseed
adx adx adx
smap smap smap


avx512ifma
clflushopt clflushopt clflushopt
intel_pt intel_pt intel_pt


avx512cd


sha_ni


avx512bw


avx512vl
xsaveopt xsaveopt xsaveopt
xsavec xsavec xsavec
xgetbv1 xgetbv1 xgetbv1
xsaves xsaves xsaves
dtherm dtherm dtherm
ida ida ida
arat arat arat
pln pln pln
pts pts pts
hwp hwp hwp
hwp_notify hwp_notify
hwp_act_window hwp_act_window hwp_act_window
hwp_epp hwp_epp hwp_epp


hwp_pkg_req


avx512vbmi


umip


pku


ospke


avx512_vbmi2


gfni


vaes


vpclmulqdq


avx512_vnni


avx512_bitalg


avx512_vpopcntdq


rdpid
md_clear md_clear md_clear
flush_l1d flush_l1d flush_l1d

arch_capabilities arch_capabilities

この表内での違いはAVX512関連の有無となります
(AVX512関連の資料はわかりやすいものをXLSoftさんがPDFで提供しているので、こちらにリンクしておきます)

次にこの命令群が実際にアプリケーション内で使用されているかどうかを調べてみましょう

続く…