cuda相关内容

CUDA 内核操作中原子添加的一些问题

我的 kernel.cu 类有问题 调用 nvcc -v kernel.cu -o kernel.o 我收到这个错误: kernel.cu(17): 错误:标识符“atomicAdd"未定义 我的代码: #include "dot.h"#include #include "device_functions.h"//可能会调用 atomicAdd__global__ void dot ( ..
发布时间:2021-11-30 14:55:07 其他开发

CUDA、互斥锁和 atomicCAS()

最近我开始在 CUDA 上开发并面临 atomicCAS() 的问题.要对设备代码中的内存进行一些操作,我必须创建一个互斥锁,以便只有一个线程可以在代码的关键部分使用内存. 下面的设备代码在 1 个块和多个线程上运行. __global__ void cudaKernelGenerateRandomGraph(..., int* mutex){int i = threadIdx.x;... ..
发布时间:2021-11-30 14:53:27 C/C++开发

如何实现涉及多个变量的自定义原子函数?

我想在 CUDA 中实现这个原子函数: __device__ 浮动最低;//全局变量__device__ int lowIdx;//全局变量浮点数;//线程注册变量整数索引;//线程注册变量如果(realNum 这里是一个类似的例子,它对 2 个 float 数量进行原子更新.> ..
发布时间:2021-11-30 14:47:10 其他开发

Cuda 原子更改标志

我有一段串行代码可以做这样的事情 if( !variable ){在这里做一些初始化变量 = 真;} 我知道这在串行中工作得很好,并且只会执行一次.在 CUDA 中,哪种原子操作是正确的? 解决方案 在我看来,您想要的是代码中的“关键部分".临界区允许一个线程执行一系列指令,同时阻止任何其他线程或线程块执行这些指令. 临界区可用于控制对内存区域的访问,例如,以允许单个线程无冲突地 ..
发布时间:2021-11-30 14:45:49 其他开发

CUDA:如何在内核代码中断言?

CUDA 内核代码中断言的等效技术是什么? 似乎没有针对 CUDA 内核代码的断言.我想要一种在内核代码中轻松捕获程序员错误的方法.一种机制,我可以设置需要为真的条件,并且内核应该在条件为假时退出并显示错误消息. 解决方案 对于 cc 2.x 或更高版本的设备,assertion ,void assert(int expression),可以在内核中使用,使得具有 expressio ..
发布时间:2021-11-30 11:37:43 其他开发

AMD 的 OpenCL 是否提供类似于 CUDA 的 GPUDirect 的功能?

NVIDIA 提供 GPUDirect 以减少内存传输开销.我想知道 AMD/ATI 是否有类似的概念?具体: 1) AMD GPU 在与网卡接口时是否避免了第二次内存传输,如此处所述.如果图形在某些时候丢失,这里描述了 GPUDirect 对从一台机器上的 GPU 获取数据以通过网络接口传输的影响的描述:使用 GPUDirect,GPU 内存进入主机内存,然后直接进入网络接口卡.没有GPU ..
发布时间:2021-11-27 11:32:01 其他开发

是否可以在 AMD GPU 上运行 CUDA?

我想将我的技能扩展到 GPU 计算.我熟悉光线追踪和实时图形(OpenGL),但下一代图形和高性能计算似乎是在 GPU 计算或类似的东西. 我目前在我的家用电脑上使用 AMD HD 7870 显卡.我可以为此编写 CUDA 代码吗?(我的直觉是否定的,但由于 Nvidia 发布了编译器二进制文件,我可能是错的). 第二个更普遍的问题是,我从哪里开始使用 GPU 计算?我敢肯定这是一个经 ..
发布时间:2021-11-27 11:31:00 其他开发

CUDA 分配数组数组

我在 CUDA 中分配数组时遇到了一些麻烦. void ** data;cudaMalloc(&data, sizeof(void**)*N);//分配没有问题for(int i = 0; i ..
发布时间:2021-11-27 08:11:24 其他开发

在 CUDA 中在设备内存上分配二维数组

