たとえばnvcc -arch=sm_11
、またはnvcc -arch=sm_20
コードのコンパイルに使用されたかどうかに応じて、異なるカーネルを呼び出す可能性はありますか? もう少し明確にするには:
if (FANCY_FLAG == CU_TARGET_COMPUTE_11)
// Do some conversions here..
krnl1<<<GRID_DIM1, BLOCK_DIM1>>>(converted_value1);
else if (FANCY_FLAG == CU_TARGET_COMPUTE_20)
krnl2<<<GRID_DIM2, BLOCK_DIM2>>>(value1);
ご覧のとおり、CUjit_target_enum
inを見つけましたcuda.h
が、nvcc が enums 値の 1 つに等しいフラグを定義しているかどうかを確認できませんでした。
これに対する私の意図は、私のデバイスが倍精度浮動小数点数をサポートしているかどうかわからないということです。つまり、データを から に変換する必要がdouble
あるfloat
ため、別のカーネルを実行する必要があります (はい、可能であれば、単精度よりも倍精度でカーネルを実行することをお勧めします)。
また、それがうまくいく限り、まったく異なるアプローチをいただければ幸いです。