1

PTX コードの JIT コンパイルを試しています。コードはコンパイルおよび実行されますが、生成元の cuda C に比べて非常に遅いです。
cuda C から生成された PTX コードの実行が遅い理由を実験しようとしています (両方とも compute_20/sm_20 をターゲットにしています)。呼び出し cuModuleLoadDataEx でオプションを設定して、compute_20/sm_20 をターゲットにしていることを確認したかったのですが、オプションを渡すことができないようです正しく。現在私は持っています

CUjit_option options[] = {
    CU_JIT_TARGET
}
CUjit_target_enum target = CU_TARGET_COMPUTE_20
void *optionValues[] = {
    &target
};
int32_t err = cuModuleLoadDataEx(&hModule, ptxSrc, 1, options, optionValues);

しかし、呼び出しは1(cudaErrorMissingConfiguration)を返しますもちろん、スタックオーバーフローとGoogleの両方で、オプションを正しく設定する方法の例を検索しようとしましたが、見つかりません。オプションを設定しなければ、呼び出しは成功し、コードは正しく実行されます。

4

1 に答える 1

1

CUDA SDK に付属のサンプル プログラムを検索すると、cuModuleLoadDataEx の例が多数見つかりますが、CU_JIT_TARGET を指定しているものはないようです。この関数呼び出しは、matrixMulDrv、vectorAddDrv、およびその他のいくつかで見られます。

これらのサンプルを見ると、オプション値がバッファーへのポインター (CU_JIT_INFO_LOG_BUFFER など) である必要がある場合は、そのポインターをオプション値として渡しますが、単純な整数 (CU_JIT_MAX_REGISTERS など) である必要がある場合は、整数をキャストするようです。値を void* に渡して、次のように渡します。

void *optionValues[] = {
    (void*)(uintptr_t) CU_TARGET_COMPUTE_20,
};  
于 2012-06-08T16:20:40.850 に答える