gpgpu相关内容

使用CUDA Profiler nvprof进行内存访问

我正在使用nvprof来获取以下CUDA代码的全局内存访问次数。内核中的负载数为36(访问d_In数组),内核中的存储数为36 + 36(用于访问d_Out数组和d_rows数组)。因此,全局内存加载的总数为36,全局内存存储的数量为72。但是,当我使用nvprof CUDA探查器对代码进行探查时,它将报告以下内容:(基本上,我想计算对全局内存访问的计算(CGMA)比率) 1 gld_tr ..
发布时间:2020-10-13 00:47:45 其他开发

如何找到活跃的SM?

是否可以通过任何方式了解空闲/活动SM的数量?还是至少要读取每个SM的电压/功率或温度值,才能知道其是否正常工作? (在gpu设备上执行某些作业时实时)。 %smid帮助我了解了每个SM的ID。 感谢和问候, Rakesh 解决方案 CUDA分析工具接口( CUPTI )包含事件API可以对GPU PM计数器进行运行时采样。 CUPTI SDK随CUDA Toolkit一起提 ..
发布时间:2020-10-13 00:47:32 其他开发

有效地将无符号值除以2的幂,取整-在CUDA中

我当时正在阅读: ,我想知道这是什么CUDA中最快的方法。当然,“快速”是指吞吐量(该问题还解决了彼此之间后续调用的情况)。 对于 lg()函数(除数的以2为底的对数),假设我们有: 模板 __device__ int find_first_set(T x); 模板 __device__ int find_first_set( ..
发布时间:2020-10-13 00:45:43 其他开发

在一个GPU上运行多个CUDA应用程序

CUDA文档没有具体说明可以共享一个GPU的CUDA进程数。例如,如果我由同一用户在系统中仅安装了一张GPU卡的情况下启动了多个CUDA程序,那会有什么效果?会保证执行的正确性吗?在这种情况下,GPU如何安排任务? 解决方案 来自独立主机进程的CUDA活动通常会创建独立的CUDA 上下文,每个过程一个。因此,从单独的主机进程启动的CUDA活动将在同一设备上的单独CUDA上下文中进行。 ..
发布时间:2020-10-13 00:39:33 其他开发

何时调用cudaDeviceSynchronize?

何时真正调用 cudaDeviceSynchronize 函数? 据我从CUDA文档中了解,CUDA内核是异步的,因此看来我们应该调用 cudaDeviceSynchronize 每次启动内核后。但是,我尝试了相同的代码(训练神经网络),有没有任何 cudaDeviceSynchronize ,除了时间测量之前的代码。我发现我得到了相同的结果,但是速度提高了7-12倍(取决于矩阵大小)。 ..
发布时间:2020-10-13 00:35:50 其他开发

GPGPU编程仅允许执行SIMD指令吗?

GPGPU编程仅允许执行SIMD指令吗? 如果是这样,那么重新编写一个 设计为在通用CPU上运行以在GPU上运行的算法,一定是一项繁琐的任务?算法中是否还有可以转换为SIMD架构的 模式? 解决方案 嗯,这不太准确GPGPU仅支持SIMD执行。许多GPU具有一些非SIMD组件。但是,总的来说,要充分利用GPU,您需要运行SIMD代码。 但是,您并不一定要编写SIMD指令。即GP ..
发布时间:2020-10-11 00:12:01 其他开发

使用Nvidia的CUDA压缩库

有人知道使用NVIDIA的 CUDA库? 我在想,是否可以利用大量并行任务(例如压缩)的算法不会在图形卡上运行比在双核或四核CPU上快得多。 您如何看待这种方法的优缺点? 解决方案 不知道有人这样做并将其公开。只是恕我直言,这听起来不太有希望。 正如Martinus所指出的,某些压缩算法是高度串行的。 LZW之类的块压缩算法可以通过对每个块进行独立编码来并行化。压缩一棵大 ..
发布时间:2020-10-07 02:17:28 其他开发

如何在运行时生成,编译和运行CUDA内核

好吧,我有一个很棘手的问题:) 让我们从我拥有的东西开始: 数据,大​​量数据,已复制到GPU 程序,由CPU(主机)生成,需要对该数组中的每个数据进行评估 程序更改非常频繁,可以生成为CUDA字符串,PTX字符串或其他形式(? ),并且每次更改后都需要重新评估 我想要的是:基本上只是想做出这尽可能有效(快速),例如。避免将CUDA编译为PTX。解决方案甚至可以完全是特定于设 ..
发布时间:2020-10-06 20:40:19 其他开发

