问题标签 [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.

0 投票
4 回答
8014 浏览

cuda - 带有基准的 OpenCL 示例

我正在寻找一些 OpenCL 的介绍性示例,这些示例说明了可以体验到速度大幅提升(例如,50x-1000x)的应用程序类型。 Cuda有很多很好的例子,但我没有为 OpenCL 找到同样的例子。

一个很好的例子可能是通过粒子群、模拟退火、进化算法、蚁群优化等对复杂函数进行全局优化。

0 投票
1 回答
1311 浏览

.net - .NET 中的 CUDA 全局内存释放问题

我有一个类(参见下面的示例),它充当 CUDA 内存结构的 .NET 包装器,
使用 cudaMalloc() 分配并使用 IntPtr 类型的成员字段引用。
(该类使用包含各种 CUDA 功能的本机 C DLL 的 DllImport。)

dispose 方法检查指针是否为 IntPtr.Zero,如果不是,则调用 cudaFree()
成功释放内存(返回 CUDA 成功)
并将指针设置为IntPtr. 零。

finalize 方法调用 dispose 方法。

问题是,如果调用 finalize 方法而之前没有调用 dispose,
则 cudaFree() 函数会设置“无效设备指针”的错误代码。

我检查了一下,cudaFree() 接收到的地址与 cudaMalloc() 返回的地址相同,并且之前没有调用 dispose()。

当我添加对 dispose() 的显式调用时,相同的地址被成功释放。

我发现的唯一解决方法是不要从终结器调用 dispose 方法,但是,如果并不总是调用 dispose(),这可能会导致内存泄漏。

任何想法为什么会发生这种情况?- 我在 .NET 3.5 SP1 上的 Windows Vista 64 位 + GeForce 8800 和 Windows XP 32 位 + Quadro FX 上遇到了与 CUDA 2.2 和 2.3 相同的问题(不确定哪个数字)。

0 投票
3 回答
6817 浏览

c++ - 从指针计算数组索引

我和一些同行正在开发一款游戏(Rigs ofRods),并试图将 OpenCL 集成到物理计算中。同时,我们正在尝试对我们的数据结构进行一些急需的清理。我想我应该说我们正在尝试清理我们的数据结构并注意 OpenCL 的要求。

使用开放 CL 的问题之一是无法使用指针,因为内存空间不同。据我所知,OpenCL 是将所有数据复制到 GPU 上,然后执行计算,指针值将被复制,但地址与预期地址不对应。

有问题的数据集中在一个数组中,当对象需要该数据时,它们使用指向所需对象的指针,或存储数组索引。

考虑 OpenCL 的一种解决方案是使用数组索引而不是指针。这会导致硬耦合,这可能会在以后导致头痛。作为一种解决方案,我想到了根据起始地址和当前地址计算数组索引。这当然只适用于连续数组。

我编写了一个示例应用程序来测试它,它工作得很好,有些人也在不同的平台上对其进行了验证。

我担心这更像是一个杂乱无章的解决方案。我知道这在没有非连续记忆的情况下是行不通的。

基本上我的问题是这样的:
在已知的连续记忆中使用这种方法会有什么陷阱?
你怎么能说它是连续的?
人们在处理此类问题时使用了哪些方法?

谢谢,如果格式关闭,我很抱歉,这是我第一次发布问题。

0 投票
1 回答
4734 浏览

c++ - cudaSafeCall() 运行时 API 错误

我正在尝试在 Visual Studio 2008 中以仿真模式运行 CUDA。

它在运行时显示此问题:

例如,在一种情况下,结果是这样的:

如果我评论了这个:

这是因为我在仿真模式下运行代码吗?还有其他建议吗?

0 投票
7 回答
3196 浏览

concurrency - 并行编程入门

所以看起来多核及其所有相关的并发症都将继续存在。我正在计划一个肯定会从并行性中受益的软件项目。问题是我几乎没有编写并发软件的经验。我在大学学习过它,并且很好地理解了概念和理论,但是从学校开始,我在构建可在多个处理器上运行的软件方面的有用经验为零。

所以我的问题是,开始多处理器编程的最佳方式是什么? 我主要熟悉 Mac OS X 上的 C/C++ 和 Obj-C 中的 Linux 开发,Windows 经验几乎为零。此外,我计划的软件项目将需要对大量数据进行 FFT 和可能的浮点比较。

有 OpenCL、OpenMP、MPI、POSIX 线程等……我应该从哪些技术入手?

以下是我正在考虑的几个堆栈选项,但不确定它们是否会让我尝试朝着我的目标努力:

  • 我应该获得 Snow Leopard 并尝试让 OpenCL Obj-C 程序在我的笔记本电脑上的 ATI X1600 GPU 上运行吗?或者
  • 我是否应该获得一个 Playstation 并尝试编写 C 代码以跨越其六个可用的 Cell SPE 内核?或者
  • 我应该用 Nvidia 卡构建一个 Linux 机器并尝试使用 CUDA 吗?

在此先感谢您的帮助。

0 投票
1 回答
1444 浏览

debugging - CUDAPP 1.1 cudppSort 配置错误(配置参数无效)

我正在尝试调用 cudppSort 对一组键/值进行排序。我正在使用以下代码来设置排序算法:

程序退出,但是在线:

并打印到标准输出:

我查看了scan_app.cu 中的行。这是,

所以显然我的配置有一个错误导致 allocScanStorage 爆炸。函数中只有两次对 CUDA_SAFE_CALL 的调用,我看不出任何一个与配置有任何关系的原因。

我的配置有什么问题?

0 投票
2 回答
1349 浏览

.net - 在 VS2008 中调试从 .NET 代码调用的 CUDA 内核,仿真模式

CUDA 有一个在仿真模式下编译代码的选项,他们提供的 .rules 文件支持该选项。

我有调用本机 dll 的 C# .NET 3.5 SP1 代码,使用 DllImport,本机 dll 使用 nvcc 通过 VS2008 编译,其功能是从 CUDA 向 CUDA 传输内存并调用 CUDA 内核。

当 CUDA 内核正确时,一切运行正常,但是当出现 bug 时,我只能进入代码,直到内核的标题并查看它们接收的参数。(我在启动项目的调试选项中启用了调试本机代码。)

我尝试使用仿真模式进行编译,但是在调用 CUDA memcopy 主机-> 设备时出现 CUDA 错误“混合设备执行”。我尝试使用等效的非 CUDA 版本切换 alloc+dealloc+memcopy,但是在调用内核时会发生相同的错误。

我在尝试使用调试仿真模式时做错了什么?

PS我在Vista x64 SP1 + VS2008上试过这个,在x86和x64上都编译了相同的解决方案,既不能在仿真模式下工作,也不能在非仿真模式下工作。

0 投票
1 回答
747 浏览

matrix - CUBLAS 或支持的库,重点是初学者阅读

我正在尝试利用 GPU (nVidia Quadro NVS140M) 的强大功能来加快我项目中的一些矩阵计算。我正在阅读一些文档(编程指南、最佳实践指南和参考手册),但不确定我应该关注哪些部分。如果我能在这方面得到一些建议,那就太好了。

另外,我想知道是否有第三方维护的 SDK,例如 CuBLAS.net,可以在我坚持使用 cublas 提供的功能帮助我实现项目目标之前简化 cublas 开发过程。再次,提前感谢您的评论。

0 投票
1 回答
1800 浏览

visual-studio - 在现有 MFC 项目中使用 CUDA

我有一个现有的 MFC 应用程序,它使用 CPU 优化的 BLAS 库进行矩阵计算。我有兴趣在我的项目中添加 CuBLAS 计算功能,但我有以下两个问题:

1) 我不确定我是否需要在此时指定我自己的 CUDA 内核、线程和块配置。如果是这样,您建议在修改算法时最关注架构的哪些部分?

