|
|
1
1
像char**这样的指针数组在内核中是有问题的,因为内核无法访问主机的内存。
char* buffer = st[0] + st[1] + st[2] + ....;
int* metadata = new int[numberOfStrings * 2];
int lastpos = 0;
for (int cnt = 0; cnt < 2* numberOfStrings; cnt+=2)
{
metadata[cnt] = lastpos;
lastpos += length(st[cnt]);
metadata[cnt] = length(st[cnt]);
}
内核中:
currentIndex = threadId + blockId * numberOfBlocks; char* currentString = buffer + metadata[2 * currentIndex]; int currentStringLength = metadata[2 * currentIndex + 1]; |
|
|
2
0
问题似乎与char**参数有关。把这个转换成char*解决了这个警告,所以我怀疑cuda可能在这种数据形式上有问题。也许在这种情况下,CUDA更喜欢使用特定的CUDA二维数组。 |