cuda相关内容

CUDA:在 C++ 中包装设备内存分配

我现在开始使用 CUDA,不得不承认我对 C API 有点失望.我理解选择 C ​​的原因,但是如果该语言是基于 C++ 的,那么几个方面会简单得多,例如设备内存分配(通过 cudaMalloc). 我的计划是自己做这个,使用重载的 operator new 和放置 new 和 RAII(两种选择).我想知道到目前为止是否有任何我没有注意到的警告.代码似乎可以工作,但我仍然想知道潜在的内存泄 ..
发布时间:2022-01-10 16:14:35 C/C++开发

并行计算 Pi 的快速算法

我开始学习 CUDA,我认为计算 pi 的长数字会是一个不错的入门项目. 我已经实现了易于并行化的简单蒙特卡罗方法.我只是让每个线程在单位正方形上随机生成点,计算出单位圆内有多少个点,然后使用归约运算计算结果. 但这肯定不是计算常数的最快算法.之前,当我在单线程 CPU 上做这个练习时,我使用了 Machin-like formulae进行计算以实现更快的收敛.对于那些感兴趣的人,这涉 ..
发布时间:2022-01-10 16:14:19 其他开发

使用 CUDA 显示 GPU 优于 CPU 的最简单示例

我正在寻找可以为 CPU(使用 g++)和 GPU(使用 nvcc)编写的最简洁的代码量,GPU 的性能始终优于 CPU.任何类型的算法都是可以接受的. 澄清一下:我实际上是在寻找两段短代码,一段用于 CPU(在 g++ 中使用 C++),另一段用于 GPU(在 nvcc 中使用 C++),GPU 的性能优于后者.最好以秒或毫秒为单位.最短的代码对. 解决方案 首先,我重申一下我的评 ..
发布时间:2022-01-10 16:14:11 其他开发

CUDA 的 __shared__ 内存何时有用?

有人可以帮我举一个关于如何使用共享内存的简单示例吗?Cuda C 编程指南中包含的示例似乎被不相关的细节弄得一团糟. 例如,如果我将一个大数组复制到设备全局内存并希望对每个元素进行平方,如何使用共享内存来加快速度?还是在这种情况下没用? 解决方案 在你提到的具体情况下,共享内存是没有用的,原因如下:每个数据元素只使用一次.为了使共享内存有用,您必须多次使用传输到共享内存的数据,并使用 ..
发布时间:2022-01-10 16:14:04 其他开发

__global__ 函数如何像 C/C++ 一样返回值或中断

最近我一直在 CUDA 上进行字符串比较工作,我想知道 __global__ 函数如何在找到我正在寻找的确切字符串时返回一个值. 我的意思是,我需要包含大量线程的 __global__ 函数来同时在一个很大的字符串池中找到某个字符串,我希望一旦捕获到确切的字符串,__global__ 函数可以停止所有线程并返回主函数,并告诉我“他做到了"! 我正在使用 CUDA C.我怎样才能做到这一 ..
发布时间:2022-01-10 16:13:45 其他开发

CUDA/OpenGL 互操作,使用 CUDA 绘制到 OpenGL 纹理

