VexCL 重塑行为异常
VexCL Reshape Behaving Strangely
我有以下测试 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)".
从您的表达式生成的内核使用 vex_ints
作为输入和输出。由于 vex::reshape
所做的基本上是一个排列,因此您不能就地执行此操作。请尝试将结果分配给不同的向量,看看是否能解决您的问题。
我有以下测试 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)".
从您的表达式生成的内核使用 vex_ints
作为输入和输出。由于 vex::reshape
所做的基本上是一个排列,因此您不能就地执行此操作。请尝试将结果分配给不同的向量,看看是否能解决您的问题。