Как исправить "Cudafy получить ошибку 719 на CUDA"
[Cudafy]
private static void LevenshteinGpu3(GThread thread, char[] source, char[] pattern, int firstDim, byte compareLength, byte[] dev_results)
{
int tid = thread.threadIdx.x + thread.blockIdx.x * thread.blockDim.x;
byte[,,] dev_levMatrix_1 = _gpu.Allocate<byte>(20, 20, 20);
for (byte j = 0; j <= compareLength; j++)
{
dev_levMatrix_1[tid, 0, j] = j;
dev_levMatrix_1[tid, j, 0] = j;
}
if (tid < firstDim)
{
for (int i = 1; i <= compareLength; i++)
{
for (int j = 1; j <= compareLength; j++)
{
int iMinusOne = i - 1;
int jMinusOne = j - 1;
if (tid + iMinusOne < source.Length && source[tid + iMinusOne] == pattern[jMinusOne])
{
dev_levMatrix_1[tid, i, j] = dev_levMatrix_1[tid, iMinusOne, jMinusOne];
}
else
{
byte x = dev_levMatrix_1[tid, iMinusOne, j];
if (x > dev_levMatrix_1[tid, i, jMinusOne])
x = dev_levMatrix_1[tid, i, jMinusOne];
if (x > dev_levMatrix_1[tid, iMinusOne, jMinusOne])
x = dev_levMatrix_1[tid, iMinusOne, jMinusOne];
dev_levMatrix_1[tid, i, j] = ++x;
}
}
}
dev_results[tid] = dev_levMatrix_1[tid, compareLength, compareLength];
}
}
Я использую код Конрад-Зиарко на GitHub. Но когда я ставлю
byte[,,] dev_levMatrix_1 = _gpu.Allocate<byte>(20, 20, 20);
в код и запустить. Cuda показал ошибку 719.
Но если я поставлю dev_levMatrix_1
как ниже, это работает:
private static void LevenshteinGpu3(GThread thread, char[] source, char[] pattern, dev_levMatrix_1, int firstDim, byte compareLength, byte[] dev_results)
Могу я поставить dev_levMatrix_1
в функции?
0 ответов
Немного поздно, но...
Вы не можете выделить память GPU внутри украшенной функции Cudafy. Распределение должно происходить до передачи параметров в ядро. Внутри функции ядра вы можете создавать локальные переменные и использовать их.
Кроме того, вы можете найти помощь, быстрее задавая вопросы у источника, а не где-то еще, и упомянуть источник.