我正在编写一个测试程序来习惯Clang对OpenCL样式向量的语言扩展.我可以让代码工作,但我遇到了问题的一个方面.我似乎无法弄清楚如何让clang恰好从标量数组中加载一个向量.
目前我必须做一些事情:
byte16 va = (byte16){ argv[1][start], argv[1][start + 1], argv[1][start + 2],
argv[1][start + 3], argv[1][start + 4], argv[1][start + 5],
argv[1][start + 6], argv[1][start + 7], argv[1][start + 8],
argv[1][start + 9], argv[1][start + 10], argv[1][start + 11],
argv[1][start + 12], argv[1][start + 13], argv[1][start + 14],
argv[1][start + 15]};
Run Code Online (Sandbox Code Playgroud)
我理想的喜欢这样的事情:
byte16 va = *(byte16 *)(&(argv[1][start]));
Run Code Online (Sandbox Code Playgroud)
我可以轻松地使用适用于ARM或x86的内在函数.但是该代码会导致程序崩溃,尽管它会编译.
__m256i我想在实例和std::vector<uint32_t>实例(恰好包含 8 个元素)之间进行转换。
到目前为止我想出了这个:
using vu32 = std::vector<uint32_t>;
__m256i v2v(const vu32& in) {
assert(in.size() == 8);
return _mm256_loadu_si256(reinterpret_cast<const __m256i*>(in.data()));
}
vu32 v2v(__m256i in) {
vu32 out(8);
_mm256_storeu_si256(reinterpret_cast<__m256i*>(out.data()), in);
return out;
}
Run Code Online (Sandbox Code Playgroud)
安全吗?
有更惯用的方法吗?