LoginSignup
2
1

More than 1 year has passed since last update.

AMD Ryzen 環境下での Intel fortran 最適化

Last updated at Posted at 2023-06-22

内容

Intel fortranをAMDのCPU (Zen2, Zen3)で使う時の最適化オプション

結論

Ryzen CPUでは-archオプションを使うと非常に速くなった。
Intel CPUで有効な-xHostや-ax、-x、-parallelは効かない。

最適化オプションの例 (Zen2, Zen3)
ifort -O3 -ipo -arch CORE-AVX2  (linux)
ifort /O3 /Qipo /arch:CORE-AVX2 (windows)

肝要なのは-archオプション。それ以外は状況に応じて変える。
CPUのarchtectureの探し方は後述。

環境

machine 1

CPU: AMD Ryzen Threadripper PRO 3995WX 64-Cores (Zen2)
OS: Ubuntu 22.04.2 LTS (lsb_release -a にて確認)
Compiler: ifort 2021.5.0 20211109 (ifort --version)

machine 2

CPU: AMD Ryzen 9 5950X 16-Core Processor (Zen3)
OS: Windows 11 22H2 (build 22621.1848) (winverにて確認)
Compiler: ifort version 19.1.3.311 (build 20201010_000000)

命令セットを探す方法

CORE-AVX2など、そのCPUで一番早い命令セットを見つけるため、以下の操作を行った。

ifort オプション検索

ifort -help codegen  (linux)
ifort /help          (windows)

-archにて使えそうなパラメタを探す。(CORE-AVX2, AVX, SSE4.2など)
※手持ちのifortではCORE-AVX512に対応していなかった。

CPU architecture確認

下記コマンドを使う。(windowsでもwsl上で動く)

cat /proc/cpuinfo

対応する命令セット一覧が表示される

3995WX (zen2)
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd amd_ppin arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip rdpid overflow_recov succor smca sev sev_es
5950X (zen3)
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave osxsave avx f16c rdrand hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw wdt topoext perfctr_core mwaitx fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni umip vaes vpclmulqdq rdpid

見つからないときは、grepで検索しても良い。(実際には該当箇所が赤字で表示される)

$cat /proc/cpuinfo | grep -i avx2
flags           : fpu ... bmi1 avx2 smep ...
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1