标签: gpgpu

GPU上的整数计算

对于我的工作来说,进行整数计算特别有趣,这显然不是GPU的用途.我的问题是:现代GPU是否支持高效的整数运算?我意识到这应该很容易为自己弄清楚,但我发现相互矛盾的答案(例如),所以我认为最好问.

另外,GPU上有任意精度整数的库/技术吗?

optimization performance integer gpgpu

18
推荐指数
1
解决办法
8830
查看次数

GPU中缓存未命中的变化

我一直在玩一个访问7个全局内存缓冲区的OpenCL内核,对值做一些事情并将结果存储回第8个全局内存缓冲区.正如我所观察到的,随着输入大小的增加,L1缓存未命中率(=未命中(未命中+命中))变化很大.我找不到这种变化的来源.此处的输入大小表示全局工作项的数量(2的幂和工作组大小的倍数).工作组大小的数量仍为256.

这些是结果.这些显示了L1缓存未命中率.从4096个工作项(16个工作组)开始.

0.677125
0.55946875
0.345994792
0.054078125
0.436167969
0.431871745
0.938546224
0.959258789
0.952941406
0.955016479
Run Code Online (Sandbox Code Playgroud)

分析器说它每个线程使用18个寄存器.这是代码(函数TTsum()应该只做一堆依赖的超越操作,所以它与缓存无关)我猜:

