как исправить "Cudafy получить ошибку 719 на CUDA" - PullRequest
0 голосов
/ 28 сентября 2018
[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];
            }
        }

Я использую код Konrad-Ziarko на github.Но когда я вставляю

byte[,,] dev_levMatrix_1 = _gpu.Allocate<byte>(20, 20, 20); 

в код и запускаю.Када показала ошибку 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 в функцию?

1 Ответ

0 голосов
/ 08 января 2019

Немного поздно, но ...

Вы не можете выделить память GPU внутри функции, украшенной Cudafy.Распределение должно происходить до передачи параметров в ядро.Внутри функции ядра вы можете создавать локальные переменные и использовать их.

Также вы можете найти помощь, чтобы быстрее задавать вопросы у источника, а не где-то еще, и упоминать источник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...