Questions tagged «gpgpu»

24
最快的固定长度6 int数组
在回答另一个堆栈溢出问题(这个问题)时,我偶然发现了一个有趣的子问题。对6个整数数组进行排序的最快方法是什么? 由于问题非常低: 我们不能假设库可用(并且调用本身有成本),只能使用普通C语言 为了避免排空指令流水线(具有非常高的成本),我们也许应该尽量减少分支机构,跳跃,和所有其他类型的控制流断裂(像那些隐藏在背后的序列点&&或||)。 房间受到限制,尽量减少寄存器和内存使用是一个问题,理想情况下,最好在适当的位置进行排序。 确实,这个问题是一种高尔夫,其目标不是最小化源代码长度,而是执行时间。我将其称为“ Zening”代码,如Michael Abrash所著的《Zen of Code Optimization》及其续集的书名中所用。 至于为什么有趣,它分为几层: 该示例简单易懂,易于度量,不涉及太多C技能 它显示了针对该问题选择良好算法的效果,还显示了编译器和基础硬件的效果。 这是我的参考(天真,未优化)实现和测试集。 #include <stdio.h> static __inline__ int sort6(int * d){ char j, i, imin; int tmp; for (j = 0 ; j < 5 ; j++){ imin = j; for (i = j + 1; i < …

2
CUDA块/线程/线程如何映射到CUDA内核?
我已经使用CUDA几周了,但是我对块/线程/线程的分配有一些疑问。 我正在从教学角度(大学项目)研究体系结构,因此达到最佳性能不是我的关注。 首先,我想了解一下我是否明白这些事实: 程序员编写内核,并在线程块网格中组织其执行。 每个块都分配给一个流多处理器(SM)。分配后,便无法迁移到另一个SM。 每个SM将自己的块拆分为Warp(当前最大为32个线程)。扭曲中的所有线程均在SM的资源上同时执行。 线程的实际执行由SM中包含的CUDA核心执行。线程和核心之间没有特定的映射。 如果warp包含20个线程,但是当前只有16个内核可用,则warp将无法运行。 另一方面,如果一个块包含48个线程,则它将拆分为2个扭曲,并在有足够内存可用的情况下并行执行。 如果线程在内核上启动,则由于内存访问或长时间浮点操作而被暂停,则其执行可以在其他内核上恢复。 他们正确吗? 现在,我有一个GeForce 560 Ti,因此根据规格它配备了8个SM,每个包含48个CUDA内核(总共384个内核)。 我的目标是确保体系结构的每个核心都执行SAME指令。假设我的代码不需要比每个SM中可用的更多的寄存器,我想到了不同的方法: 我创建了8个块,每个块有48个线程,因此每个SM都有1个块要执行。在这种情况下,这48个线程是否将在SM中并行执行(利用所有48个可用的内核)? 如果我启动64个6线程块,会有什么区别?(假设它们将在SM之间平均映射) 如果我将GPU“淹没”在计划的工作中(例如,创建1024个线程块,每个线程有1024个线程),则可以合理地假设所有内核将在某个时刻使用,并且将执行相同的计算(假设线程永不停止)? 有什么方法可以使用探查器检查这些情况吗? 这个东西有参考吗?我阅读了《 CUDA编程指南》以及“对大型并行处理器进行编程”和“ CUDA应用程序设计与开发”中有关硬件体系结构的章节;但是我找不到确切的答案。

14
通过c#使用GPU
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 改善这个问题 我试图从网格中获取更多处理能力。 我正在使用所有的cpus /核心,是否可以将GPU与C#结合使用。 有人知道任何库或获得任何示例代码吗?
135 c#  gpu  gpgpu 

10
NVIDIA vs AMD:GPGPU性能
我想听听有编码经验的人。我自己,我只有NVIDIA的经验。 NVIDIA CUDA似乎比竞争对手更受欢迎。(仅在此论坛上计算问题标记,“ cuda”优于“ opencl” 3:1,“ nvidia”优于“ ati” 15:1,根本没有“ ati-stream”标记)。 另一方面,根据Wikipedia所述,ATI / AMD卡应具有更大的潜力,尤其是每美元。迄今为止,市场上最快的NVIDIA卡GeForce 580(500美元)的额定单精度TFlops为1.6。AMD Radeon 6970的价格为370美元,额定值为2.7TFlops。580在772 MHz下具有512个执行单元。6970在880 MHz下具有1536个执行单元。 AMD相对于NVIDIA的纸面优势有多现实,并且可能会在大多数GPGPU任务中实现?整数任务会怎样?
105 cuda  opencl  gpgpu  nvidia  ati 

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

10
OpenGL vs. OpenCL,选择哪个,为什么选择?
哪些功能使OpenCL可以在GLSL和GLSL上进行计算,从而成为唯一的选择?尽管图形相关的术语和不切实际的数据类型,OpenGL是否有真正的警告? 例如,可以通过使用其他纹理将a渲染到纹理来完成并行函数评估。缩小操作可以通过迭代渲染越来越小的纹理来完成。另一方面,不可能以任何有效的方式进行随机写访问(唯一的方法是通过纹理驱动的顶点数据渲染三角形)。OpenCL有可能吗?OpenGL无法实现的其他功能?
78 opengl  opencl  gpgpu 

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,是否会牺牲任何功能? 有什么帮助或建议吗?

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 …

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