CUDA中的顺序编程
Sequential programing in CUDA
我想在CUDA中实现这个简单的循环。
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
x[i, j] = (x0[i, j] + a*(x[i - 1, j] + x[i + 1, j] + x[i, j - 1] + x[i, j + 1])) / c;
}
}
问题是:要计算例如X[i,j],我需要知道X[i-1,j]和X[i、j-1]的新值,如果我想在CPU上计算这个值,这很容易(计算是顺序的)。但是GPU是并行计算的,所以从CPU和GPU收到的结果是不同的。我在CUDA和cudaDeviceSynchronize()中找到了一些关于动态并行性的信息,相信它可能很有用,但无论如何,我仍然不知道如何在内核中实现这个循环。我将感谢你的帮助。
注释是正确的,即使使用纯顺序实现,也需要复制数据。这里可能是您的内核(没有内存管理代码或任何进一步的细节):
__global__ void update(...)
for(int i = threadIdx.x + blockDim.x * blockIdx.x; i <= N; i += blockDim.x * gridDim.x)
{
for(int j = threadIdx.y + blockDim.y * blockIdx.y; j <= N; j += blockDim.y * gridDim.y)
{
output[i,j] = update_func(input, i, j);
}
}
您可以使用(从主机)调用
update<<<dim3(16, 16), dim3(64, 64)>>>(input, output, width, height);
用适合您的硬盘的任何值替换启动边界
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 优先顺序:智能指针和类析构函数
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- QML按钮点击功能执行顺序
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- C++中数据类型修饰符的顺序
- 当比特(而不是字节)的顺序至关重要时的持久性
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 通过选项卡的文本设置QTabWidget顺序
- c++11评估顺序(未定义的行为)
- 如何以编程方式更改布局中小组件的顺序
- CUDA中的顺序编程
- 在对话框中以编程方式更改选项卡顺序的其他方法
- 套接字编程中的C++字节顺序