如何在 Cuda 的设备内存中分配和传输(到主机和从主机)二维数组? 解决方案 我找到了这个问题的解决方案.我不必展平阵列. 内置的 cudaMallocPitch() 函数完成了这项工作.我可以使用 cudaMemcpy2D() 函数将数组传入和传出设备. 例如 cudaMallocPitch((void**) &array, &pitch, a*sizeof(float) ..
发布时间:2021-11-26 13:27:07 其他开发

将 Java 与 Nvidia GPU (CUDA) 结合使用

我正在从事一个用 Java 完成的商业项目,它需要强大的计算能力来计算商业市场.简单的数学,但有大量的数据. 我们订购了一些 CUDA GPU 来试用,由于 CUDA 不支持 Java,我想知道从哪里开始.我应该构建一个 JNI 接口吗?我应该使用 JCUDA 还是有其他方法? 我在这个领域没有经验,我希望有人能指导我做一些事情,这样我就可以开始研究和学习. 解决方案 首先,您 ..
发布时间:2021-11-25 17:36:32 Java Web开发

CUDA 3D 矩阵索引

我在 CUDA 中有一个矩阵,它是 356x896x60. 在我的程序中,我对三个空间坐标进行编码: voxel[threadIdx.x]= indexx+indexy*(DETECTOR_X_DIM)+indexz*DETECTOR_X_DIM*DETECTOR_Y_DIM; 这样对吗?我已经看到一些关于使用 x*dimx*dimy + y*dimx + z 的主题 所以我不确定什么 ..
发布时间:2021-11-25 04:21:23 C#

Cuda,计算3d对象之间的距离矩阵

我有一个由 3D 连接的 N 个对象(原子)组成的“字符串"(分子)(每个原子都有一个坐标).我需要计算分子中每对原子之间的距离(参见下面的伪代码).如何用 CUDA 做到这一点?我应该传递给内核函数 2 3D Arrays 吗?还是 3 个坐标数组:X[N]、Y[N]、Z[N]?谢谢. 结构原子{双 x,y,z;} int main(){//一个分子中有N个原子双距离矩阵[N][N];双 ..
发布时间:2021-11-25 03:21:02 C#

CUDA 中的 3D 索引访问用于非线性扩散

我正在为 2D/3D 非线性扩散编写我的第一个 CUDA 代码.2D 案例工作正常,但是我在 3D 案例中挣扎.基本上,我在有限差分计算阶段得到了零,令人惊讶的是“deltaN"(请参见下面的代码)给出了正确的答案,但其他答案不起作用(答案为零).我正在尝试处理 256x256x256 的卷.请问有什么建议吗?谢谢! #define BLKXSIZE 8#define BLKYSIZE 8#d ..
发布时间:2021-11-25 03:15:53 C#

CUDA:如何将 3D 阵列从主机复制到设备?

我想了解如何将 3 维数组从主机内存复制到设备内存.假设我有一个包含数据的 3d 数组.例如int host_data[256][256][256];我想以这种方式将该数据复制到 dev_data(一个设备数组)主机数据[x][y][z]=dev_data[x][y][z];我该怎么做?我应该如何访问设备中的 dev_data 数组?一个简单的例子会很有帮助. 解决方案 常用的方法是展平一 ..
发布时间:2021-11-25 01:47:23 C#

绑定 CUDA 纹理读取为零

我尝试从纹理中读取值并将它们写回全局内存.我确信编写部分有效,因为我可以在内核中放置常量值,并且可以在输出中看到它们: __global__ voidbartureKernel( float* g_odata, int width, int height){unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;unsigned int y = ..
发布时间:2021-11-24 22:01:28 C#

在 CUDA 中在设备内存上分配二维数组

如何在 Cuda 的设备内存中分配和传输(到主机和从主机)二维数组? 解决方案 我找到了这个问题的解决方案.我不必展平阵列. 内置的 cudaMallocPitch() 函数完成了这项工作.我可以使用 cudaMemcpy2D() 函数将数组传入和传出设备. 例如 cudaMallocPitch((void**) &array, &pitch, a*sizeof(float) ..
发布时间:2021-11-24 21:16:58 C#

CUDA cudaMemcpy 数组结构

我想在我的项目中清理 CUDA 内核的参数. 现在,内核需要 3 个 uint32_t 数组,这导致代码非常丑陋:(id 表示全局线程 id 和 valX 是某个任意值) __global__ void some_kernel(uint32_t * arr1, uint32_t * arr2, uint32_t * arr3){arr1[id] = val1;arr2[id] = val2 ..
发布时间:2021-11-18 05:09:30 其他开发

如何读回 CUDA 纹理进行测试?

好的,到此为止,我可以在主机上创建一个数组(float类型),并将其复制到gpu,然后将其作为另一个数组带回主机(通过比较来测试复制是否成功到原文). 然后我从 GPU 上的数组创建一个 CUDA 数组.然后我将该数组绑定到 CUDA 纹理. 我现在想读回该纹理并与原始数组进行比较(再次测试它是否正确复制).我看到了一些使用 readTexel() 函数的示例代码,如下所示.它似乎对我 ..
发布时间:2021-11-18 05:05:29 其他开发

Cuda 分配和从 gpu 到 cpu 返回数组

我在 Cuda 中有以下代码(它不是完整代码).我正在尝试检查它是否正确地将阵列从主机复制到设备以及从要托管的设备. flVector 用几个数字和 indeces 初始化. pass 函数需要将 flVector 和 indeces 复制到设备内存中.在主要方面,在我调用传递函数之后,我试图再次复制数组,但现在从设备复制到主机,然后打印值以检查值是否正确. flat_h 返回正 ..
发布时间:2021-11-18 04:42:26 其他开发

在 CUDA 内核中搜索有序数组

我正在编写一个 CUDA 内核,每个线程必须完成以下任务:假设我有一个 n 无符号整数的有序数组 a(第一个是总是 0) 存储在共享内存中,每个线程必须找到数组索引 i 使得 a[i] ≤ threadIdx.x 和 a[i + 1] > threadIdx.x. 一个简单的解决方案可能是: for (i = 0; i threadIdx.x) 中断; 但我想这不是最好的方法……谁能提 ..
发布时间:2021-11-18 04:25:30 其他开发