c++ - 何时使用英特尔的指令集扩展技术
问题描述
什么时候使用英特尔的指令集扩展技术才有意义?它到底有什么作用?
我的场景:我想尽可能快地进行约 500.000 次矩阵向量乘法。
矩阵大小:[4x4] | 向量大小:[1x4]
解决方案
如果你能保证你的客户有一定程度的 SIMD 支持,我看不出是什么阻碍了你。
SIMD 已经存在了很长时间,要求您的客户拥有它并非不合理。
例如: https ://docs.microsoft.com/en-us/cpp/build/reference/arch-x86?view=vs-2019 https://docs.microsoft.com/en-us/cpp/build /reference/arch-x64?view=vs-2019
x86-64 保证 SSE2 可用,因此编译器始终将其用于 64 位构建。(从某种意义上说,它不再是扩展,只是 x86-64 ISA 的基线部分)。
编辑:
感谢您编辑 Peter Cordes!
但我也想向用户指出,如果他们对 SIMD 感兴趣,他们可能想要研究 OpenCL。
https://en.wikipedia.org/wiki/OpenCL
OpenCL 帮助用户编写非常高效的 SIMD 程序。
推荐阅读
- azure - 在发票表中使用资源 GUID 映射 Azure 资源标记
- javascript - 打字稿最大调用堆栈大小超出错误
- java - 导入 org.apache.poi.xssf.usermodel.XSSFWorkbook 时出现问题;在硒 Java 项目中
- rust - Rust wasm:缺少在外部 crate 中定义的导出函数
- python - PyCharm 突出显示导入模块的行
- vim - Neovim 中的默认值不正确:无法创建备份文件(添加!覆盖)
- c - 宏未到达 .c 文件
- azure - Azure CD 管道找不到生成项目
- ios - 嵌入式 @Binding 不会更改值
- c# - 实体框架查询结果作为复杂对象列表