问题标签 [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.
cuda - GPU作为CPU的可行性?
您认为 GPU 作为像 CUDA 这样的 CPU 计划的未来是什么?您认为它们会成为主流并成为该行业的下一个流行时尚吗?Apple 正在构建一个使用 GPU 执行 CPU 任务的新框架,Nvidia 的 CUDA 项目在科学领域取得了很大的成功。你会建议学生花时间进入这个领域吗?
cuda - 常见的编程任务在 GPU 上的转化效果如何?
我最近开始研究一个项目,以确定如何最好地利用现代显卡中可用的处理能力进行一般编程。似乎现场通用 GPU 编程 (GPGPU) 对具有大量数学的科学应用程序有很大的偏见,因为这非常适合 GPU 计算模型。这一切都很好,但大多数人不会把所有时间都花在运行模拟软件等上,所以我们认为有可能创建一个通用基础,以便为大众轻松构建支持 GPU 的软件。
这就引出了我想提出的问题;程序执行的最常见工作类型是什么?由于我们愿意接受适度的性能改进(总比没有好,对吧?)。
我们已经想到了几个主题:
- 数据管理 - 处理来自数据库等的大量数据。
- 电子表格类型的程序(与上述有点相关)。
- GUI 编程(尽管可能无法访问相关代码)。
- 常用算法,如排序和搜索。
- 通用集合(并将它们与数据操作算法集成)
还有哪些其他编码任务很常见?我怀疑很多正在编写的代码属于库存管理类别,或者跟踪真实的“对象”。
由于我没有行业经验,我认为可能有许多基本类型的代码比我意识到的更频繁地完成,但它们并没有作为外部产品实现。
高级编程任务以及特定的低级操作都将受到赞赏。
cuda - 您是否成功使用了 GPGPU?
我很想知道是否有人通过使用例如nVidia CUDA编写了利用GPGPU的应用程序。如果是这样,您发现了哪些问题,与标准 CPU 相比,您获得了哪些性能提升?
directx - 从 Direct3D 纹理和表面进行回读
我需要弄清楚如何将数据从 D3D 纹理和表面返回到系统内存。做这些事情的最快方法是什么以及如何做?
此外,如果我只需要一个子区域,如何只读回该部分而不必将整个内容读回系统内存?
简而言之,我正在寻找有关如何将以下内容复制到系统内存的简明描述:
- 纹理_
- 纹理的子集
- 一个表面
- 表面的子集
- 一个D3DUSAGE_RENDERTARGET 纹理
- D3DUSAGE_RENDERTARGET 纹理的子集
这是 Direct3D 9,但也将不胜感激有关较新版本的 D3D 的答案。
c# - 将 C# 方法转换为 C++ 方法
我正在探索将常见 C# 代码构造映射到 C++ CUDA 代码以在 GPU 上运行的各种选项。系统结构如下(箭头代表方法调用):
C# 程序 -> C# GPU 库 -> C++ CUDA 实现库
GPU 库中的方法可能如下所示:
这是 ICollection<> 类型的扩展方法,它在每个元素上运行一个函数。但是,我想做的是调用 C++ 库并让它在 GPU 上运行方法。这将要求函数以某种方式翻译成 C++ 代码。这可能吗?
详细地说,如果我的库的用户执行一个方法(在 C# 中),其中包含一些任意代码,我想将此代码转换为 C++ 等效项,以便我可以在 CUDA 上运行它。我觉得没有简单的方法可以做到这一点,但我想知道是否有任何方法可以做到这一点或达到一些相同的效果。
我想知道的一件事是捕获要在表达式中翻译的函数,并使用它来将其映射到 C++ 等价物。有人有这方面的经验吗?
directx - 我应该现在创建 CUDA 应用程序,还是等待 DirectX 11?
Windows 7 可能会在明年 10 月进入 RTM(以及 DirectX 11),是否值得等待 DirectX 11 的显式 GPGPU 功能,这意味着它将是跨平台的(ATI/Nvidia,而不是 Windows/Linux/Mac/Whatever) ; 还是我现在应该创建一个 CUDA 应用程序?
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 是异步回调方法。
我主要关心的是如何最好/最优雅地处理转换器中完成的等待,以及是否有更合适的方法来解决整个问题。如果我需要详细说明或进一步解释,请发表评论。
cuda - CUDA内存问题
我有一个 CUDA 内核,我正在编译为一个 cubin 文件,没有任何特殊标志:
它编译,虽然有这个消息:
咨询:假设全局内存空间,无法判断指针指向的内容
以及对某个临时 cpp 文件中的一行的引用。我可以通过注释掉一些对我来说毫无意义的看似任意的代码来实现这一点。
内核如下:
如果我更换线路
在此行的第一个 for 循环之后
它编译时没有任何通知。这也可以通过注释掉行上方循环的看似随机的部分来实现。我也尝试用普通数组替换本地内存数组无效。谁能告诉我问题是什么?
该系统是 Vista 64 位,物有所值。
编辑:我修复了代码,因此它实际上可以工作,尽管它仍然会产生编译器通知。警告似乎不是问题,至少在正确性方面(它可能会影响性能)。