なんだかスケートをしているようなタイトルの連載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;
| FP16 | Icelake | Cometlake※1 | Skylake※2 |
| 1回目 | 85.7 | 37.3 | 31.8 |
| 2回目 | 99.9 | 33.8 | 36.5 |
| 3回目 | 90.5 | 38.1 | 35.8 |
| 4回目 | 105.1 | 37.5 | 31.3 |
| 5回目 | 107.3 | 35.4 | 35.4 |
| 6回目 | 84.9 | 33.1 | 36.4 |
| 7回目 | 92.1 | 38.2 | 30.2 |
| 8回目 | 100.4 | 31.2 | 31.6 |
| 9回目 | 105.1 | 35.7 | 36.1 |
| 10回目 | 99.2 | 36.3 | 31.9 |
| Average | 97.02 FPS | 35.66 FPS | 33.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で提供しているので、こちらにリンクしておきます)
次にこの命令群が実際にアプリケーション内で使用されているかどうかを調べてみましょう
続く…

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