VexCL重塑表现奇怪

时间:2016-11-02 04:57:11

标签: 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::cout << vex_ints[i] << " "; std::cout << std::endl;

它所做的只是打印小于n的偶数整数,然后是小于n的奇数整数。例如,当n = 10时,它会打印:

0 2 4 6 8 1 3 5 7 9 

但是当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)”。

1 个答案:

答案 0 :(得分:1)

从表达式生成的内核使用vex_ints作为输入和输出。由于vex::reshape所做的基本上是一种排列,所以你不能这样做。请尝试将结果分配给不同的向量,看看是否能解决问题。