MinGW64 无法进行 32 字节堆栈对齐(Windows x64 上的 AVX 需要),轻松解决或切换编译器?
MinGW64 Is Incapable of 32 Byte Stack Alignment (Required for AVX on Windows x64), Easy Work Around or Switch Compilers?
我正在尝试使用 AVX 指令和 windows 64 位。我对 g++ 编译器很满意,所以我一直在使用它,但是,报告了一个大错误 here and very rough solutions were presented here。
基本上,m256 变量无法在堆栈上对齐以正确使用 avx 指令,它需要 32 字节对齐。
在我链接的另一个堆栈问题中提出的解决方案真的很糟糕,尤其是当您考虑性能时。一个 python 程序,你每次想要调试时都必须 运行 将指令替换为次优未对齐的指令,或者过度分配并在代码中做一堆昂贵的 hacky 指针数学运算得到正确的对齐。如果你做指针数学解决方案,我认为甚至还有可能出现段错误,因为你无法控制分配或 r-values / temporaries。
我正在寻找更简单、更便宜的解决方案。我不介意切换编译器,我不愿意,但如果这是最好的解决方案,我会的。但是,我对这个错误的理解很差,因为它是 windows 64 位固有的,所以切换编译器会有帮助还是其他编译器也有同样的问题?
您可以通过切换到 Microsoft 的 64 位 C/C++ 编译器来解决此问题。这个问题不是 64 位 Windows 固有的。尽管 Kai Tietz 在您链接的错误报告中说了什么,但 Microsoft 的 x64 ABI 确实允许编译器在堆栈上为变量提供大于 16 字节的对齐方式。
此外,Cygwin 的 64 位版本 GCC 4.9.2 可以在堆栈上为变量提供 32 字节对齐。
Clang for Windows 也可以使用 AVX 制作可执行文件,在优化方面是一个不错的选择。
我正在尝试使用 AVX 指令和 windows 64 位。我对 g++ 编译器很满意,所以我一直在使用它,但是,报告了一个大错误 here and very rough solutions were presented here。
基本上,m256 变量无法在堆栈上对齐以正确使用 avx 指令,它需要 32 字节对齐。
在我链接的另一个堆栈问题中提出的解决方案真的很糟糕,尤其是当您考虑性能时。一个 python 程序,你每次想要调试时都必须 运行 将指令替换为次优未对齐的指令,或者过度分配并在代码中做一堆昂贵的 hacky 指针数学运算得到正确的对齐。如果你做指针数学解决方案,我认为甚至还有可能出现段错误,因为你无法控制分配或 r-values / temporaries。
我正在寻找更简单、更便宜的解决方案。我不介意切换编译器,我不愿意,但如果这是最好的解决方案,我会的。但是,我对这个错误的理解很差,因为它是 windows 64 位固有的,所以切换编译器会有帮助还是其他编译器也有同样的问题?
您可以通过切换到 Microsoft 的 64 位 C/C++ 编译器来解决此问题。这个问题不是 64 位 Windows 固有的。尽管 Kai Tietz 在您链接的错误报告中说了什么,但 Microsoft 的 x64 ABI 确实允许编译器在堆栈上为变量提供大于 16 字节的对齐方式。
此外,Cygwin 的 64 位版本 GCC 4.9.2 可以在堆栈上为变量提供 32 字节对齐。
Clang for Windows 也可以使用 AVX 制作可执行文件,在优化方面是一个不错的选择。