我想听听有两种编码经验的人的意见.我自己,我只有NVIDIA的经验.
NVIDIA CUDA似乎比竞争对手更受欢迎.(只计算这个论坛上的问题标签,'cuda'优于'opencl'3:1,'nvidia'优于'ati '15:1,并且根本没有'ati-stream'标签.
另一方面,根据维基百科,ATI/AMD显卡应该具有更大的潜力,特别是每美元.目前市场上最快的NVIDIA显卡,GeForce 580(500美元),评级为1.6单精度TFlops.AMD Radeon 6970的售价为370美元,售价为2.7 TFlops.580具有512个执行单元,772 MHz.6970具有1536个执行单元,频率为880 MHz.
AMD相对于NVIDIA的纸张优势有多现实,是否可能在大多数GPGPU任务中实现?整数任务会发生什么?
这是一个关于如何确定CUDA网格,块和线程大小的问题.这是对此处发布的问题的另一个问题:
在此链接之后,talonmies的答案包含一个代码片段(见下文).我不理解评论"通常由调整和硬件约束选择的值".
我没有找到一个很好的解释或澄清,在CUDA文档中解释了这一点.总之,我的问题是如何在给定以下代码的情况下确定最佳块大小(=线程数):
const int n = 128 * 1024;
int blocksize = 512; // value usually chosen by tuning and hardware constraints
int nblocks = n / nthreads; // value determine by block size and total work
madd<<<nblocks,blocksize>>>mAdd(A,B,C,n);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我从上面的链接开始我的问题,因为它部分回答了我的第一个问题.如果这不是在Stack Overflow上提问的正确方法,请原谅或建议我.
我正在尝试监控使用cuda和MPI的进程,有什么方法可以做到这一点,比如命令"top"但是监视GPU呢?
任何人都可以描述之间的差异__global__
和__device__
?
我应该何时使用__device__
,何时使用__global__
?
图形处理单元(GPGPU)上的通用计算是一种非常有吸引力的概念,可以利用GPU的强大功能进行任何类型的计算.
我喜欢使用GPGPU进行图像处理,粒子和快速几何操作.
现在看来,这个领域的两个竞争者似乎是CUDA和OpenCL.我想知道:
任何真实世界的经验/例子/战争故事都值得赞赏.
为了调试CUDA代码和检查兼容性,我需要找出我安装的GPU的nvidia驱动程序版本.我找到了如何获得cuda版本?但这对我没有帮助.
我一直在阅读CUDA和OpenCL的编程指南,我无法弄清楚银行冲突是什么.他们只是倾向于如何解决问题而不详细说明主题本身.任何人都可以帮我理解吗?如果帮助是在CUDA/OpenCL的背景下,或者只是计算机科学中的银行冲突,我没有偏好.
我在编译CUDA SDK附带的一些示例时遇到了麻烦.我已经安装了开发人员驱动程序(版本270.41.19)和CUDA工具包,最后是SDK(两者都是4.0.17版本).
最初它根本没有编译:
error -- unsupported GNU version! gcc 4.5 and up are not supported!
Run Code Online (Sandbox Code Playgroud)
我发现81行负责:/usr/local/cuda/include/host_config.h并将其更改为:
//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)
Run Code Online (Sandbox Code Playgroud)
从那时起,我只得到了一些编译的例子,它停止了:
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,
from /usr/include/c++/4.6/ios:43,
from /usr/include/c++/4.6/ostream:40,
from /usr/include/c++/4.6/iterator:64,
from /usr/local/cuda/include/thrust/iterator/iterator_categories.h:38,
from /usr/local/cuda/include/thrust/device_ptr.h:26,
from /usr/local/cuda/include/thrust/device_malloc_allocator.h:27,
from /usr/local/cuda/include/thrust/device_vector.h:26,
from lineOfSight.cu:37:
/usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr-default.h:251:1: error: pasting "__gthrw_" and "/* Android's C library does not provide pthread_cancel, check …
Run Code Online (Sandbox Code Playgroud) 我注意到一些较新的TensorFlow版本与较旧的CUDA和cuDNN版本不兼容.是否存在兼容版本的概述,甚至是官方测试组合的列表?我在TensorFlow文档中找不到它.
当我使用固定内存进行CUDA数据传输时,我观察到数据传输的大幅加速.在linux上,实现此目标的底层系统调用是mlock.从mlock的手册页中,它声明锁定页面可以防止它被换出:
mlock()锁定从addr开始并继续len字节的地址范围内的页面.当调用成功返回时,包含指定地址范围一部分的所有页面都保证驻留在RAM中;
在我的测试中,我在我的系统上有一些可用内存,因此从来没有任何风险可以将内存页面换掉,但我仍然观察到加速.谁能解释一下这里到底发生了什么?,非常感谢任何见解或信息.