2017-02-26 2 views
0

"제로와 부호없는 정수의 무의미한 비교"나는 위의 경고를 얻을. 누구든지 왜 CUDA 컴파일러가 경고 메시지를 던져 주는지 말해 줄 수 있습니까? 나는 위의 기준을 만족하는 스레드 만 if 문에 허용하려고합니다. 내가 무시하면 어떤 결과가 있을까요? 내가 같이 여러 블록을 실행하고 참고 :경고 :</p> <pre><code>if(blockIdx.y-threadIdx.y >=0){ //some operation } </code></pre> <p>일을 CUDA

dim3 nblocks (7,7) 
dim3 nthreadsperblock (256,256) 
kernel<<<nblocks,nthreadsperblock>>>(...) 
+4

경고는 모든 것을 알려줍니다. 두 개의 ** 부호없는 ** 값을 뺄셈하면 결과는 항상 0이됩니다 – mpiatek

+0

@mpiatek for blockidx.y = 1, threadix.y> 1 인 스레드는 음수 값을 갖습니까? – darkfall94

+2

@ darkfall94 : 아니요. 서명되지 않은 표현식의 결과는 부호없는 유형이므로 반드시 음수가 아닙니다. 부호없는 타입은 정수 mod TYPE_MAX + 1에서 모듈러 연산으로 동작합니다. –

답변

1

당신은 signed int s의 변수를 캐스트 또는 if(blockIdx.y-threadIdx.y >=0){ 동일한 수학적입니다 if(blockIdx.y>=threadIdx.y){에 식을 변경해야합니다.

(a - b *op* 0)(a *op* b)으로 바꿀 수 있습니다. *op*은 비교 연산자 중 하나입니다.

+3

가능한 값의 범위에 대한 추가 가정없이 캐스팅이 동일하지 않으며 안전하지 않습니다. 두 번째 솔루션에서와 같이 표현식을 다시 작성해야합니다. –

+0

@R .. 감사합니다. – darkfall94

관련 문제