如何解决T = __ m512的alignofT不等于alignof__ m512
我遇到一种奇怪的情况,即alignof(__m512)
不等于Apple叮当编译的std::alignment_of<__m512>::value
。经过一些测试,我发现当使用alignof(T)
在模板中对T=__m512
进行求值时,直接alignof(__m512)
的结果是不同的。
我还在ubuntu(WSL)上运行了一些由g ++和非Apple的clang编译的测试,并得到了正确的(我认为)行为。
这是Apple叮当声的错误还是有关已实现行为的问题?
#include <immintrin.h> //avx headers
#include <cstdio>
#include <typeinfo>
#include <type_traits>
void test_directly() {
printf("directly: typeid %s alignof %zu\n",typeid(__m512).name(),alignof(__m512));
}
template<typename T>
void test_as_template_argument() {
static_assert(std::is_same<T,__m512>::value,"assert");
printf("template: typeid %s alignof %zu\n",typeid(T).name(),alignof(T));
}
int main() {
test_directly();
test_as_template_argument<__m512>();
return 0;
}
输出(由clang++ -std=c++17 -march=native
编译):
directly: typeid Dv16_f alignof 64
template: typeid Dv16_f alignof 32
c的版本:
Apple clang version 11.0.3 (clang-1103.0.32.62)
Target: x86_64-apple-darwin19.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
macOS的版本:macOS Catalina 10.15.4 (19E2269) Darwin 19.4.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。