头节点是 Haswell (AVX2),计算节点是 Skylake (AVX-512),想把 C++代码优化为 AVX-512 指令集。
尝试了 gcc9,加了-march=skylake-avx512
直接编不过去。
又试了 icc,加了'-axCORE-AVX512'能编译通过,一运行秒崩溃。
跟管理员一块调试了一整天,谁也不知道怎么回事。最后管理员告诉我说,某些情况下 AVX 指令如果不在本机编译可能会出错,让我试试去计算节点从本机编译。
这个东西感觉已经是玄学范畴了。如果从 AVX2 编译到 AVX-512 都能出错,那交叉编译 ARM 的还活不活了?
顺便说一句,AMD 的-march=znver2
比某些普通且自信的玩意要 YES 多了...
1
matolv 2021-04-06 11:59:24 +08:00
“又试了 icc,加了'-axCORE-AVX512'能编译通过,一运行秒崩溃。”
Haswell 没有 avx512,你怎么运行得起来?除非你代码里面 fall back 到 avx2 或者 sse 跑分软件 cinebench r23 抛弃了 avx512,总体而言开启 avx512 以后导致的 cpu 降频+高能耗总体比 avx2 并不占优,skylake 构架落后不能光靠一个 simd 指令集翻身 另外 amd 已经有 Znver3 了,只是编译器还没完全适配完 参考: https://www.phoronix.com/scan.php?page=news_item&px=Znver3-GCC-10-Backport |
4
xuegy OP |
5
whee1 2021-04-06 12:54:53 +08:00
@matolv #1 可能需要 libc 等依賴庫都是-march=skylake-avx512 才行。
連 funtoo 都沒有支持 avx512 的 subarch,不過可以使用 https://www.funtoo.org/Intel64-skylake 這個 stage3 編譯一個出來試試。實在不行就加-march=skylake-avx512 重新編譯一下 gcc glibc,總比自己 bootstrap 一套工具鏈簡單點。 換個編譯選項就崩潰的問題,我也遇到過。甚至有些程序即使是-s -g0 生成的,你把他 strip 一下就不行了。 |
6
coolmenu 2021-04-06 16:51:15 +08:00
用 intel 自己的编译器测试一下?
|
7
henices 2021-04-06 17:43:22 +08:00 via Android
-march=native 试试
|