xml*_*lmx 6 c c++ compiler-construction optimization instruction-set
考虑我有一个程序来执行AES操作.
一些高级CPU具有AES-NI指令集,而其他CPU则没有.
我必须将我的程序编译成两个可执行文件:A_with_aes_ni.exe和B_without_aes_ni.exe吗?
你想要什么叫做CPU调度员.Agner Fog在他的Optimizing C++手册的第三章"为不同指令集制作多个版本的关键代码"中有10页的文本.他与GCC和ICC讨论了这一点.
您只需要一个可执行文件,但需要在启用和不启用AES的情况下编译两个不同的目标文件.然后,调度程序确定可用的指令集,并根据该指令选择代码路径.
我尝试使用MSVC2010 cpu调度程序为AVX和SSE的visual studio执行此操作,但没有成功.我怀疑我现在可以让它工作了.
编辑:在Agner Fog的vectorclass中,他有一个文件dispatch_example.cpp,instrset_detech.cpp它应该具有制作调度员所需的大部分内容.您仍然需要弄清楚如何检测CPU是否具有AES.您需要扩充intrset_detect.cpp文件. 根据维基百科,当您读取寄存器中的CPUID位23时,如果CPU具有AES,则设置ECX. 维基百科也有代码示例来读取CPUID(此外instrset_detech.cpp- 另一个很好的例子是在文件cpuid.c中的https://github.com/Mysticial/Flops)
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |