我的一个内核比较了验证大于标量的双1D数组的每个值。该内核填充比较结果的布尔数组。
得到的布尔向量应该以TRUE或FALSE项提供每个元素比较结果。
但是我发现该设备存储了其他类型的TRUE值,导致我的代码崩溃。我可以找到TRUE(63),TRUE(66),TRUE(240)等等。这是什么?
当标量等于零时,请在两个不同的时间下载相同阵列的图像。
1D数组包含100个元素,只有第一个元素等于1,其余元素等于零。预期的结果当然是: {TRUE,FALSE,FALSE,FALSE,... FALSE}
我发现另一个问题的答案暗示使用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;
}
}
任何建议都将受到赞赏。
答案 0 :(得分:0)
我怀疑他们只是那些整数。在C ++中,0 == false
and true = !false
因此,0
的所有值均为false
,其他任何值均为true
,例如63
,66
和{{1} }。这些可能就是你所发现的。
尝试将它们作为整数进行类型转换,或者将它们与已知的整数进行比较,看看它们到底是什么。
免责声明:我不熟悉CUDA。
答案 1 :(得分:0)
你的问题就在这一行:
var config = {
sizes:{
width:"500px",
height:"200px"
},
background:"rgba(10,10,100)",
color:[100,10,10,.5],
someArray:[100,0,0,2]
};
var str = require('fs').readFileSync(__dirname+'/test.styl',{encoding:'utf8'});
var stylus = require('stylus');
var stylusVars = require('stylus-vars')(config,{delimiter:'-'});
// the delimiter option defines how nested objects will be represented
stylus(str)
.set('filename','test.css')
.use(stylusVars)
.render(function(err, css){
if(err){throw err;}
console.log(css);
});
您需要的是:
if (r[j] == false && r[j - 1] == true)
(我觉得更容易阅读:
if (!r[j] && r[j - 1])
由于某种原因。)
在基于C语言中比较布尔值与 if (r[j - 1] && !r[j])
和false
几乎总是很危险。如果true
被声明为类型r
,它应该有效,但是否则任何非零值都将被视为&#34; true&#34;测试时,但只有1将等于bool
。在事实中与true
的比较不会有这个问题 - 但是一旦你与一个布尔文字进行比较,你就可以轻易忘记并与另一个进行比较。说不。