问题标签 [managed-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.
managed-cuda - 9.0 版库是否会更新 ManagedCuda?
ManagedCuda 的最新更改是在大约 5 个月前进行的。项目还支持吗?会有更新吗?如果没有,有什么好的选择?
cuda - CUDA 将多个 .cu 文件编译为一个文件
我正在将一些计算从 C# 移植到 CUDA。我想移植 C# 中的许多类,对于每个 c# 类,我在我的 CUDA 项目中创建 .cu 和 .cuh 文件。所有相关的类,以及它们在计算中使用的所有类。我需要保存我的 C# 代码的结构,因为在其他情况下很容易出错。
PS如果我将所有代码放在一个文件中 - 一切都按预期工作,但阅读或修复一些问题会变得非常痛苦。
我想编译 CUDA 项目并通过 ManagedCuda 库在我的 C# 中使用它。我可以用一个 .cu 文件将测试 CUDA 项目编译为 .ptx 文件,通过 ManagedCuda 在 C# 中加载它并从中调用函数。
但是当我想用多个 cu 文件编译我的真实项目时,结果我为项目中的每个 .cu 文件获得了多个 .ptx 文件,甚至我无法通过 ManagedCuda 加载这个 .ptx 文件,我得到了下一个错误:
ErrorInvalidPtx:这表示 PTX JIT 编译失败。
但是这个错误是意料之中的,因为 ptx 文件中有交叉引用,并且它们只有在一起加载时才有意义。
我的目标是将我的 CUDA 项目编译为一个文件,但同时我不想仅限于我拥有的特定视频卡。为此,我需要使用 PTX(或包含 ptx 的 cubin)这个 PTX 文件将在您加载它的那一刻为特定设备编译。
我尝试将 Generate Relocatable Device Code 设置为 Yes (-rdc=true) 并编译为 PTX 和 Cubin - 结果相同我为每个 .cu 文件获得了几个独立的文件。
c# - C# 检索 Cuda 版本
您好,我需要检索 cuda 版本,无论是 cuda8 还是 cuda9。
有人知道我可以告诉的方法吗?
我听说 cuda managed 会告诉我,但它所做的只是告诉我驱动程序版本“361.xx”
cuda - 使用 managedCuda 对数组中的元素求和
问题描述
我试图让一个内核总结一个数组的所有元素来工作。内核旨在以每个块 256 个线程和任意数量的块启动。传入的数组长度a
总是512的倍数,实际上是#blocks * 512。内核的一个块应该总结“它的”512个元素(256个线程可以使用这个算法总结512个元素),将结果存储在out[blockIdx.x]
. 中的值的最终总和out
以及块的结果将在主机上完成。
该内核最多可用于 6 个块,即最多 3072 个元素。但是以超过 6 个块启动它会导致第一个块计算出比其他块更大的错误结果(即out = {572, 512, 512, 512, 512, 512, 512}
),这个错误的结果是可重现的,多次执行的错误值是相同的。
我想这意味着我的代码中某处存在结构错误,这与blockIdx.x
,但唯一的用途是计算blockStart
,并且这似乎是正确的计算,对于第一个块也是如此。
我验证了我的主机代码是否为内核计算了正确的块数并传入了一个正确大小的数组。那不是问题。
当然,我在 stackoverflow 上阅读了很多类似的问题,但似乎没有一个描述我的问题(参见此处或此处)
内核是通过managedCuda(C#)调用的,我不知道这是否是一个问题。
硬件
我使用具有以下规格的 MX150:
- 修订号:6.1
- 全局内存总量:2147483648
- 每个块的总共享内存:49152
- 每个块的总寄存器数:65536
- 经纱尺寸:32
- 每个块的最大线程数:1024
- 最大块数:2147483648
- 多处理器数量:3
代码
核心
内核调用
更新:
非常有帮助且唯一的答案确实解决了我所有的问题。谢谢!问题是无法预料的比赛条件。
重要提示:
managedCuda 的作者在评论中指出,所有 NPP 方法确实已经在 managedCuda ( using ManagedCuda.NPP.NPPsExtensions;
) 中实现。我没有意识到这一点,我想很多人都在阅读这个问题。
c# - 在 CUDA 内核中循环数据会导致应用程序中止
问题:
当我增加在循环内部处理的数据量时CUDA
kernel
- 它会导致应用程序中止!
例外:
ManagedCuda.CudaException: 'ErrorLaunchFailed: 执行内核时设备发生异常。常见原因包括取消引用无效的设备指针和访问越界共享内存。
问题:
如果有人能阐明我在当前实现中遇到的限制以及导致应用程序崩溃的确切原因,我将不胜感激。
或者,我附上了一个完整的内核代码,如果有人可以说如何在没有抛出异常的情况下以这种方式重新建模它。这个想法是内核正在接受combinations
然后对同一组data
(在循环中)执行计算。因此,内部的循环计算应该是顺序的。内核本身的执行顺序无关紧要。是组合问题。
欢迎任何建议。
代码(短版,足以中止应用程序):
在上面的示例中,如果arraySize
接近 50_000 则应用程序开始中止。使用相同类型的输入参数,如果我们覆盖或硬核到arraySize
10_000 则代码成功完成。
代码 - 内核(完整版)
代码 - 主机(完整版)
分析
我最初的假设是我遇到了内存问题,但是,根据 VS 调试器,我500mb
在主机环境中遇到了一些数据。所以我想无论我将多少数据复制到 GPU - 它都不应该超过1Gb
甚至最大值11Gb
。后来我注意到只有当内核内部的循环有许多数据记录要处理时才会发生崩溃。这让我相信我遇到了某种线程超时限制或类似的东西。没有确凿的证据。
系统
我的系统规格是16Gb
,Ram
和GeForce 1080 Ti 11Gb
. 使用Cuda 9.1.
, 和managedCuda
版本8.0.22
(也尝试使用来自 master 分支的 9.x 版本)
编辑 1:26.04.2018刚刚测试了相同的逻辑,但仅在OpenCL
. 代码不仅成功完成,而且执行时间比 好 1.5-5 倍CUDA
,具体取决于输入参数的大小:
我真的不想在这里开始OpenCL
/CUDA
战争。如果在我的原始实施中有什么我应该关注的CUDA
- 请告诉我。
编辑:26.04.2018。在遵循评论部分的建议后,我能够在抛出异常之前将处理的数据量增加 3 倍。我能够通过切换到.ptx
生成Release
模式而不是Debug
模式来实现这一点。Debug
这种改进可能与以下Generate GPU Debug information
事实Yes
有关的OpenCL
,但越来越接近。
对于CUDA
文件生成,我正在使用VS2017 Community
, CUDA 9.1
project, v140 toolset
, build for x64
platform, post build events disabled, configuration type: utility
. 代码生成设置为:compute_30,sm_30
. 例如,我不确定为什么不是sm_70
。我没有其他选择。
c# - 如何从 C# 生成进程 C++?
我有一个 C++ 库来运行字符串匹配(PFAC 库)PFAC-lib。如何从 WinForm C# 运行这个库?
我还使用managedCuda从我的 C# 运行 cuda 代码。任何想法?
c# - 我可以初始化字符串 [] 或列表吗在托管库达?
我想在 managedCuda 中使用字符串匹配。但是我怎样才能初始化它呢?
我试过使用 C# 版本,这里是例子:
对于字符串匹配,我使用了以下代码:
我还在主机内存中分配输入 h_A
当我想在设备内存中分配并将向量从主机内存复制到设备内存时
它给了我这个错误
有什么帮助吗?
c# - ManagedCuda 内核找不到 curand.h
我正在尝试使用ManagedCuda编译使用currand library的内核。但是,我找不到告诉 CudaRuntimeCompiler 如何找到 curand.h 的方法。
如果我删除 ' #include <curand.h>
' 行,一切正常。但是有了它,我得到:
使用完全限定的 include ( #include <C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\curand.h>
) 让我更进一步,所以这显然只是告诉编译器在哪里查找的一个例子。
我尝试将文件夹添加到路径中,但无济于事。
谁知道这个可以在哪里设置?(或者知道 ManagedCuda 的替代包?)
下面的所有代码。
C#代码:
内核.c
从 NuGet 安装 MangedCuda-100 (10.0.31) 和 ManagedCuda-NVRTC (10.0.31)。
c# - 复杂数组 fft-ifft 对在每次迭代中从根本上改变值是否正常?
复杂值数组上的简单 3D fft-ifft 对代码如下:
返回变化的值示例输出: