我需要通過測試不同情況下的吞吐量來測試一些GPU。CUDA,測試吞吐量的小程序
這包括一個簡單的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));
}
和64b MUL + 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允許)
我想知道:
,如果這是這樣做的正確方法
是否有任何特定線程配置超越最大化的線程數,我在哪裏可以獲取最佳的吞吐量?
你可能想看看[這個最近的問題](http://stackoverflow.com/q/14657365/681865)作爲如何問這種問題(提示,顯示一些代碼是重要的)的模型,然後考慮如何在你陷入遺忘和關閉之前重寫你的問題。 – talonmies
添加的代碼和重寫的問題 – elect