问题标签 [cuda]
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# - CUDA 驱动程序 API 与 CUDA 运行时
编写 CUDA 应用程序时,您可以在驱动程序级别或运行时级别工作,如图所示(库是 CUFFT 和 CUBLAS 用于高级数学):
(来源:tomshw.it)
我假设两者之间的权衡是提高低级 API 的性能,但以增加代码复杂性为代价。具体的区别是什么?有什么重要的事情是你不能用高级 API 做的?
我正在使用 CUDA.net 与 C# 进行互操作,它是作为驱动程序 API 的副本构建的。这鼓励在 C# 中编写大量相当复杂的代码,而使用运行时 API 的 C++ 等效代码会更简单。这样做有什么好处吗?我可以看到的一个好处是更容易将智能错误处理与其他 C# 代码集成。
c# - 如何阻塞直到异步作业完成
我正在开发一个 C# 库,它使用 NVIDIA 的 CUDA 将某些工作任务卸载到 GPU。一个例子是使用扩展方法将两个数组相加:
这段代码中的工作是在 GPU 上完成的。但是,我希望它异步完成,这样只有在需要结果时才会在 CPU 块上运行代码(如果结果尚未在 GPU 上完成)。为此,我创建了一个隐藏异步执行的 ExecutionResult 类。在使用中,它看起来如下:
在最后一行,如果数据已经准备好,程序会阻塞。我不确定在 ExecutionResult 类中实现这种阻塞行为的最佳方法,因为我对同步线程和这类事情不是很有经验。
传递给构造函数的 Action 是在 GPU 上执行实际工作的异步方法。嵌套的 Action 是异步回调方法。
我主要关心的是如何最好/最优雅地处理转换器中完成的等待,以及是否有更合适的方法来解决整个问题。如果我需要详细说明或进一步解释,请发表评论。
c# - 有效获取数组子集
有没有一种有效的方法来获取 C# 数组的子集并将其传递给另一段代码(不修改原始数组)?我使用 CUDA.net,它具有将数组复制到 GPU 的功能。例如,我想将函数传递给数组的十分之一,从而将数组的每十分之一分别复制到 GPU(出于流水线目的)。
以这种方式复制数组应该与一次性复制它一样有效。可以使用不安全的代码并仅引用正确的内存位置来完成,但除此之外我不确定。CopyTo 函数将整个数组复制到另一个数组,因此这看起来没有用。
memory - CUDA中常量内存的动态分配
我正在尝试利用常量内存,但我很难弄清楚如何嵌套数组。我所拥有的是一组数据,其中包含内部数据的数量,但每个条目的数量都不同。因此,基于以下简化代码,我有两个问题。首先我不知道如何分配我的数据结构成员指向的数据。其次,由于我不能将 cudaGetSymbolAddress 用于常量内存,我不确定我是否可以只传递全局指针(你不能使用普通的 __device__ 内存)。
感谢您提供的任何帮助。:-)
cuda - CUDA内存问题
我有一个 CUDA 内核,我正在编译为一个 cubin 文件,没有任何特殊标志:
它编译,虽然有这个消息:
咨询:假设全局内存空间,无法判断指针指向的内容
以及对某个临时 cpp 文件中的一行的引用。我可以通过注释掉一些对我来说毫无意义的看似任意的代码来实现这一点。
内核如下:
如果我更换线路
在此行的第一个 for 循环之后
它编译时没有任何通知。这也可以通过注释掉行上方循环的看似随机的部分来实现。我也尝试用普通数组替换本地内存数组无效。谁能告诉我问题是什么?
该系统是 Vista 64 位,物有所值。
编辑:我修复了代码,因此它实际上可以工作,尽管它仍然会产生编译器通知。警告似乎不是问题,至少在正确性方面(它可能会影响性能)。
c++ - CUDA:在 C++ 中包装设备内存分配
我现在开始使用 CUDA,不得不承认我对 C API 有点失望。我理解选择 C 的原因,但是如果该语言是基于 C++ 的,那么有几个方面会简单得多,例如设备内存分配(通过cudaMalloc
)。
我的计划是自己做这件事,使用operator new
放置new
和 RAII 重载(两种选择)。我想知道到目前为止是否有任何我没有注意到的警告。该代码似乎有效,但我仍然想知道潜在的内存泄漏。
RAII代码的用法如下:
在这种情况下,一个类可能是矫枉过正(特别是因为你仍然必须使用cudaMemcpy
,类只封装 RAII)所以另一种方法是放置new
:
在这里,cudaDevice
仅仅作为一个标签来触发过载。然而,由于在正常放置中new
这将指示放置,我发现语法奇怪地一致,甚至可能比使用类更可取。
我会很感激各种批评。是否有人可能知道下一个版本的 CUDA 是否计划在这个方向上做一些事情(正如我所听说的,这将改进其对 C++ 的支持,无论他们的意思是什么)。
所以,我的问题实际上是三个方面:
- 我的展示位置
new
重载在语义上是否正确?它会泄漏内存吗? - 有没有人知道未来 CUDA 发展朝着这个大方向发展的信息(让我们面对现实:C++ s*ck 中的 C 接口)?
- 我怎样才能以一致的方式更进一步(还有其他 API 需要考虑,例如不仅有设备内存,还有常量内存存储和纹理内存)?
关于这里使用的单身人士:是的,我知道它的缺点。但是,这些在这种情况下无关紧要。我在这里只需要一个不可复制的小型标签。其他一切(即多线程注意事项、初始化时间)都不适用。
hardware - CUDA 或 FPGA 用于特殊用途的 3D 图形计算?
我正在开发一种具有大量 3D 图形计算的产品,在很大程度上是最近点和范围搜索。一些硬件优化会很有用。虽然我对此知之甚少,但我的老板(没有软件经验)提倡 FPGA(因为它可以定制),而我们的初级开发人员则提倡 GPGPU 和 CUDA,因为它便宜、热门和开放。虽然我觉得我对这个问题缺乏判断力,但我相信 CUDA 是要走的路,也是因为我担心灵活性,我们的产品仍在强劲发展中。
那么,换个说法,是否有任何理由选择 FPGA?还是有第三种选择?
cuda - 使用 Nvidia 的 CUDA 的压缩库
有谁知道使用 NVIDIA 的CUDA 库实现标准压缩方法(如 Zip、GZip、BZip2、LZMA...)的项目?
我想知道可以利用大量并行任务(如压缩)的算法在显卡上的运行速度是否不会比双核或四核 CPU 快得多。
您如何看待这种方法的利弊?
cuda - CUDA 应用程序在几秒钟后超时并失败 - 如何解决这个问题?
我注意到 CUDA 应用程序在失败并退出之前往往有大约 5-15 秒的粗略最大运行时间。我意识到最好不要让 CUDA 应用程序运行那么长时间,但假设使用 CUDA 是正确的选择,并且由于每个线程的顺序工作量必须运行那么长时间,有没有办法延长这段时间或绕过它?
c++ - CUDA + Visual Studio = 抑制输出窗口
通常,当我使用 Visual Studio 进行构建时,我会在输出窗格中看到警告和错误,例如
我正在使用CUDA进行一些 GPU 编程。升级到 2.1 后,我不再在 Visual Studio 中获得任何有用的输出。例如,我现在看到的是:
其他详细信息可以在 BuildLog.htm 中找到,但是一直查找该文件很不方便。
有谁知道如何强制 Visual Studio 在其输出窗格中显示输出?
没有帮助的事情:
- 卸载 CUDA:问题在所有项目中仍然存在
- 工具 > 选项 > 项目和解决方案 > 构建和运行 > MSBuild 项目构建输出详细程度:更改此下拉菜单,即使更改为“诊断”也没有明显的效果。
编辑:没有帮助的其他事情:
- devenv.exe /resetsettings
- devenv.exe /resetuserdata
更新 (响应 Die in Sente):它现在正在两台机器中的一台上工作(虽然我不确定我做了什么来修复它)。仍然有问题的机器安装了一个CUDA Visual Studio 向导,该向导以前曾引起过类似的问题。仍然损坏的机器的编译器版本为 15.00.21022.8。工作机有15.00.30729.1。进行备份后,我将“C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64”从工作机器转移到损坏的机器上。我观察到损坏机器的行为没有变化。