Opencl VexCL重塑行为异常

Opencl VexCL重塑行为异常,opencl,vexcl,Opencl,Vexcl,我有以下代码段测试VexCL重塑函数: std::vector<int> ints; for (int i = 0; i < n; i++) ints.push_back(i); vex::vector<int> vex_ints(ctx, ints); vex_ints = vex::reshape(vex_ints, vex::extents[2][n/2], vex::extents[1][0]); for(int i=0; i<n; i++) std:

我有以下代码段测试VexCL重塑函数:

std::vector<int> ints;
for (int i = 0; i < n; i++) ints.push_back(i);
vex::vector<int> vex_ints(ctx, ints);
vex_ints = vex::reshape(vex_ints, vex::extents[2][n/2], vex::extents[1][0]);
for(int i=0; i<n; i++) std::cout << vex_ints[i] << " "; std::cout << std::endl;
但是当n变大时,事情会表现得很奇怪。例如,当n=10000时,前50个打印整数为:

0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196

62岁以后开始出错。输出后面还有其他差异,一些偶数出现在奇数之后。有人能解释为什么会这样吗?如果有关系的话,我使用的上下文是“GeForce GT 650M(Apple)”。

从表达式生成的内核使用
vex_ints
进行输入和输出。由于
vex::Reformate
所做的基本上是一种排列,因此您无法在适当的位置执行此操作。请尝试将结果分配给其他向量,看看这是否为您解决了问题。

为什么
vex::extensts[1][0]
在1D阵列上?它是否应该是vex::extents[0]?我正在使用vex::extents对象定义形状。在这个例子中,我告诉它矩阵是n/2行乘2列。我遵循了文档中的矩阵转置示例。在重塑部分,我了解到
dst
格式必须是
[2][n/2]
,但是
src
是1D向量,而不是要转置的2D向量。我对扩展数据块格式没有充分的信心,所以我可能错了。。。。在我看来,应该只是
vex::extensts[0]
声明您想要1D直接填充。
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196