さまざまなシナリオでスループットをテストして、いくつかのGPUをテストする必要があります。
これには、単純な64b乗算が含まれます。
__device__ void add(unsigned int *data, bool flag){
unsigned int index = threadIdx.x;
unsigned int result;
asm ("{\n\t"
"add.cc.u32 %1, %1, %1;\n\t"
"addc.u32 %0, 0, 0;\n\t"
"}"
: "=r"(result), "+r"(index): );
if(flag)
data[threadIdx.x] = result;
}
64bモジュロ:
__device__ void mod(){
asm ("{\n\t"
".reg .u64 t1;\n\t"
"cvt.u64.u32 t1, %0;\n\t"
"rem.u64 t1, t1, t1;\n\t"
"}"
: : "r"(index));
}
および64bmul+ mod:
__device__ void mulmod
asm ("{\n\t"
".reg .u64 t1;\n\t"
".reg .u64 t2;\n\t"
"mul.wide.u32 t1, %0, %0;\n\t"
"cvt.u64.u32 t2, %0;\n\t"
"rem.u64 t1, t1, t2;\n\t"
"}"
: : "r"(index));
}
私の意図では、メモリアクセスはまったく役に立たないと思います。次に、スレッドのインデックス変数を入力として使用したいと思います。
そして、レジスターなしで書き込むので、レジスターの使用法を気にする必要はなく、可能な限り多くのスレッドを起動できます(各GPUで許可されます)
私が知りたいのですが:
これが適切な方法である場合
最高のスループットを取得できるスレッド数を最大化する以外に、特定のスレッド構成はありますか?