【发布时间】:2019-09-20 15:36:02
【问题描述】:
我正在尝试编写一个内核,其中一个参数是 int4 类型的 8 元素向量。然后我尝试将向量读入本地内存,然后将数据从向量复制到 int8 向量中。然后我想将 int8 向量存储到输出向量中。
我尝试对 int8 向量的每一半使用两个 int4 向量,但这似乎不起作用。
__kernel void vecload(__global int4* vecA,
__global int* vecR) {
int id = get_local_id(0);
__local int4 vA;
vA = vecA[id];
int8 v = (int8)((int4)(vA.s0),(int4)(vA.s1);
vstore8(v, 0, vecR);
}
输出显示 vecA 的第一个元素四次,然后第四个元素也显示四次。它应该显示向量的所有 8 个元素。
【问题讨论】:
-
int4不是 C 语言中的标准类型,因此它的含义和存储方式取决于您使用的编译器。它的文档应该描述它。 -
另外,你有一个非 c((并且可能是错误的)语法。
-
我正在使用 C++ Wrapper 在 OpenCL 中工作
-
一个 int4 只有四个元素,所以有点不清楚你想要实现什么。在任何情况下,您都在使用 vA.s0,如果 vA,这将显式访问第一个元素。尝试使用 int8 v = (int8)(vA, vA)。
标签: opencl