c# - 如何修复“Cudafy 在 CUDA 上出现错误 719”
问题描述
[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 上使用 Konrad-Ziarko 的代码。但是当我把
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
输入一个函数吗?
解决方案
有点晚了,但是...
您不能在 Cudafy 装饰函数中分配 GPU 内存。分配应该在将参数传递给内核之前发生。在内核函数内部,您可以创建局部变量并使用它们。
此外,您可以更快地在源而不是其他地方提出问题并提及源。
推荐阅读
- jmeter - 如果测试失败,我如何将 concourse ci build 标记为失败?
- codenameone - 可以在 Galaxy Store 上发布 Codenameone Android 版本吗?
- java - SQLException: 找不到适合 jdbc:sqlserve:z/localhost:1433;databaseName=isTaskDB;user=is;password=1234 的驱动程序
- c++ - 无法使内置的反向触发自动矢量化工作(gcc 或 clang)
- karate - 有没有一种方法可以像 java 方法链接一样链接空手道中的场景
- c# - c# 在哪里可以通过反射找到基本类型(如 int)的重载运算符的 MethodInfo
- php - 预填充动态生成的表单 php
- vue.js - 我无法在我的 vuejs 应用程序中显示 fontawesome 图标
- python - 查找一个 numpy 数组中的值位于另一个 numpy 数组中的值之间的位置
- c# - 定期在 SearchServiceClient 和子 ISearchIndexClient 单例上重新加载凭据