gpt4 book ai didi

CUDA内存问题

转载 作者:行者123 更新时间:2023-12-03 17:21:55 25 4
gpt4 key购买 nike

我有一个 CUDA 内核,我正在将其编译为一个没有任何特殊标志的 cubin 文件:

nvcc text.cu -cubin

它编译,但有这条消息:

Advisory: Cannot tell what pointer points to, assuming global memory space



以及对某个临时 cpp 文件中一行的引用。我可以通过注释掉一些对我来说毫无意义的看似随意的代码来实现这一点。

内核如下:
__global__ void string_search(char** texts, int* lengths, char* symbol, int* matches, int symbolLength)
{
int localMatches = 0;
int blockId = blockIdx.x + blockIdx.y * gridDim.x;
int threadId = threadIdx.x + threadIdx.y * blockDim.x;
int blockThreads = blockDim.x * blockDim.y;

__shared__ int localMatchCounts[32];

bool breaking = false;
for(int i = 0; i < (lengths[blockId] - (symbolLength - 1)); i += blockThreads)
{
if(texts[blockId][i] == symbol[0])
{
for(int j = 1; j < symbolLength; j++)
{
if(texts[blockId][i + j] != symbol[j])
{
breaking = true;
break;
}
}
if (breaking) continue;
localMatches++;
}
}

localMatchCounts[threadId] = localMatches;

__syncthreads();

if(threadId == 0)
{
int sum = 0;
for(int i = 0; i < 32; i++)
{
sum += localMatchCounts[i];
}
matches[blockId] = sum;
}
}

如果我更换线路
localMatchCounts[threadId] = localMatches;

在此行的第一个 for 循环之后
localMatchCounts[threadId] = 5;

它编译时没有任何通知。这也可以通过注释掉该行上方循环中看似随机的部分来实现。我也试过用普通数组替换本地内存数组没有效果。谁能告诉我是什么问题?

该系统是 Vista 64 位,物有所值。

编辑:我修复了代码,所以它确实可以工作,但它仍然会产生编译器通知。警告似乎不是问题,至少在正确性方面(它可能会影响性能)。

最佳答案

像 char** 这样的指针数组在内核中是有问题的,因为内核无法访问主机的内存。
最好分配单个连续缓冲区并以能够并行访问的方式对其进行划分。
在这种情况下,我将定义一个一维数组,其中包含一个接一个定位的所有字符串和另一个一维数组,大小为 2*numberOfStrings ,其中包含第一个数组中每个字符串的偏移量及其长度:

例如 - 准备内核:
char* 缓冲区 = st[0] + st[1] + st[2] + ....;
int* metadata = new int[numberOfStrings * 2];
int lastpos = 0;
for (int cnt = 0; cnt < 2* numberOfStrings; cnt+=2)
{
元数据[cnt] = lastpos;
lastpos += length(st[cnt]);
元数据[cnt] = 长度(st[cnt]);
}

在内核中:
currentIndex = threadId + blockId * numberOfBlocks;
char* currentString = 缓冲区 + 元数据[2 * currentIndex];
int currentStringLength = metadata[2 * currentIndex + 1];

关于CUDA内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com