使部分(而非全部)(CUDA)内存访问未缓存

我刚刚注意到,完全可能有(CUDA内核)内存访问未缓存(请参见例如有关此问题的答案)。 可以做到吗... 在运行时而不是在编译时? 仅用于写而不是用于读写? 解决方案 仅当您单独编译该内核时,因为这是指令级功能,通过代码生成启用。您还可以使用内联PTX汇编器为内核中的特定加载操作发出 ld.global.cg 指令[请参见此处(了解详情)。 不,它是PTX的指令级功能。 ..
发布时间:2020-09-28 06:25:55 其他开发

GPU组如何进入扭曲/波阵面?

我的理解是,warp是在运行时通过任务调度程序定义的一组线程,CUDA的性能关键部分是warp中的线程差异,有没有办法很好地猜测硬件的方式会在线程块内构造经线吗? 例如,我已经在一个线程块中启动了一个具有1024个线程的内核,那么线程的排列方式如何,我能否从线程索引中得知(或至少可以作一个很好的猜测)? 通过这样做,可以最大程度地减少给定经线内线程的差异. 解决方案 warp中 ..
发布时间:2020-07-31 01:54:04 其他开发

2D/3D CUDA块如何划分为变形?

如果我从一个具有尺寸块的网格开始我的内核: dim3 block_dims(16,16); 现在如何将网格块拆分为扭曲?这样的块的前两行是形成一个翘曲,还是前两列,或者是任意排序的? 假定GPU计算能力为2.0. 解决方案 在块内按顺序对线程进行编号,以使threadIdx.x变化最快,然后threadIdx.y变化最快,而threadIdx.z变化最快.这在功能上与多维数 ..
发布时间:2020-07-31 01:52:55 其他开发

在Unity 3D中从RGBAFloat纹理读取浮点值

似乎人们对浮点纹理的讨论不多.我用它们进行了一些计算,然后将结果转发到另一个曲面着色器(以获得某些特定的变形),这很酷,如果我在着色器中消化结果,它总是对我有用,但是这次我需要获取这些值CPU这样,我就得到一个带有结果的float []数组(在调用Graphics.Blit填充浮点纹理之后).如何实现? 顺便提一句:到目前为止,我看到的唯一使用此方法的人是Keijiro,例如在他的Kvant ..
发布时间:2020-07-26 03:56:05 其他开发

“全球负载效率"超过100%

我有一个CUDA程序,其中一个块的线程在多次迭代中读取长数组的元素,并且内存访问几乎完全合并.当我分析时,全局负载效率超过100%(取决于输入,介于119%和187%之间). 全局负载效率的描述是"全局内存负载吞吐量与所需的全局内存负载吞吐量之比."这是否意味着我经常使用二级缓存和内存访问会从中受益吗? 我的GPU是GeForce GTX 780(开普勒架构). 解决方案 我在NVI ..
发布时间:2020-07-24 04:44:28 其他开发

通过CPU读取GPU资源数据

这些天,我正在学习DirectX11.而且我一直被困在“计算着色器"部分. 所以我提出了四个资源和三个对应的视图. 不可变的输入缓冲区= {1,1,1,1,1}/SRV 不可变的输入缓冲区= {2,2,2,2,2}/SRV 输出缓冲区/无人机 用于读取/无视图的登台缓冲区 我成功地创建了所有东西,并调度了cs函数,并将数据从输出缓冲区复制到登台缓冲区,然后我读取/检查了数据 ..
发布时间:2020-07-21 19:34:06 其他开发

HLSL中的3D缓冲区?

我想用3D数组的形式向HLSL发送一系列整数.我已经尝试这样做了几天,但没有任何收获.我试图将缓冲区彼此打包(StructuredBuffer>>),但是它根本行不通.而且我需要调整大小,所以我不能在struct中使用数组.我该怎么办? 编辑:为了进一步阐明我在这里要做的事情,这是一个医疗程序.当您扫描身体时,会生 ..
发布时间:2020-07-12 22:22:38 C#/.NET

结合使用GPU分析器(例如CodeXL)和PyOpenCL

我有一个复杂的PyOpenCL应用程序,其中包含许多缓冲区创建,内核模板等.我想在GPU上对我的应用程序进行配置,以查看我的情况的瓶颈所在. 是否可以在PyOpenCl应用程序中使用某些gpu分析器?例如CodeXL. P.S.我知道事件分析,但还不够. 解决方案 是的,有可能.在这里查看: http://devgurus.amd.com/message/1282742 ..
发布时间:2020-07-04 19:05:33 其他开发