3

私の最初の質問は、Nvidia GPUでOpenCLカーネルコードのレジスター使用情報を取得する方法です。nvccコンパイラーは、nvcc --ptxas-options=-vCUDAカーネルコードに同じ使用フラグを提供します。

プログラムの実行中に生成されたOpenCLカーネルのAMDGPUについても.isa file、エクスポート後に同じ情報を取得しましたGPU_DUMP_DEVICE_KERNEL=3。同じことをNvidiaGPUでも試しましたが、うまくいきませんでし.isa fileた。私の2番目の質問は、なぜNvidiaGPUが生成されないのかということ.isa fileです。

グーグルした後、Nvidia GPUでOpenCLカーネルのレジスタと共有メモリ使用情報を取得する方法はcl-nv-verbose、clBuildProgram()関数呼び出しで文字列フラグを使用することです。次に、コンパイルされたカーネルコードの「バイナリ」情報を読み取ります。私の3番目の質問NvidiaGPUでレジスターの使用情報を取得する正しい方法ですか?同じになる他の方法は何ですか?

//プログラムをビルドしています...

clBuildProgram(program, 1, &device_id, "-cl-nv-verbose", NULL, NULL);

CL_PROGRAM_BINARY_SIZES and CL_PROGRAM_BINARIESプログラムをビルドした後、clGetProgramInfo()関数に2つの定数を使用して、コンパイルされたカーネルコードのバイナリを取得しました。

//コンパイルされたカーネルコードのバイナリを印刷します...

cl_uint program_num_devices, ret;
    size_t t;
    ret = clGetProgramInfo(program, CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &program_num_devices, NULL);
    if(program_num_devices == 0) {
            printf("No valid device was found \n");
            return ;
    }
    size_t binary_sizes[program_num_devices];
    char **binaries = (char **) malloc(program_num_devices * sizeof(char* ));
    //first call to get size of ISA binary file...
    ret = clGetProgramInfo(program, CL_PROGRAM_BINARY_SIZES, program_num_devices * sizeof(size_t), &binary_sizes, NULL);
    for(t = 0; t < program_num_devices; t++) {
            binaries[t] = (char *) malloc((binary_sizes[t] + 1) * sizeof(char));
    }
    //second call to get ISA info....
    ret = clGetProgramInfo(program, CL_PROGRAM_BINARIES, program_num_devices * sizeof(size_t), binaries, NULL);
    for(t = 0; t < program_num_devices; t++) {
            binaries[t][binary_sizes[t]] = '\0';
            printf("Binary ISA Info%s : %lu \n", binaries[t], binary_sizes[t]);
    }
    printf("ProgramNumDevices:: %u\n", program_num_devices);
    for(t = 0; t < program_num_devices; t++) {
            free(binaries[t]);
    }

これは、コンパイルしたOpenClカーネルコードの「バイナリ」を出力しています。ただし、レジスタや共有メモリの使用情報は表示されません。なんで?

いくつかの有用な情報を共有してください。

前もって感謝します !!!!

4

1 に答える 1

4

-cl-nv-verboseクイック検索から、を使用してプログラムをビルドした後、を使用して詳細な出力を取得するように見えますclGetProgramBuildInfo(...,CL_PROGRAM_BUILD_LOG,...)

于 2012-04-12T15:53:05.327 に答える