整数を定数メモリにコピーしてグローバル関数で使用するコードを記述しましたが、正しく機能しません。グローバル関数の「cuPrintf」が機能せず、何も出力されないということです。
「if(* num == 5)」のせいだと思いますが、削除したので「cuPrintf」は全部好きなように印刷してくれます!
「if(num == 5)」も試してみましたが、Visual Studioでコンパイルされず、エラーが表示されます。
「cuPrintf」では「num」は正しいのに、「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」と表示されます!