问题标签 [cudafy.net]
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# - CUDAfy.NET 给出 Win32Exception:系统找不到指定的文件
我通过 NuGet添加了对CUDAfy.NET库的引用。
当我运行我的程序时,我点击了Win32Exception
:
该系统找不到指定的文件
这发生在程序的第一行:
异常对象没有任何迹象表明他们正在尝试加载什么文件。
我怎样才能解决这个问题?
编辑
使用 .NET 4.0 在 VS2010 中运行 Codeplex 下载的捆绑示例时,我看到了相同的异常。
轨迹轨迹为:
c# - 在 CUDA 中返回数组的最小和最大元素
我正在 CUDA 中执行一些数组操作/计算(通过Cudafy.NET 库,尽管我对 CUDA/C++ 方法同样感兴趣),并且需要计算数组中的最小值和最大值。其中一个内核如下所示:
我想做这样的事情:
任何人都知道返回最小值和最大值的便捷方法(对于整个数组,而不仅仅是每个线程或块)?
c# - 在 CUDAfy 的结构中传递数组
使用 VS 2012、.NET 4.5、64 位和 CUDAfy 1.12,我有以下概念证明
当程序运行时,我在 dev.Launch 上收到以下错误:
Type 'Test.ParentStruct' cannot be marshaled as an unmanaged structure; no meaningful size or offset can be computed.
如果我从 ChildStruct 中删除浮点数组,它会按预期工作。
过去曾在 C/C++/Cli 和 CUDA C 中工作过,我知道错误的性质。此错误的一些解决方案建议使用Size
参数手动设置结构大小MarshalAs
,但由于结构内的类型多种多样,这是不可能的。
我查看了生成的 .cu 文件,它正在生成浮点数组,float *
这是我所期望的。
有没有办法将结构中的数组传递给内核?如果没有最好的第二种选择是什么?这个问题在 CUDA C 中不存在,它只是因为我们从 CLR 编组而存在。
c# - Cuda - OpenCL CPU 4x faster than OpenCL or CUDA GPU version
A wave simulator I've been working on with C# + Cudafy (C# -> CUDA or OpenCL translator) works great, except for the fact that running the OpenCL CPU version (Intel driver, 15" MacBook Pro Retina i7 2.7GHz, GeForce 650M (Kepler, 384 cores)) is roughly four times as fast as the GPU version.
(This happens whether I use the CL or CUDA GPU backend. The OpenCL GPU and CUDA versions perform nearly identically.)
To clarify, for a sample problem:
- OpenCL CPU 1200 Hz
- OpenCL GPU 320 Hz
- CUDA GPU -~330 Hz
I'm at a loss to explain why the CPU version would be faster than the GPU. In this case, the kernel code that's executing (in the CL case) on the CPU and GPU is identical. I select either the CPU or GPU device during initialization, but beyond that, everything is identical.
Edit
Here's the C# code that launches one of the kernels. (The others are very similar.)
And, here's the relevant CUDA kernel function generated by Cudafy:
Just for completeness, here's the C# that is used to generate the CUDA:
Obviously, the if
in this kernel is bad, but even the resulting pipeline stall shouldn't cause such an extreme performance delta.
The only other thing that jumps out at me is that I'm using a lame grid/block allocation scheme - ie, the grid is the size of the array to be updated, and each block is one thread. I'm sure this has some impact on performance, but I can't see it causing it to be 1/4th of the speed of the CL code running on the CPU. ARGH!
multithreading - 在内核中声明一个私有的、线程特定的变量,然后将该变量返回给主机
我有一个方法,我想在多个线程上运行,但每个线程将返回不同数量的结果。是否可以声明一个私有的、线程特定的变量,即一个列表,然后我可以将其传回主机并合并所有结果?
假设我有一个数组如下:
每个线程将给出 3 个值来分析并记录 arr2 中的值与 arr1 中特定行的值之间的差异。
cuda - 不同步运行的 CUDA 方法是否存在性能损失?
如果我有一个内核,它回顾最后的 Xmins 并计算 float[] 中所有值的平均值,如果所有线程没有同时执行同一行代码,我会遇到性能下降吗?
例如:假设@ x=1500,过去 2 小时有 500 个数据点。
@ x = 1510,过去 2 小时有 300 个数据点。
x = 1500 处的线程必须回溯 500 个位置,而 x = 1510 处的线程只回溯 300,因此后面的线程将在第一个线程完成之前移动到下一个位置。
这通常是一个问题吗?
编辑:示例代码。对不起,但它在 C# 中,因为我打算使用 CUDAfy.net。希望它提供了我需要运行的编程结构类型的粗略概念(实际代码更复杂但结构相似)。任何关于这是否适用于 GPU / 协处理器或仅适用于 CPU 的评论将不胜感激。
c# - 将“路径”绘制到数组的最佳方法?
我有一个关于自己绘制线条/路径的问题。我将 C#/WPF/Cudafy 组合用于 UI 和一些计算(例如路径)。现在我有一个 Byte[] 数组,应该用“颜色”/值填充(数组长度 = 4 * 宽度 * 结果图像的高度)。
我得到了一些线的起点和一个终点(起点之间的某处)。首先,我计算了从这些起点到终点的一些路径,然后想将它们“绘制”到数组(将用于构造 WriteableBitmap)。但是,点坐标存在于“简化环境”中(因为计算了运行 Dijkstra 算法所需的路径)。
我的路径现在由包含点坐标(减小的大小)和“线宽”的元组定义。
由于某些路径可能“重叠”,我想我将执行以下步骤以确保结果看起来不错:
- 合并路径:为此,我将选择一条路径并保留它。然后我采取第二个并检查路径点是否位于已添加的路径附近(如近邻搜索)。我想这样做是因为最后,我想加宽路径重叠的线宽(第三个元组值)。
- 完成后,我想“插入”路径:我真的不知道该怎么做,因为每条路径在每个(缩小尺寸的)像素处都有一个点。一种可能性是清除所有那些“位于一条线上”(并且不是真正必要)的路径的路径坐标,然后执行类似 Bezier - Interpolation 的操作。但是所有这些步骤对我来说似乎都是多余的。
你不认为可能有更好的方法来做到这一点吗?如果是这样,请分享您的想法:)
谢谢你的帮助!
这是一个链接,指向它现在的样子:CPVL 应用程序
c# - 这对 GPU 性能进行 Sobel 过滤可以吗?
我有一个与 CUDA 相关的问题要问你:)。由于我对使用 CUDA 比较陌生,我想知道这种“性能”是否还可以。
我正在使用 C# 和 Cudafy.Net!
我有一个灰度图像(表示为 float[]),它是从屏幕截图中计算出来的(图像大小为:1920x1018 像素)。
现在我使用在 GPU 上运行的 Sobel 过滤器(通过 Cudafy.Net),它看起来像这样:
运行前设置的常量值:
当我运行这个“PenaltyKernel”函数时,包括为数组分配内存、向设备复制数据和从设备复制数据,我的运行时间平均约为6.2 毫秒(使用 GTX 680 GT!)。
所以我现在的问题是,如果这个速度还可以(每秒大约 161 帧)或者我错过了什么?我的 Sobel 过滤器是否还可以(我的意思是,结果看起来不错 :))?
任何帮助表示赞赏!
c# - 将结构传递给 cudafy.net 中的内核
我在将包含多个数组的结构分配给 GPU 时遇到了一些问题。在第二个代码块中,我遇到以下错误:
SimpleDataStructure[] dev_SDS = _gpu.CopyToDevice(SDS);
有谁知道为什么?从我可以看到 CopyToDevice() 不支持将结构作为参数。我可能会遗漏一些东西,所以无论如何我都会感谢一些帮助。
结构声明:
在我的类中的方法中编写代码:
cudafy.net - CudafyModule km = CudafyTranslator.Cudafy(); 导致错误,找不到编译器
我正在尝试运行我的第一个 cudafy 项目,但在以下行出现以下错误:
下面是我收到的确切错误消息的屏幕截图。
我已经运行了 Cudafy 附带的示例项目,它们运行良好,所以我不明白为什么它说它找不到编译器。我已将 Cudafy.net 添加到参考资料中,请参见下面的屏幕截图,并且所有信息都与示例项目完全相同,位于图像的右侧,并且有效。
有人有想法么??
编辑
似乎已经在 SO 上回答了类似的问题,但我不明白他所指的路径环境变量在哪里。
编辑 2
以下是cl.exe
我找到的以下内容。我不确定使用哪一个。我正在运行英特尔处理器,所以我倾向于底部的处理器,但这只是一个猜测。