【发布时间】:2016-03-29 11:17:02
【问题描述】:
我的一个内核比较一个双一维数组的每个值,验证是否大于一个标量。该内核填充比较结果的布尔数组。
生成的布尔向量应以 TRUE 或 FALSE 形式提供每个元素比较结果。
但我发现设备正在存储其他类型的 TRUE 值,这会导致我的代码崩溃。我可以找到 TRUE (63)、TRUE (66)、TRUE (240) 等。这是什么?
请在标量为零的情况下分两次下载同一个数组的图片。
一维数组包含 100 个元素,只有第一个元素等于 1,其余的都等于 0。预期的结果当然是: {真,假,假,假,...假}
我发现另一个问题的答案建议使用 32 位整数(“理想情况下,您应该以使用 32 位类型为目标”),但我不明白该怎么做:
这是我的内核:
__global__ void _vecCmpGreat(bool *output, double *input1, double input2) {
unsigned int i = blockDim.x * blockIdx.x + threadIdx.x;
if (i < samples)
output[i] = input1[i] > input2;
}
计算比较结果的代码部分如下。当在布尔数组中找到“FALSE”到“TRUE”的转换时,它应该推回 std::vector 结果。
unsigned int j;
for (unsigned int i = 0; i < samples - 1; i++) {
j = samples - i - 1;
if (r[samples - 1]) {
result.push_back(samples - i - 1);
break;
}
else {
if (r[j] == false && r[j - 1] == true) {
result.push_back(j);
break;
}
}
任何建议将不胜感激。
【问题讨论】:
标签: c++ arrays cuda comparison