我编写了将整数复制到常量内存并在全局函数中使用它的代码,但它不能正常工作。我的意思是全局函数中没有“cuPrintf”工作并且没有打印!
我认为是因为“if(*num == 5)”,因为我删除它,所有“cuPrintf”都会打印我想要的!
我也尝试了“if(num == 5)”,但我的 Visual Studio 没有编译它并显示错误。
为什么“num”在“cuPrintf”中是正确的,但在“if”语句中是不正确的?
我应该如何在“if”语句中使用“num”?
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "stdio.h"
#include "stdlib.h"
#include "cuPrintf.cu"
__constant__ int* num;
__global__ void kernel(){
cuPrintf("\n num=%d\n",num);
if(*num == 5)
cuPrintf("\n num is equal 5");
else
cuPrintf("\n num is not equal 5");
}
void main(){
int x;
printf("\n\nPlease enter x:");
scanf("%d",&x);
cudaMemcpyToSymbol( num, &x,sizeof(int)*1);
cudaPrintfInit();
kernel<<<1,1>>>();
cudaPrintfDisplay(stdout, true);
cudaPrintfEnd();
int wait;
scanf("%d",&wait);
}
如果我改变:
__constant__ int* num;
至
__constant__ int num;
并改变:
cudaMemcpyToSymbol( num, &x,sizeof(int)*1);
至
cudaMemcpyToSymbol( &num, &x,sizeof(int)*1);
然后
cuPrintf("\n num=%d\n",num);
任何输入都会显示“num=0”!