Questions tagged «cuda»

CUDA(计算统一设备体系结构)是用于NVIDIA GPU(图形处理单元)的并行计算平台和编程模型。CUDA通过多种编程语言,库和API为NVIDIA GPU提供了接口。

21
CUDA与我的gcc版本不兼容
我在编译CUDA SDK附带的一些示例时遇到了麻烦。我已经安装了开发人员驱动程序(版本270.41.19)和CUDA工具包,然后安装了SDK(均为4.0.17版本)。 最初,它根本没有编译: error -- unsupported GNU version! gcc 4.5 and up are not supported! 我在81:/usr/local/cuda/include/host_config.h中找到负责的行,并将其更改为: //#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4) #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6) 从那时起,我只编译了几个示例,其结尾为: In file included from /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr.h:162:0, from /usr/include/c++/4.6/ext/atomicity.h:34, from /usr/include/c++/4.6/bits/ios_base.h:41, …
102 gcc  cuda  debian 


5
什么是银行冲突?(执行Cuda / OpenCL编程)
我一直在阅读CUDA和OpenCL的编程指南,但无法弄清什么是银行冲突。他们只是在不详细说明主题本身的情况下潜入了如何解决问题的方法。有人可以帮我理解吗?如果帮助是在CUDA / OpenCL的背景下进行的,或者计算机科学中的一般银行冲突,我都没有选择。

8
Java中GPGPU / CUDA / OpenCL的最佳方法?
图形处理单元(GPGPU)上的通用计算是一个非常吸引人的概念,可以利用GPU的能力进行任何类型的计算。 我很想使用GPGPU进行图像处理,粒子和快速几何运算。 现在,似乎这个领域的两个竞争者是CUDA和OpenCL。我想知道: Windows / Mac上的Java是否可以使用OpenCL? 与OpenCL / CUDA接口的库方法是什么? 直接使用JNA是一种选择吗? 我忘记了什么吗? 任何现实世界的经验/示例/战争故事都值得赞赏。
94 java  cuda  gpgpu  opencl 

4
我可以在英特尔集成图形处理器上运行CUDA吗?
我有一台非常简单的带有i3处理器的东芝笔记本电脑。另外,我没有任何昂贵的图形卡。在显示设置中,我看到Intel(HD)Graphics作为显示适配器。我打算学习一些cuda编程。但是,我不确定是否可以在笔记本电脑上做到这一点,因为它没有任何支持nvidia的cuda的GPU。 实际上,我怀疑我是否还有GPU o_o 因此,如果有人可以告诉我是否可以使用当前配置进行CUDA编程,并且希望让我知道Intel(HD)Graphics是什么意思,我将不胜感激。

3
为什么CUDA固定内存这么快?
当我使用固定内存进行CUDA数据传输时,我观察到数据传输速度大大提高。在linux上,实现此目标的底层系统调用是mlock。从mlock的手册页中可以看出,锁定该页可防止将其换出: mlock()将页面锁定在地址范围内,该地址范围从addr开始并持续len个字节。当调用成功返回时,保证所有包含指定地址范围一部分的页面都驻留在RAM中; 在测试中,我的系统上有几千个可用内存,因此从没有任何风险可以换出内存页面,但我仍然观察到加速。任何人都可以解释这里到底发生了什么吗?任何见解或信息都将不胜感激。
83 c++  c  linux  cuda 

4
流式多处理器,块和线程(CUDA)
CUDA内核,流式多处理器与块和线程的CUDA模型之间是什么关系? 什么映射到什么,什么并行化以及如何并行化?还有什么效率更高的方法,那就是最大化块数或线程数? 我目前的理解是每个多处理器有8个cuda内核。并且每个cuda核心将能够一次执行一个cuda块。并且该块中的所有线程都在该特定内核中按顺序执行。 它是否正确?
77 cuda  nvidia 


6
是否可以在AMD GPU上运行CUDA?
我想将自己的技能扩展到GPU计算中。我熟悉光线跟踪和实时图形(OpenGL),但是下一代图形和高性能计算似乎是在GPU计算或类似的技术中。 我目前在家用计算机上使用AMD HD 7870显卡。我可以为此编写CUDA代码吗?(我的直觉不是,但是自从Nvidia发布编译器二进制文件以来,我可能是错的)。 第二个更普遍的问题是,我从哪里开始进行GPU计算?我敢肯定这是一个经常被问到的问题,但是我所看到的最好的是从08'开始的,我认为从那以后该领域已经发生了很大变化。
76 cuda  gpu  gpgpu  nvidia  amd 

2
GPU编程,CUDA还是OpenCL?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 我是GPU编程的新手。我有一台装有NVIDIA GeForce GT 640卡的笔记本电脑。我面临两个难题,非常欢迎提出建议。 如果我选择CUDA-显然,Ubuntu或Windows CUDA更适合Windows,而在Ubuntu上安装可能是一个严重的问题。我看到一些博客文章声称在Ubuntu 11.10和Ubuntu 12.04上安装了CUDA 5 。但是,我无法让他们工作。同样,标准的CUDA教科书更喜欢在Windows域中工作,并且对于Unix / Ubuntu的安装和工作或多或少保持沉默。 CUDA或OpenCL-现在,这可能比我的第一个问题更棘手!我主要遇到使用CUDA / Nvidia的GPGPU项目,但是OpenCL可能是开源中的次佳选择,在Ubuntu中安装可能不会成为问题,尽管此处的一些建议将非常有用。如果我选择OpenCL而不选择CUDA,是否会牺牲任何功能? 有什么帮助或建议吗?

