什么是TRUE(240)布尔值

时间:2015-12-23 04:19:59

标签: c++ arrays cuda comparison

我的一个内核比较了验证大于标量的双1D数组的每个值。该内核填充比较结果的布尔数组。

得到的布尔向量应该以TRUE或FALSE项提供每个元素比较结果。

但是我发现该设备存储了其他类型的TRUE值,导致我的代码崩溃。我可以找到TRUE(63),TRUE(66),TRUE(240)等等。这是什么?

当标量等于零时,请在两个不同的时间下载相同阵列的图像。

https://onedrive.live.com/redir?resid=26B45E0F43F4667B!12766&authkey=!APVysjd1WK1nDhE&ithint=folder%2c

1D数组包含100个元素,只有第一个元素等于1,其余元素等于零。预期的结果当然是: {TRUE,FALSE,FALSE,FALSE,... FALSE}

我发现另一个问题的答案暗示使用32位整数(“理想情况下你应该使用32位类型”)但我不明白该怎么做:

Boolean operations on CUDA

这是我的核心:

__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;
    }
}

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

我怀疑他们只是那些整数。在C ++中,0 == false and true = !false

因此,0的所有值均为false,其他任何值均为true,例如6366和{{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的比较不会有这个问题 - 但是一旦你与一个布尔文字进行比较,你就可以轻易忘记并与另一个进行比较。说不。