visual-c++ - 使 MSVC 针对特定微架构进行优化
问题描述
使用 GCC/Clang/ICC/etc 我可以使用
-march=skylake
等生成针对特定微架构优化的代码,以及-march=native
生成针对本地机器优化的代码。
如何使用 MSVC 执行这些操作?
解决方案
Microsoft 的编译器将其分为两个独立的区域。一种是生成特定于特定指令集的代码,这在不支持该指令集的 CPU 上不起作用。这属于它的-arch:
旗帜。x64 编译器在此处仅支持两种变体:AVX 和 AVX2(或无标志,这基本上意味着 SSE 4.2a,如果有记忆的话)。x86 版本的编译器为较旧的指令集扩展(例如 SSE)添加了更多标志,但我怀疑您是否会再关心它。
另一类是生成可以在多种架构中的任何一种架构上工作的代码,但优先考虑其中的一种。这由-favor
switch 支持,它支持 ATOM、AMD64、INTEL64 和“混合”的目标(这基本上意味着尽量不以牺牲他人为代价来偏爱一个)。
它没有任何(记录的)标志,例如偏爱 Skylake 与(例如)Haswell 或 Broadwell。
推荐阅读
- python - Django Random FileField问题何时被删除
- android - 连接表中具有属性的房间多对多,如何显示具有连接表中的列的对象列表
- jquery - 动态返回一列值等于另一列值的所有 SQL 结果
- excel - 从 Excel 电子表格中提取信息
- node.js - FirestoreAdminClient.exportDocuments 具有本地 Firebase 功能的权限,但不具有远程 Firebase 功能的权限
- python - 有没有办法从这段代码中进行列表理解?
- javascript - 如何从 Dark Sky API Time Machine 返回历史数据
- linux - 如何在 Linux 上获得整体 RAM 使用率(例如 57%)
- java - net.sf.saxon.event.ReceivingContentHandler.startPrefixMapping 处的 NullPointerException(ReceivingContentHandler.java:291)
- postgresql - 使用 JDBC 驱动程序时,Timescaledb drop_chunks() 调用失败并出现函数未找到错误