2) 我对 (a) 在 Visual Studio 中使用程序中的 CuBLAS 功能创建一个新项目或 (b) 在现有 MFC 项目中集成 CuBLAS 功能感兴趣。但是,除了遵循这样的指南之外,我在配置 Visual Studio 项目以正确使用 CUDA SDK 时遇到问题,如果我试图将其与现有项目集成,这可能无法正常工作。您对此有何建议?

提前感谢您的评论。

0 投票
1 回答
3277 浏览

visual-studio - Visual Studio、英特尔 Visual Fortran 和 Visual C/C++ 混合语言编译

在 Windows 7 x64 上使用 Visual Studio 2008 Pro 和 Intel Fortran 编译器 v11。

我有一个使用所有 fortran 源文件设置的 Intel Visual Fortran 项目。我希望逐渐用 C/C++ 替换所有这些子例程(实际上是 cuda -- 加分)。只需右键单击解决方案资源管理器中的源文件并“添加现有项目”即可将 .cpp 或 .c 或 cuda 文件放入列表中......但它永远不会被编译。因此,任何写入 fortran 代码的 C 代码的 INTERFACE 总是在链接步骤中失败。

如何获得这样的混合语言项目?谷歌让我失望了,我发现的只是实际界面代码的描述,没有关于如何实现 Visual Studio 构建系统的说明。

提前致谢。