问题标签 [gpgpu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 并发,4个CUDA应用争抢GPU资源
如果有四个并发的 CUDA 应用程序在一个 GPU 中竞争资源以便他们可以将工作卸载到显卡上会发生什么?Cuda Programming Guide 3.1 提到有些方法是异步的:
- 内核启动
- 设备设备内存副本
- 64 KB 或更小的内存块的主机设备内存副本
- 由后缀为 Async 的函数执行的内存复制
- 内存集函数调用
它还提到,只要内核属于同一上下文,具有计算能力 2.0 的设备就能够同时执行多个内核。
这种类型的并发是否仅适用于单个 cuda 应用程序中的流,但在有完全不同的应用程序请求 GPU 资源时是不可能的?
这是否意味着并发支持仅在 1 个应用程序(上下文???)中可用,并且 4 个应用程序将仅以并发方式运行,方法可能因 CPU 中的上下文切换而重叠,但 4 个应用程序需要等待直到 GPU 被其他应用程序释放?(即从 app4 启动内核会等到从 app1 启动内核完成..)
如果是这样,这 4 个应用程序如何访问 GPU 资源而不需要长时间等待?
cuda - 编写一个有许多线程写入同一索引的 CUDA 内核?
我正在编写一些代码来激活 CUDA 上的神经网络,但我遇到了一个问题。我没有得到进入给定神经元的权重的正确总和。
所以这里是内核代码,我将尝试用变量更清楚地解释它。
首先,网络中的连接数是cLength
。对于每个连接,都有一个源神经元和一个目标神经元,以及该连接的权重。SourceTargetArray
包含该信息。所以 index i
ofsourceTargetArray
是连接的源神经元索引i
,和连接的目标神经元索引i
。包含权重信息(因此weightArray
index对应于 connection i
)。weightArray
i
如您所见,SumArray
这是我存储总和的地方。因此内核将sumArray
(在目标神经元的连接索引处i
)增加连接权重的绝对值i
。直观地说,对于到神经元的所有传入连接,将所有权重相加。这就是我试图用这个内核做的所有事情。最终,我将使用这个总和对权重进行归一化。
问题是它是错误的。我已经连续完成了这个,答案是不同的。答案不同,通常相差约 12-15 倍(因此正确答案将是 700.0,而我得到的结果在 50 年代范围内)。
您可以看到我添加了__threadfence()
(并__threadfence_block()
试图确保不是每个线程同时完成写入)。我不确定这是否是我的代码的问题。我确保权重数组与我测试的串行版本相同,并且源/目标信息也相同。我究竟做错了什么?
编辑:作为参考,__threadfence()
CUDA Programming Guide v3.1 附录 B.5 Memory Fence Functions 中描述了使用
c++ - opengl图像处理性能差
我正在尝试使用 opengl 进行一些简单的图像处理。由于我找不到任何可以做到这一点的好图书馆,我一直在尝试做自己的解决方案。
我只是想在 gpu 上合成一些图像,然后将它们读回来。然而,我的实现的性能似乎几乎等于它在 cpu 上所做的......出了点问题......
我试图遵循我在网上找到的最佳实践。但它仍然做错了什么。
我试过删除所有不相关的代码。
关于此实现为何性能不佳的任何想法?
编辑:
做了一些分析。大多数 cpu 时间似乎都花在了 begin_write();
不过看不出有什么不妥...
cuda - GPGPU、OpenCL、CUDA、ATI 流
请告诉我 GPGPU 已经存在哪些技术以及哪些硬件供应商实施了 GPGPU?
从早上开始,我一直在阅读各种网站上的文章,我变得很困惑。
sdk - 尝试在 NVIDIA 的 SDK 模板中混合 OpenCL 和 CUDA
我在设置一个实验时遇到了困难,我在设备上使用 CUDA 分配内存,将该指针指向设备上的内存,在 OpenCL 中使用它,然后返回结果。我想看看这是否可能。我很难让一个 CUDA 项目工作,所以我只是在他们的 SDK 中使用了 Nvidia 的模板项目。在 makefile 中,我将 -lOpenCL 添加到 common.mk 的 libs 部分。当我这样做时一切都很好,但是当我添加#include <CL/cl.h>
到 template.cu 以便我可以开始进行 OpenCL 调用时,我得到了 100 多个错误。它们看起来都与此相似,但末尾有不同的函数名称:
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334):错误:标识符“__builtin_ia32_cmpeqps”未定义
我很难弄清楚为什么。如果可以的话请帮忙。此外,如果有更简单的方法来设置能够调用 CUDA 和 OpenCL API 的项目,请告诉我。
opengl - 使用 GPU 进行位图转换
我不知道这是否是正确的论坛。无论如何,这是问题所在。在我们的一个应用程序中,我们显示医学图像,并在它们之上显示一些算法生成的位图。真正的位图是 16 位灰度位图。由此我们生成一个基于查找表的颜色位图,例如
显示器运行良好,适用于 256x256 的小图像。但是当显示区域变大比如 1024x1024 时,灰度到彩色位图的转换需要一段时间,并且交互不再平滑。最近,我听到了很多关于通用 GPU 编程的信息。在我们的部署中,我们有高端 (Nvidia QuadroFX) 显卡。
我们的应用程序是使用 .Net/C# 构建的,如果需要,我也可以添加一点点 C++/CLI。现在我的问题是这个位图转换可以卸载到图形处理器吗?我应该在哪里寻找进一步的阅读?
c - CUDA 内核在 2 个不同的 GPU 上产生不同的结果(GeForce 8600M GT 与 Quadro FX 770M)
我一直在研究 AES CUDA 应用程序,并且我有一个在 GPU 上执行 ECB 加密的内核。为了确保算法的逻辑在并行运行时不会被修改,我发送一个由 NIST 提供的已知输入测试向量,然后从主机代码将输出与 NIST 提供的已知测试向量输出与断言进行比较。我已经在我的 8600M GT NVIDIA GPU 上运行了这个测试。这是在 Windows 7 下运行的,驱动程序版本为 3.0。在这个场景下,一切都很完美,断言成功。
现在,当应用程序在 Quadro FX 770M 上运行时。启动相同的应用程序,发送相同的测试向量,但得到的结果不正确,断言失败!!。这运行在具有相同驱动程序版本的 Linux 上,内核由 256 个线程执行。在内核中并跳过算术预先计算的 256 个元素的查找表。这些表最初加载到全局内存中,启动内核的 256 个线程中的 1 个线程协作加载查找表的 1 个元素,并将该元素移动到共享内存中的新查找表中,从而减少了访问延迟。
最初,我考虑了由于 GPU 之间的时钟速度差异导致的同步问题。因此,可能是线程正在使用仍未加载到共享内存中的值,或者以某种方式仍未处理的值,从而使输出混乱并最终使其不正确。
在这里声明了已知的测试向量,所以基本上它们被发送到负责设置内核的 AES_set_encrption
在这里,setup 函数负责分配内存,调用内核并将结果发送回 hos。请注意,我在发送回主机之前进行了同步,所以此时一切都应该完成,这让我认为问题出在内核中。
最后在内核中,我计算了一组 AES 轮次。因为我认为同步问题在内核中,所以我设置了 __syncthreads(); 在每一轮或计算操作之后,以确保所有线程同时移动,因此不会评估未计算的值..但这仍然没有解决问题..
这是我使用工作正常的 8600M GT GPU 时的输出:
AES 256 位密钥
NIST 测试向量:
原语:6bc1bee22e409f96e93d7e117393172a
密钥:603deb1015ca71be2b73aef0857d7781
密文:f3eed1bdb5d2a03c64b5a7e3db181f8
GPU 加密:f3eed1bdb5d2a03c64b5a7e3db181f8
测试状态:通过
这是我使用 Quadro FX 770M 失败的时候!!
AES 256 位密钥 NIST 测试向量:
原语:6bc1bee22e409f96e93d7e117393172a
密钥:603deb1015ca71be2b73aef0857d7781
密文:f3eed1bdb5d2a03c64b5a7e3db181f8
GPU 加密:c837204eb4c1063ed79c77946893b0
Generic assert memcmp (out, testCipherText, 16) == 0 已抛出错误
测试状态:失败
即使处理相同的内核,两个 GPU 计算不同结果的原因可能是什么???我将不胜感激任何提示或故障排除任何人可以给我或任何步骤以解决此问题
提前致谢!!
cuda - GPGPU矩阵加法问题
我有巨大的矩阵,我希望矩阵的输出与输入矩阵的大小相同,只是每个单元格从相邻单元格中获取数字的总和。
你能指导我如何使用 CUDA 在 GPGPU 平台上处理它吗?
opengl-es - 是否可以直接在嵌入式平台上访问 OpenGL ES 2.0 纹理内存?
我正在基于 OMAP 3530 的平台上处理一些 GP-GPU 代码,并且由于 openGL ES 2.0 中缺少 glGetTexImage 函数而受到阻碍。由于该平台为 GPU 使用集成内存,我想知道是否有任何方法可以直接获取指向内存中分配纹理的指针。这样我就可以读回我的数据,而不必将其推入帧缓冲区,这会丢弃大量数据。
.net - 有没有可能在 F sharp 下使用 CUDA 编写 GPU 应用程序?
我对使用 F# 进行数值计算很感兴趣。如何在 F# 下使用 NVIDIA 的 CUDA 标准访问 GPU?