我在代码生成之前尝试了多目标功能 - 静态库选项。我写了一个生成器,并且能够为多个目标功能生成静态库和头文件,target=x86-64-windows-sse41,x86-64-windows-avx,x86-64-windows-avx2
但是在链接到我的应用程序后,应用程序崩溃了。当我指定只有target=x86-64-windows-sse41
应用程序运行良好。是的,我的系统支持 SSE4.1。
我的理解是,在为多个目标编译时,Halide 会在运行时检查功能支持并调用适当的规范。
我做了一个dumpbin /All mylib.lib /out:mylib.txt
并找到了 sse41、avx 和 avx2 的符号。它也有External | halide_can_use_target_features
看起来我错过了一些步骤。有关如何使用此功能的任何指示?
谢谢
更新
这是我的处理器支持的内容 - 从Coreinfo实用程序中提取
Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz
Intel64 Family 6 Model 37 Stepping 1, GenuineIntel
Microcode signature: 00000428
FPU * Implements i387 floating point instructions
MMX * Supports MMX instruction set
MMXEXT - Implements AMD MMX extensions
3DNOW - Supports 3DNow! instructions
3DNOWEXT - Supports 3DNow! extension instructions
SSE * Supports Streaming SIMD Extensions
SSE2 * Supports Streaming SIMD Extensions 2
SSE3 * Supports Streaming SIMD Extensions 3
SSSE3 * Supports Supplemental SIMD Extensions 3
SSE4a - Supports Streaming SIMDR Extensions 4a
SSE4.1 * Supports Streaming SIMD Extensions 4.1
SSE4.2 * Supports Streaming SIMD Extensions 4.2
AES * Supports AES extensions
AVX - Supports AVX intruction extensions
FMA - Supports FMA extensions using YMM state
MSR * Implements RDMSR/WRMSR instructions
MTRR * Supports Memory Type Range Registers
XSAVE - Supports XSAVE/XRSTOR instructions
OSXSAVE - Supports XSETBV/XGETBV instructions
RDRAND - Supports RDRAND instruction
RDSEED - Supports RDSEED instruction
这些是我尝试过的目标的顺序。
不工作
- SSE41、AVX、AVX2
- SSE41、AVX2、AVX
- AVX2、SSE41、AVX
- AVX、SSE41、AVX2
作品
- AVX2、AVX、SSE41
- AVX、AVX2、SSE41