我正在尝试使用 AVX 指令和 Windows 64 位。我对 g++ 编译器很满意,所以我一直在使用它,但是,报告了一个大错误here并提出了非常粗略的解决方案here.
基本上,m256 变量无法在堆栈上对齐才能与 avx 指令一起正常工作,它需要 32 字节对齐。
我链接的其他堆栈问题中提出的解决方案确实很糟糕,特别是如果您考虑到性能的话。每次你想要调试时都必须运行一个Python程序,它用次优的未对齐指令替换指令,或者过度分配并在代码中进行一堆昂贵的hacky指针数学以获得正确的对齐。如果您执行指针数学解决方案,我认为仍然有可能出现段错误,因为您无法控制分配或右值/临时值。
我正在寻找一种更简单、更便宜的解决方案。我不介意切换编译器,也不想这样做,但如果这是最好的解决方案,我会的。然而,我对这个错误的理解很差,因为它是 Windows 64 位固有的,所以切换编译器会有帮助吗?或者其他编译器也有同样的问题吗?
您可以通过切换到微软的64位C/C++编译器来解决这个问题。该问题并非 64 位 Windows 所固有的。尽管 Kai Tietz 在您链接的错误报告中说过,Microsoft 的 x64 ABI 确实允许编译器在堆栈上为变量提供大于 16 字节的对齐方式。
此外,Cygwin 的 64 位版本的 GCC 4.9.2 可以在堆栈上为变量提供 32 字节对齐。
Clang for Windows 还可以使用 AVX 生成工作可执行文件,并且在优化方面是一个不错的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)