float TTsum(float x1, float x2, float x3, float x4, float x5, float x6, float x7)
{
        float temp = 0;
        for (int j = 0; j < 2; j++)
                temp = temp +  x1 + (float)x2 + x3 + x4 + x5 + x6 + x7;
        temp = sqrt(temp);
        temp = exp(temp);
        temp = temp / x1;
        temp = temp / (float)x2;
        for (int j = 0; …
Run Code Online (Sandbox Code Playgroud)

gpu gpgpu opencl

18
推荐指数
1
解决办法
1480
查看次数

如何在OpenCL中使用固定内存/映射内存

为了减少我的应用程序从主机到设备的传输时间,我想使用固定内存.NVIDIA的最佳实践指南建议使用以下代码映射缓冲区并写入数据:

cDataIn = (unsigned char*)clEnqueueMapBuffer(cqCommandQue, cmPinnedBufIn, CL_TRUE,CL_MAP_WRITE, 0, memSize, 0, NULL, NULL, NULL);

for(unsigned int i = 0; i < memSize; i++) 
{ 
    cDataIn[i] = (unsigned char)(i & 0xff); 
}

clEnqueueWriteBuffer(cqCommandQue, cmDevBufIn, CL_FALSE, 0, 
szBuffBytes, cDataIn, 0, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

英特尔的优化指南建议使用对clEnqueueMapBuffer和clEnqueueUnmapBuffer的调用,而不是调用clEnqueueReadBuffer或clEnqueueWriteBuffer.

使用固定内存/映射内存的正确方法是什么?是否有必要使用enqueueWriteBuffer写入数据或者enqueueMapBuffer是否足够?

另外,CL_MEM_ALLOC_HOST_PTR和CL_MEM_USE_HOST_PTR之间有什么区别?

memory gpu data-transfer gpgpu opencl

18
推荐指数
1
解决办法
6119
查看次数

CUDA的任何Lisp扩展?

我刚才注意到WD Hillis的Connection-Machine的第一批语言之一是*Lisp,它是具有并行结构的Common Lisp的扩展.Connection-Machine是一台具有SIMD架构的大规模并行计算机,与现代GPU卡非常相似.

因此,我希望将*Lisp改编为GPGPU - 可能是nVidia CUDA,因为它是最先进的事实标准 - 非常自然.

到目前为止,除了用于C/C++的nVidia SDK之外,我还发现了Python环境PyCUDA.有没有人听说过Lisp?

lisp parallel-processing cuda gpgpu simd

17
推荐指数
2
解决办法
4771
查看次数

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

据我所知,GPU在warp之间切换以隐藏内存延迟.但我想知道在哪种条件下,经线会被切换掉?例如,如果warp执行加载,并且数据已经存在于缓存中.那么warp是否已经关闭或继续下一次计算?如果连续两次添加会发生什么?谢谢

cuda gpu gpgpu opencl

17
推荐指数
1
解决办法
7578
查看次数

GPU上是否有内存保护

我对GPU没有太多经验,所以请原谅我的无知.如今,GPU被用作GPGPU用于通用编程.但我想知道GPU是否具有内存保护和虚拟化机制.我的意思是,例如,你在GPU上运行两个内核,如果你没有vritualization和内存保护,可以很容易地写入另一个地址.这个问题怎么解决了?是否已经完成了提高GPU上运行的代码可靠性的工作?可以通过一些沙盒机制同时运行两个内核吗?

c memory-management gpu gpgpu

17
推荐指数
1
解决办法
820
查看次数

为什么CUDA代码在NVIDIA Visual Profiler中运行得如此之快?

在NVIDIA Visual Profiler(运行相同的 .exe)中,在命令行上花费超过1分钟的代码片段在几秒钟内完成.所以自然的问题是为什么?命令行是否有问题,或者Visual Profiler是否做了不同的事情并且没有真正执行命令行中的所有内容?

我正在使用CUBLAS,Thrust和cuRAND.

顺便说一句,最近我的机器上的编译代码明显减慢,甚至以前运行得很快的旧代码,因此我开始怀疑.

更新:

  • 我已经检查过命令行和Visual Profiler上的计算输出是否相同 - 即在两种情况下都运行了所有必需的代码.
  • GPU-鲨鱼表示,我的性能状态不变的P0,当我从命令行切换到Visual探查.
  • 但是,使用Visual Profiler运行时,GPU使用率报告为0.0%,但在命令行运行时,报告率高达98%.
  • 此外,Visual Profiler使用的内存 少得多.当运行命令行时,任务管理器指示使用650-700MB内存(第一次cudaFree(0)调用时出现峰值).在Visual Profiler中,这个数字下降到~100MB.

performance cuda gpgpu

17
推荐指数
2
解决办法
2300
查看次数

基本GPU应用程序,整数计算

长话短说,我已经完成了几个交互式软件的原型.我现在使用pygame(python sdl包装器),一切都在CPU上完成.我现在开始将它移植到C,同时寻找现有的可能性来使用一些GPU功能来从冗余操作中吸收CPU.但是,我找不到一个好的"指南",在我的情况下,我应该选择哪些确切的技术/工具.我只是阅读了大量的文档,它很快就耗尽了我的智力.我不确定它是否可能,所以我很困惑.
在这里,我对我开发的典型应用程序框架做了一个非常粗略的草图,但考虑到它现在使用GPU(注意,我几乎没有关于GPU编程的实用知识).仍然重要的是必须精确保留数据类型和功能.这里是:
在此输入图像描述

因此F(A,R,P)是一些自定义函数,例如元素替换,重复等.函数在程序生命周期中可能是恒定的,矩形的形状通常不等于A形状,因此它不是就地计算.所以它们只是根据我的功能生成的.F的例子:A的重复行和列; 用替换表中的值替换值; 将一些瓷砖组成单个阵列; 关于A值等的任何数学函数.如上所述,这一切都可以在CPU上轻松完成,但应用程序必须非常流畅.在纯Python中BTW在添加了几个基于numpy数组的视觉特性后变得无法使用.Cython有助于快速定制功能,但源代码已经是一种沙拉.

题:

  • 这个架构是否反映了一些(标准)技术/ dev.tools?

  • CUDA是我要找的吗?如果是,那么我的应用程序结构一致的一些链接/示例将是很好的.

我意识到,这是一个很大的问题,所以如果有帮助,我会提供更多细节.


更新

下面是我的位图编辑器原型的两个典型计算的具体示例.因此编辑器使用索引,数据包括具有相应位掩码的层.我可以确定图层和蒙版的大小与图层大小相同,例如,所有图层的大小相同(1024 ^ 2像素 = 32位值为4 MB).我的调色板就是1024个元素(4个千字节,32 bpp格式).
考虑我现在要做两件事:

第1步.我想将所有图层拼合在一起.假设A1是默认层(背景),层'A2'和'A3'有掩码'm2'和'm3'.在python我写道:

from numpy import logical_not
...
Result = (A1 * logical_not(m2) + A2 * m2) * logical_not(m3) + A3 * m3
Run Code Online (Sandbox Code Playgroud)

由于数据是独立的,我认为它必须与并行块的数量成比例加速.

第2步.现在我有一个数组,并希望用一些调色板"着色"它,所以它将是我的查找表.正如我现在看到的,查找表元素的同时读取存在问题. 在此输入图像描述

但我的想法是,可能只需复制所有块的调色板,因此每个块都可以读取自己的调色板?像这样: 在此输入图像描述

c gpu gpgpu

17
推荐指数
1
解决办法
715
查看次数

GPGPU上的财务应用程序

我想知道使用GPGPU可以实现哪种财务应用程序.我知道使用CUDA在GPGPU上使用蒙特卡罗模拟进行期权定价/股票价格估算.有人可以枚举将GPGPU用于财务领域的任何应用程序的各种可能性,

finance cuda gpgpu

16
推荐指数
1
解决办法
4944
查看次数

GPU包的持续集成服务?

持续集成服务非常适合持续测试各种语言包的更新.其中包括Travis-CI,JenkinsShippable等服务.但是,正如我已经探索过这些不同的服务,我还没有找到一个提到支持利用GPU(NVIDIA,AMD或其他)的软件的服务.有谁知道是否存在任何此类服务?

我意识到这不是一个严格的编程问题,但我搜索了这个网站和其他论坛,但无法找到答案.也许当前没有这样的服务存在,但我确信这些信息对GPU程序员(CUDA和OpenCL等)都很有价值.

continuous-integration gpgpu

16
推荐指数
1
解决办法
2389
查看次数