如何创建可根据主机处理器/ OS在SSE,AVX和AVX2代码路径之间动态切换的库?我正在使用Agner Fog的VCL(矢量类库),并使用GCC for Linux进行编译。
请参见向量类库手册中的“指令集和CPU分配”部分。阿格纳在那部分写道
文件dispatch_example.cpp显示了如何制作一个选择适当代码版本的CPU调度程序的示例。
将源代码读取到distpatch_example.cpp
。在文件的开头,您应该看到注释
# Compile dispatch_example.cpp five times for different instruction sets:
| g++ -O3 -msse2 -c dispatch_example.cpp -od2.o
| g++ -O3 -msse4.1 -c dispatch_example.cpp -od5.o
| g++ -O3 -mavx -c dispatch_example.cpp -od7.o
| g++ -O3 -mavx2 -c dispatch_example.cpp -od8.o
| g++ -O3 -mavx512f -c dispatch_example.cpp -od9.o
| g++ -O3 -msse2 -otest instrset_detect.cpp d2.o d5.o d7.o d8.o d9.o
| ./test
文件instrset_detect.cpp
。您还应该阅读源代码。这就是所谓的CPUID。
这是我对CPU调度程序的部分而非全部问题的总结。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句