相关疑难解决方法(0)

从内存加载向量的更好方法.(铛)

我正在编写一个测试程序来习惯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的内在函数.但是该代码会导致程序崩溃,尽管它会编译.

c vector clang opencl

7
推荐指数
1
解决办法
861
查看次数

与 __m256i 和 std::vector<uint32_t> 之间的转换

__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)

安全吗?

有更惯用的方法吗?

c++ intel simd intrinsics avx2

5
推荐指数
1
解决办法
1464
查看次数

标签 统计

avx2 ×1

c ×1

c++ ×1

clang ×1

intel ×1

intrinsics ×1

opencl ×1

simd ×1

vector ×1