问题标签 [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.
c# - 从 CUDA 更新 D3D9 纹理
我正在开发一个集成 WPF、Direct3D9(使用 Microsoft 的 D3DImage WPF 类)和 CUDA(我需要能够在 GPU 上为 D3DImage 生成纹理)的原型。
问题是,CUDA 不会更新我的纹理。不返回错误代码,纹理保持不变。即使我在自己写完之后阅读,我也看不到任何变化。如何更新我的 D3D9 纹理?
我什至没有运行任何 CUDA 内核,出于调试目的,我只使用 cuMemcpy2D API 通过从 CPU 复制一些假数据来写入 CUDA 内存。
这是代码,它是 C#,但我在评论中放置了原生 API:
c# - 在 Nsight 或 Visual Profiler 中分析 managedCuda
我正在尝试使用 Nsight Visual Studio Edition 或 Visual Profiler 使用managedCuda 分析用 C# 编写的 CUDA 应用程序。两个分析器都可以很好地与普通的 C++ CUDA 应用程序配合使用。要使用 managedCuda 测试分析器,我想在ManagedCudaSamples中分析项目“vectorAdd” 。
首先,我尝试使用 VS 2013 中集成的 Nvidia Nsight Visual Studio Edition 5.0。我使用 x64 Debug 配置。如果我尝试在 Nsight 性能分析的“应用程序控制”中启动应用程序,我会收到一条错误消息:
Analysis Session - Start Application
Unable to launch 64-bit managed application '...\ManagedCudaSamples\vectorAdd\bin\x64\Debug\vectorAdd.exe'.
此外,我尝试使用 Nvidia Visual Profiler 7.5 来分析相同的应用程序。在运行 vectorAdd.exe nvprof 控制台显示以下输出:
==2944== NVPROF is profiling process 2944, command: ...\ManagedCudaSamples\vectorAdd\bin\x64\Debug\vectorAdd.exe
==2944== Warning: Some profiling data are not recorded. Make sure cudaProfilerStop() or cuProfilerStop() is called before application exit to flush profile data.
==2944== Generated result file: ...\nvvp_workspace\.metadata\.plugins\com.nvidia.viper\launch\7\api_2944.log
我是 CUDA 的新手,如果有任何关于如何分析 managedCuda 应用程序的建议,我将不胜感激。
c# - 使用 managedCUDA 进行 1D FFT 加核计算
我正在尝试进行 FFT 加内核计算。FFT : managedCUDA 库内核 calc : 自己的内核
C# 代码
内核代码
但是,这个程序效果不佳。发生以下错误:
ErrorLaunchFailed:执行内核时设备发生异常。常见原因包括取消引用无效的设备指针和访问越界共享内存。上下文不能被使用,所以它必须被销毁(并且应该创建一个新的)。此上下文中的所有现有设备内存分配都是无效的,如果程序要继续使用 CUDA,则必须重新构建。
c++ - CUDA 的 x64 与 x86
在这个线程中,x64 允许的每个块的线程数比 Win32 少吗?有一个关于寄存器用完的问题。我的印象是 Nvidia 在 CUDA 7.5 及更高版本中已经放弃了对 x86 的支持。这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器?可能更少的线程/块将是未来工作的方式?
cuda - Using CuRand in ManagedCuda
I'm currently working with ManagedCuda, and want to generate random numbers on the device. However I can't seem to find a simple example how to do this (browsing through objects in the ManagedCuda.CudaRand
namespace and comparing with the C++ equivalent doesn't get me any further).
Actual question: How can I generate random numbers in a kernel when using managedCuda instead of the regular C++ API?
opengl - 将 CUDA 输出数组/表面绑定到 ManagedCUDA 中的 GL 纹理
我目前正在尝试将 CUDA 程序的某种形式的输出连接到GL_TEXTURE_2D
用于渲染的输出。我并不担心 CUDA 的输出类型(无论是数组还是曲面,我都可以调整程序)。
所以问题是,我该怎么做?(我当前的代码将输出数组复制到系统内存,然后使用 再次将其上传到 GPU GL.TexImage2D
,这显然是非常低效的 - 当我禁用这两条代码时,它从每秒大约 300 次内核执行到高达 400 次)
我已经有一些测试代码,至少将 GL 纹理绑定到 CUDA,但我什至无法从中获取设备指针......
尝试获取指针时抛出以下异常:
我需要做什么来解决这个问题?
即使可以解决此异常,我将如何解决问题的另一部分;也就是说,我如何在内核中使用获取的指针?我可以为此使用表面吗?作为任意数组(指针算法)访问它?
编辑:看这个例子,显然我什至不需要每次调用内核时都映射资源,并调用渲染函数。但这将如何转化为 ManangedCUDA?
c# - ManagedCUDA:将结构参数传递给内核
今天,我正在尝试从 C# 应用程序启动我的 CUDA C/C++ 程序。
所以,我在网上做了一些研究,但我没有找到那么多信息。我只看到了“GitHub”,但是,没有......
所以我有一个内核定义如下:(这是一个例子)
使用“笛卡尔”:
根据我对 managedCUDA 的理解。这就像替换 CUDA C/C++ 程序的主要功能。使用“为我们工作”的库
所以我遵循了这个页面的一个例子:
并像这样编写我的 C# 程序:
创建上下文的部分:(不要真正理解这个“概念”)
启动(我猜)函数并取回内核所做的修改的部分:
从这部分开始,我对这条线一无所知:
static Func<Cartesian, Cartesian, Cartesian> cudaAdd = (a, b) =>
我对 C# 不熟悉(只是说)
所以我的问题来自result_dev和result_host引起的错误;
错误说:
使用未分配的局部变量“result_*”
那么,是因为它们没有初始化吗?
如果是这样,为什么 result_host 会导致错误?它必须从 result_dev 获取数据,这些数据必须由内核修改。
如果没有,如何解决这个问题?
而且我还想知道,是否可以通过内核函数传递 Class 参数?如果是这样,如何设置 CudaDeviceVariable,因为它说该类型必须是不可为空的。这就是为什么我用 struct 改变类。
c# - ManagedCUDA:对象包含非原始/非 blitable
在这里,我在使用 managedCUDA 时遇到了一些麻烦,
我有一个用 CUDA C/C++ 编写的应用程序,我想使用 managedCUDA 启动它。
从我的问题开始:我收到此错误:
Ungandled 异常:System.ArgumentException:对象包含非原始或非 blittable 数据。
它发生在我做了一个variable.CopyToDevice(otherVariable)
我寻找什么是non-primitive
什么,什么是non-blittable
因为non-primitive
我得到了:
非原始类型(或)用户定义
例如:类、结构、枚举、接口、委托、数组。
因为non-blittable
我得到了:
下表列出了 System 命名空间中的*非 blittable 类型。> 委托,它们是引用静态方法或 > 类实例的数据结构,也是不可 blittable 的。
*表列表:System.Array、System.Boolean、System.Char、System.Class、>System.Object、System.Mdarray、System.String、Systeme.Valuetype、Systeme.Szarray
所以这是我的代码示例:
该错误未显示在行上:dev_prop.CopyToDevice(host_prop);
似乎 Global 不是问题,也不是 Propagator 是一个结构的事实
但是就行了:dev_station.CopyToDevice(earthStation);
如您所见,我对两个变量都做了“相同”的事情,所以这不是我进行导致错误的方式。我猜它来自包含其他结构对象的 EarthCoordinates 结构,可能是这个,这就是问题所在。
所以,知道我正在使用 managedCUDA 并且我不能像在 CUDA C/C++ 中那样做,我不知道如何解决这个错误。那么有什么办法可以让这个工作?
谢谢大家 !!
parallel-processing - 使用 CUDA 流的优势
我试图了解 Stream 可以在哪里帮助我处理视频帧上的多个感兴趣区域。如果使用支持流的 NPP 函数,是否会启动与 ROI 一样多的流?甚至可能为每个 Stream 创建一个 CPU 线程?还是使用一个流来处理所有 ROI 并可能使用来自 CPU 中多个线程的单个流的好处?
c# - 将静态数组复制到 managedCUDA 中的主机
我在 kernel.cu 文件中声明了一个静态数组
我可以使用从主机修改这个数组
经过几次处理,我想将此数组复制到主机,我该怎么做?
EDIT1:我注意到每次运行新内核时都会重置阵列。我不能使用该数组来保留要在下一个内核中使用的中间值。是否可以以静态方式保持这些值?
EDIT2:在EDIT1中出现问题是因为我使用 LoadKernelPTX 加载了多个内核。正确的方法是加载一次模块,然后从该模块构造多个内核。(如https://github.com/kunzmi/managedCuda/wiki/CudaKernel中所建议)这样,我可以在多个内核之间共享静态数组/变量。