7
通过JNI在C和Java之间传递指针
目前,我正在尝试创建一个使用CUDA功能的Java应用程序。CUDA与Java之间的连接工作正常,但是我还有另一个问题,想问一下我对此是否正确。 当我从Java调用本机函数时,我将一些数据传递给它,这些函数计算出一些东西并返回结果。是否可以让第一个函数返回对此结果的引用(指针),我可以将其传递给JNI并调用另一个对结果进行进一步计算的函数? 我的想法是通过将数据保留在GPU内存中并仅将引用传递给它,以便其他功能可以使用它,从而减少往返于GPU的数据复制所带来的开销。 经过一段时间的尝试,我自己想,这是不可能的,因为在应用程序结束后(在这种情况下,当C函数终止时)指针被删除。这个对吗?还是我对C语言很不好而看不到解决方案? 编辑:好吧,将问题扩大一点(或更清楚地说):函数结束时是否由JNI本机函数分配的内存被释放了?或者在JNI应用程序结束或手动释放它之前,我是否仍可以访问它? 感谢您的输入 :)

1
nvidia-smi易失性GPU使用说明?
我知道这nvidia-smi -l 1将使GPU每秒使用一次(类似于以下内容)。但是,我希望您能解释一下Volatile GPU-Util真正的含义。那是使用的SM数量超过SM总数,占用率还是其他? +-----------------------------------------------------------------------------+ | NVIDIA-SMI 367.48 Driver Version: 367.48 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K20c Off | 0000:03:00.0 Off | 0 | | 30% 41C …

4
如何选择要在哪个GPU上运行作业?
在多GPU计算机中,如何指定CUDA作业应在哪个GPU上运行? 例如,在安装CUDA时,我选择安装,NVIDIA_CUDA-<#.#>_Samples然后运行了几个nbody模拟实例,但是它们都在一个GPU 0上运行;GPU 1完全处于空闲状态(使用监控watch -n 1 nvidia-dmi)。检查CUDA_VISIBLE_DEVICES使用 echo $CUDA_VISIBLE_DEVICES 我发现没有设置。我尝试使用设置 CUDA_VISIBLE_DEVICES=1 然后nbody再次运行,但它也进入了GPU 0。 我看着相关的问题,如何选择指定的GPU运行CUDA程序?,但deviceQuery命令不在CUDA 8.0 bin目录中。除之外$CUDA_VISIBLE_DEVICES$,我还看到其他文章引用了环境变量,$CUDA_DEVICES但是这些文章没有设置,也没有找到有关如何使用它的信息。 虽然与我的问题没有直接关系,nbody -device=1但是使用可以使应用程序在GPU 1上运行,但是使用nbody -numdevices=2不能在GPU 0和GPU 1上运行。 我正在使用bash shell,CentOS 6.8,CUDA 8.0、2个GTX 1080 GPU和NVIDIA驱动程序367.44在运行bash shell的系统上对此进行测试。 我知道在使用CUDA进行编写时,您可以管理和控制要使用的CUDA资源,但是在运行已编译的CUDA可执行文件时如何从命令行管理此资源?
71 cuda  nvidia 

3
何时调用cudaDeviceSynchronize?
何时cudaDeviceSynchronize真正需要调用该函数? 据我从CUDA文档中了解,CUDA内核是异步的,因此似乎我们应该cudaDeviceSynchronize在每次内核启动后调用。但是,我尝试了相同的代码(训练神经网络),无论有无cudaDeviceSynchronize,除了时间测量之前的代码。我发现我得到了相同的结果,但是速度提高了7-12倍(取决于矩阵大小)。 因此,问题是是否有任何理由需要使用cudaDeviceSynchronize时间测量。 例如: 在将数据从GPU复制回主机之前是否需要cudaMemcpy? 如果我做矩阵乘法 C = A * B D = C * F 我应该cudaDeviceSynchronize介于两者之间吗? 从我的实验看来,我没有。 为什么cudaDeviceSynchronize程序会这么慢?
69 cuda  gpu  gpgpu 

1
在不同的编译器上转换为void **
我一直在通过不同的编译器运行以下代码: int main() { float **a; void **b; b = a; } 从我已经能够收集,void **是不是一个普通的指针,这意味着从另一个指针任何转换不应该编译或至少抛出一个警告。但是,这是我的结果(全部在Windows上完成): gcc-如预期的那样发出警告。 g ++ -引发错误,如预期的那样(这是由于C ++的宽松输入造成的,对吧?) MSVC(cl.exe) -即使指定了/ Wall,也不会引发任何警告。 我的问题是:我是否遗漏了全部内容?是否有任何特定原因导致MSVC无法发出警告?MSVC 做转换时产生警告从 void **到float **。 还要注意的另一件事:如果我将其替换a = b为显式转换a = (void **)b,则所有编译器都不会发出警告。我认为这应该是无效的演员表,所以为什么不会有任何警告? 我问这个问题的原因是因为我开始学习CUDA并在官方编程指南(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-memory)中学习可以找到以下代码: // Allocate vectors in device memory float* d_A; cudaMalloc(&d_A, size); 应该执行对void **for 的隐式转换&d_A,因为的第一个参数cudaMalloc是类型void **。在整个文档中都可以找到类似的代码。这只是NVIDIA的草率工作,还是我又错过了什么?由于nvcc使用MSVC,因此代码编译时不会发出警告。
9 c++  c  cuda 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.