我需要啓動N個線程(在一個塊中)哪種方法可以檢查Cuda中的位陣列?
這是代碼,'e'是1024b上的bignumber。我需要將它複製到gpu上並一點一點地讀取它。
主機代碼:
unsigned char *__e;
BIGNUM *e = BN_new();
unsigned char exp[128];
// e
i = cudaMalloc((void**)&__e, 128* sizeof(unsigned char));
if(i != cudaSuccess)
printf("cudaMalloc __e FAIL! Code: %d\n", i);
BN_bn2bin128B(e, exp); // copy data in exp
for(i=0; i<128; i++)
exp[i] = reverse(exp[i]);
i = cudaMemcpy(__e, exp, 128* sizeof(unsigned char), cudaMemcpyHostToDevice);
if(i != cudaSuccess)
printf("cudaMemcpy __e FAIL! Code: %d\n", i);
unsigned char reverse(unsigned char b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
設備代碼:
for(int i=0; i<1024; i++)
if(ISBITSET(__e, i) == 1)
//do something
頁眉:
#define ISBITSET(x,i) ((x[i>>3] & (1<<(i&7)))!=0)
不幸的是ISBITSET犯規接受任何來自__e不同,所以我不能在檢查其它值__e本身
我該如何解決它?或者,還有更好的方法?
也許你應該放下你最初的嘗試和你碰到的障礙。 – 2012-07-17 19:32:07
-1您需要在這個問題上多加一點努力。你對你想要做的描述是不明確的和不完整的。你有什麼嘗試?您在CUDA實施中期待的問題是什麼?也許還需要添加一些僞代碼。 – 2012-07-17 19:59:39