我正在用 CUDA 编写一个渲染系统,并希望通过 OpenGL 快速显示结果,而无需触及主内存.我基本上做以下事情: 创建并初始化OpenGL纹理,并在CUDA中注册为cudaGraphicsResource GLuint viewGLTexture;cudaGraphicsResource_t viewCudaResource;无效初始化(){glEnable(GL_TEXTURE_2D ..
发布时间:2022-01-10 16:13:35 其他开发

使用 CUDA Thrust 查找最大元素值及其位置

如何不仅获取值,还获取最大(最小)元素(res.val 和 res.pos)的位置? thrust::host_vectorh_vec(100);推力::生成(h_vec.begin(),h_vec.end(),兰德);推力::device_vectord_vec = h_vec;T res = -1;res = 推力::reduce(d_vec.begin(), d_vec.end() ..
发布时间:2022-01-10 16:13:27 其他开发

Cuda 和 OpenGL 互操作

我一直在阅读 CUDA 文档,在我看来,每个需要与 OpenGL 接口的缓冲区都需要在 glBuffer 中创建. 根据 nvidia 编程指南,必须这样做: GLuint 位置VBO;结构 cudaGraphicsResource* 位置VBO_CUDA;int main() {//显式设置设备cudaGLSetGLDevice(0);//初始化 OpenGL 和 GLUT...过剩显示 ..
发布时间:2022-01-10 16:13:19 其他开发

为什么没有为双打实现 atomicAdd?

为什么双打的 atomicAdd() 没有作为 CUDA 4.0 或更高版本的一部分明确实现? 来自 CUDA 编程指南 4.1 以下版本atomicAdd 已实现. int atomicAdd(int* address, int val);无符号整数 atomicAdd(无符号整数 * 地址,无符号整数值);unsigned long long int atomicAdd(unsigne ..
发布时间:2022-01-10 16:13:13 其他开发

GPU中的上下文切换机制是什么?

据我所知,GPU 在扭曲之间切换以隐藏内存延迟.但我想知道在什么情况下,扭曲会被关闭?例如,如果一个扭曲执行加载,并且数据已经在缓存中.那么warp是关闭还是继续下一个计算?如果有两个连续添加会发生什么?谢谢 解决方案 首先,一旦一个线程块在多处理器 (SM) 上启动,它的所有 warp 都会驻留,直到它们全部退出内核.因此,在有足够的寄存器用于块的所有扭曲之前,不会启动一个块,直到有足够 ..
发布时间:2022-01-10 16:13:00 其他开发

如何让已经编写好的并发程序在 GPU 阵列上运行?

我有一个用 Erlang 编写的神经网络,我刚买了一张带有 240 核 GPU 的 GeForce GTX 260 卡.使用 CUDA 作为胶水在显卡上运行它是不是很简单? 解决方案 不,使用 CUDA 不是小事. CUDA 编程模型基本上使用 C(添加了一些内容),但为了充分利用 GPGPU 的功能,您必须确保您的算法遵循 CUDA 指南.(参见NVidia CUDA 编程指南) ..
发布时间:2022-01-10 16:12:45 其他开发

CUDA - 多处理器、Warp 大小和每个块的最大线程数:确切的关系是什么?

我知道 CUDA GPU 上有包含 CUDA 内核的多处理器.在我的工作场所,我正在使用 GTX 590,它包含 512 个 CUDA 内核、16 个多处理器,并且 warp 大小为 32.所以这意味着每个多处理器中有 32 个 CUDA 内核,它们在相同的代码中完全相同地工作.最后,每个块大小的最大线程数是 1024. 我的问题是块大小和多处理器计数 - warp 大小是如何完全相关的.说 ..
发布时间:2022-01-10 16:12:30 其他开发

恢复 NVCC 的 Apple Clang 版本

我正在尝试运行 NVCC 以在我的 Mac 上编译 CUDA 程序. 当我尝试运行 NVCC 时,我收到以下错误:“nvcc fatal : The version ('70300') of the host compiler ('Apple clang') is not supported". 我最近将我的 XCode 版本更新到 7.3,我的 Mac 更新到 10.11.4. ..
发布时间:2022-01-10 16:12:16 移动开发

为什么要费心去了解 CUDA Warps?

我有 GeForce GTX460 SE,所以它是:6 SM x 48 CUDA 核心 = 288 CUDA 核心.众所周知,一个 Warp 中包含 32 个线程,并且在一个块中同时(一次)只能执行一个 Warp.也就是在单个多处理器(SM)中只能同时执行一个Block、一个Warp和只有32个线程,即使有48个内核可用? 另外,可以使用threadIdx.x和blockIdx.x来分配具体 ..
发布时间:2022-01-10 16:12:06 其他开发

无根安装 Cuda

我知道我可以通过以下方式安装 Cuda: wget http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.28_linux.runchmod +x cuda_7.0.28_linux.run./cuda_7.0.28_linux.run -extract=`pwd`/nvidia_ ..
发布时间:2022-01-10 16:11:58 其他开发

nVIDIA CC 2.1 GPU warp 调度程序如何一次发出 2 条指令进行 warp?

注意:此问题专门针对 nVIDIA Compute Capability 2.1 设备.以下信息来自 CUDA Programming Guide v4.1: 在计算能力 2.1 设备中,每个 SM 有 48 个 SP(核心)用于整数和浮点运算.每个 warp 都由32 个连续线程.每个 SM 有 2 个warp 调度器.在每一个指令发布时间,一个warp调度器选择一个准备好的warp线程并 ..
发布时间:2022-01-10 16:11:50 其他开发

如何从命令行获取 nvidia 驱动程序版本?

为了调试 CUDA 代码和检查兼容性,我需要找出我安装的 GPU 的 nvidia 驱动程序版本.我发现 如何获取 cuda 版本? 但这对我没有帮助. 解决方案 使用 nvidia-smi 应该告诉你: bwood@mybox:~$ nvidia-smi2012 年 10 月 29 日星期一 12:30:02+-------------------------------------- ..
发布时间:2022-01-10 16:11:41 服务器开发

GPU 上的图算法

当前的 GPU 执行和内存模型受到某种限制(内存限制、数据结构限制、无递归......). 您认为在 GPU 上实现图论问题是否可行?例如,顶点覆盖?主导集?独立集?最大派系?.... 在 GPU 上使用分支定界算法是否也可行?递归回溯? 解决方案 你会感兴趣的 使用并行图算法探索 GPU 的极限 使用 CUDA 在 GPU 上加速大型图算法. ..
发布时间:2022-01-10 16:11:30 其他开发

Cuda gridDim 和 blockDim

我知道 blockDim 是什么,但是 gridDim 有问题.Blockdim 给出了块的大小,但是 gridDim 是什么?在互联网上,它说 gridDim.x 给出了 x 坐标中的块数. 我怎么知道 blockDim.x * gridDim.x 给出了什么? 我如何知道 x 行中有多少个 gridDim.x 值? 例如,考虑下面的代码: int tid = threadI ..
发布时间:2022-01-10 16:11:15 其他开发