问题标签 [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# - GPU 以相同的时间间隔重复错误,这是一个硬错误吗?
问题:
我正在尝试使用我的显卡使用 cudafy.net 进行一些计算。我现在运行了我的内核的 2 个版本,并且我在特定的时间间隔内不断收到错误,即数组中的每个第二个位置都是 0.0,但应该更大。下表列出了 GPU 返回的值与正确值的对比。注意:我读过比较浮点数并不理想,但是当我应该得到 6.34419e17 这样大的东西时得到 0.0 似乎是错误的。
通过快速扫描它们,它们似乎出现在每 2nd i 值处。
到目前为止检查:
我还以不同的起始值运行了以下代码,因为我认为这可能是数据的问题,但对于每个错误,我仍然得到相同的 i 值。
我还更改了将内存分配到 GPU 上的顺序,但这似乎并不影响结果。注意:由于我在 VS 中调试,所以在我停止后我没有明确清除 GPU 上的内存。一旦我停止调试,这会被清除吗?一旦我重新启动我的电脑,错误仍然存在。
显卡:
我的显卡如下:EVGA GTX 660 SC。
代码:
我的内核:(注意:我有几个变量在下面没有使用,但我没有删除,因为我想一次删除 1 个东西以确定导致此错误的原因)
下面是我用来调用内核然后检查结果的代码段。
我只有一张显卡可供我使用,所以我无法快速检查卡是否有错误。这张卡不到 8 个月,买的时候是新的。
关于可能导致上述错误的任何想法?
谢谢你的时间。
编辑: 刚刚尝试将我的 gtx 660 降低到 660 的库存速度。但仍然遇到错误。
Edit2我用过_gpu.FreeMemory;确定我是否超出了卡的内存。不过,我还有 1,013,202,944 字节。
Edit3我刚刚将输出数组的数据类型更改为 long 而不是 float。我现在似乎卡上有超过 500MB 的可用空间,但我仍然从相同的值得到错误的结果,即 i = 16,777,217。我想这似乎表明这可能与问题所在的索引有关?
visual-studio-2010 - 带有 NSight 的 cudafy.net,调试器无法正常工作
正如主题所述,我无法让调试器工作。以下是我完成的步骤顺序。
注意:我安装了 Cuda 5.0 和 NSight visual studio edition 3.0。我听说现在可以使用单个 GPU 进行调试。我假设 5.0 还可以,我不需要 5.5 候选版本?
1)根据网站上的说明更改代码以包含以下内容:
2)在此之后设置一个断点。
3) 一旦遇到断点就停止调试。
4)解决方案资源管理器,选择“显示所有文件”并找到“CUDAFYSOURCTEMP.cu”文件。
5)右键单击并选择“添加到项目”。
6) 打开 NSIGHT HUD 启动器 3.0。
7) 设置如下:
8) 点击确定。
9) 双击 CUDAFYSOURCETEMP.cu 并在代码中设置断点。
10) 转到 NSight Monitor 并单击“NSight Monitor Ooption”-> CUDA 并设置以下内容:
11)回到VS2010并选择NSight-> Start Cuda Debugging。
一旦完成,我将光标悬停在变量上,一旦断点被击中,但没有任何显示。只有blockDim、blockIdx 和threadIdx 显示了一些东西。
我还打开了 CUDA WarpWatch1 窗口,输入了一个变量,但出现以下错误“无法解析名称“num2”。
我错过了一步还是什么?
编辑这是编译期间输出窗口的输出。
线程“vshost.LoadReference”(0x1f78)已退出,代码为 0(0x0)。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):已加载 'C:\Users\FrazMann\Desktop\Market Adj 条目 CUDA - MK2\FrazerMann.Profiler.UserInterface\bin\x64\Debug\ FrazerMann.Profiler.UserInterface.exe',已加载符号。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):已加载 'C:\Users\FrazMann\Desktop\Market Adj 条目 CUDA - MK2\FrazerMann.Profiler.UserInterface\bin\x64\Debug\ Cudafy.NET.dll''FrazerMann.Profiler.UserInterface.vshost.exe'(托管(v4.0.30319)):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0 .0__b77a5c561934e089\System.Numerics.dll',跳过加载符号。模块已优化且调试器选项 ' 启用了“仅我的代码”。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data.OracleClient\v4.0_4.0.0.0__b77a5c561934e089\System .Data.OracleClient.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Web\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Web .dll''FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\ System.Transactions.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices .dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):已加载 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.EnterpriseServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices .Wrapper.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管(v4.0.30319)):已加载“匿名托管的 DynamicMethods 程序集”“FrazerMann.Profiler.UserInterface.vshost.exe”(托管 (v4.0.30319)):已加载“C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0。 0__b03f5f7f11d50a3a\Accessibility.dll''FrazerMann.Profiler.UserInterface.vshost.exe'(托管(v4.0.30319)):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.SqlXml\v4.0_4 .0.0.0__b77a5c561934e089\System.Data.SqlXml.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xaml\v4.0_4.0.0.0__b77a5c561934e089\System.Xaml .dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):已加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ComponentModel.Composition\v4.0_4.0.0.0__b77a5c561934e089\System .ComponentModel.Composition.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):已加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.Build.Framework\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft .Build.Framework.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管(v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime.Caching\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.Caching.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.ApplicationServices\v4.0_4.0.0.0__31bf3856ad364e35\System .Web.ApplicationServices.dll''FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):已加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.DirectoryServices.Protocols\v4。 0_4.0.0.0__b03f5f7f11d50a3a\System.DirectoryServices.Protocols.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.DirectoryServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.DirectoryServices .dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。FrazerMann.Profiler.UserInterface.TaskManager x threadIdx x blockIdx x blockDim 长度长度 x threadIdx x blockIdx x blockDim 长度 x threadIdx x blockIdx x blockDim GetLength x threadIdx x blockIdx x blockDim QuickSortOfValues1 x threadIdx x blockIdx x blockDim QuickSortOfValues1 QuickSortOfValues1 FrazerMann.Profiler.UserInterface。 TaskManager/o__SiteContainer0 编译器版本:v5.0 Net\assembly\GAC_MSIL\System.DirectoryServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.DirectoryServices.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。FrazerMann.Profiler.UserInterface.TaskManager x threadIdx x blockIdx x blockDim 长度长度 x threadIdx x blockIdx x blockDim 长度 x threadIdx x blockIdx x blockDim GetLength x threadIdx x blockIdx x blockDim QuickSortOfValues1 x threadIdx x blockIdx x blockDim QuickSortOfValues1 QuickSortOfValues1 FrazerMann.Profiler.UserInterface。 TaskManager/o__SiteContainer0 编译器版本:v5.0 Net\assembly\GAC_MSIL\System.DirectoryServices\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.DirectoryServices.dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。FrazerMann.Profiler.UserInterface.TaskManager x threadIdx x blockIdx x blockDim 长度长度 x threadIdx x blockIdx x blockDim 长度 x threadIdx x blockIdx x blockDim GetLength x threadIdx x blockIdx x blockDim QuickSortOfValues1 x threadIdx x blockIdx x blockDim QuickSortOfValues1 QuickSortOfValues1 FrazerMann.Profiler.UserInterface。 TaskManager/o__SiteContainer0 编译器版本:v5.0 C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v5.0\bin\nvcc -I"C:\Program Files\NVIDIA GPU 计算工具包\CUDA\v5.0\include" -m64 -arch=sm_20 "C :\Users\FrazMann\Desktop\Market Adj Entry CUDA - MK2\FrazerMann.Profiler.UserInterface\bin\x64\Debug\CUDAFYSOURCETEMP.cu" -o "C:\Users\FrazMann\Desktop\Market Adj Entry CUDA - MK2\ FrazerMann.Profiler.UserInterface\bin\x64\Debug\CUDAFYSOURCETEMP.ptx" --ptx CUDAFYSOURCETEMP.cu tmpxft_000010d0_00000000-5_CUDAFYSOURCETEMP.cudafe1.gpu tmpxft_000010d0_00000000-10_CUDAFYSOURCETEMP.cudafe2g.
'FrazerMann.Profiler.UserInterface.vshost.exe'(托管 (v4.0.30319)):加载 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Dynamic\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Dynamic .dll',跳过加载符号。模块已优化,调试器选项“仅我的代码”已启用。
sorting - CUDA 并行排序算法 vs 单线程排序算法
我有大量数据需要排序,数百万个数组,每个数组有数万个值。我想知道的是:
在 GPU 上实现并行排序算法并在所有数组中运行它会更好吗
或者
实现单线程算法,如快速排序,并为 GPU 的每个线程分配不同的数组。
显然速度是最重要的因素。对于单线程排序算法,内存是一个限制因素。我已经尝试实现递归快速排序,但它似乎不适用于大量数据,所以我假设存在内存问题。
要排序的数据类型很长,所以我不相信基数排序是可能的,因为数字的二进制表示会太长。
任何指针将不胜感激。
c# - 偏排序算法,为什么会有这么大的性能差异?
我有一个随机生成的数字列表,其中包含 1900 个数字,我想获得前 190 个数字的排序列表。我编写了两个版本的部分排序算法,第一个是 CPU 版本,第二个是为了在 Cudafy.net 上运行而编写的。但是它们之间的执行时间存在很大差异,当在 CPU 上运行时,我想知道是否有人可以解释为什么,+ 是否可以进一步加快第二个版本的速度?
注意:第二个算法将在 GPU 上运行,所以我不能使用 linq 或任何不能在 C 上运行的东西,因为我将使用 cudafy.net 来运行代码。不幸的是 cudafy.net 也不支持锯齿状数组。
版本 1:
上述版本在 ~ 0.65 毫秒内执行。
版本 2:
上面的执行时间为 2.8 毫秒,即慢了 4 倍。
我已经尝试过以下方法:
- 为 count 声明局部变量
maxLookBack
并在 for 循环中使用它 => 没有改进。 - 将数据类型从更改
long[,]
为int[,]
=> 2.6 毫秒(这是不可行的,因为我需要使用 long。) - 更改
int[,]
为int[]
=> 1.3 毫秒(这也不可行,因为我需要将多个数组传递给 GPU 以保持它被占用。)我很惊讶这对时间的影响有多大。
编辑:由于 Henk 的评论,我修改了代码。我现在在 GPU 上运行 GPU 版本,unsortedNumbers[32,1900]
与 CPU 排序 1 数组上的单个线程相比。即使我将 CPU 时间乘以 32,它仍然大大低于 GPU 的时间。
invalidoperationexception - cudafy 在测试时抛出异常
我在 Windows 7 64x 上使用 VS 2010。
我用以下代码创建了一个静态类 Cuda
我成功地使用了这个 GEMM 函数,但是当我尝试用这样的测试来测试我的代码时
我得到以下异常:
在我看来,问题在于 IDE 尝试使用 cudafy DLL 两次或两次初始化静态类...
我该如何解决?
===============编辑===============
我试图在我的类 MatrixTest 中使用来自 cudafy dll 的任何函数。嗯,它有效。但不是所有的。例如,Cudafy.Host.CudaGPU.GetDeviceCount() 返回零,就像没有找到支持 cuda 的设备一样。
当我尝试使用像 CudafyHost.GetDeviceCount(eGPUType.Cuda) 或 CudafyHost 类中的任何其他东西时,我得到了上述异常。
f# - alea.cuBase 和 CUBLAS
我开始了激动人心的 GPU 编程之路,如果我要做一些重量级的数字运算,我想使用那里最好的库。我特别想在 F# 环境中使用 cuBLAS。CUDAfy 提供了他们解决方案中的全套驱动程序,我也一直在查看 Alea.cuBase,它提出了一些问题。
GitHub 上的 Alea.cuSamples 项目对示例解决方案进行了隐秘的引用:“对于更高级的测试,请访问示例解决方案中的 MatrixMul 项目。” 但是,我找不到这些神秘项目的踪迹。
- 有谁知道难以捉摸的“示例解决方案中的 MatrixMul 项目”的位置?
- 鉴于 cuSamples 执行简单的矩阵乘法,更高级的版本,无论它位于何处,都会使用 cuBLAS 吗?
- 如果没有,有没有办法从 Alea.cuBase a la CUDAfy 访问 cuBLAS?
c# - CUDAFY,如何在结构中获取数组
如何在 cudafy 中拥有一个充满数组的结构?
这似乎是一个微不足道的问题,但我无法在网上找到它的简单实现。
一些链接表明它无法完成,例如参见:Passing an array within a structure in CUDAfy
虽然其他人建议它可以通过一个有点冗长的辅助函数来完成,例如参见http://cudafy.codeplex.com/discussions/283527
我希望将单个结构传递到我的 Cudafy 内核中,例如结构看起来像......
visual-studio - Cudafy 找不到 cublas,cudafft
感谢您阅读我的主题。
我的 Cudafy 无法加载cublas64_55.dll
我正在使用 Windows 7、VS2012 和 CUDA5.5。我的cublas64_55.dll、cufft64_35.dll等都在
而我的 CUDA_PATH 和 CUDA_PATH_5.5 环境变量都是
我不明白为什么 Cudafy 找不到它。有人有什么想法吗?非常感谢。
c# - 如何在 Cudafy GPU 内核中声明一个固定大小的数组
我想在内核中执行此操作:
我几乎肯定你可以在 CUDA GPU 内核中声明固定大小的数组。那么在使用 Cudafy 时我该如何做呢?这不起作用:
上述代码导致 C# 错误:“无法在变量声明中指定数组大小(尝试使用‘new’表达式进行初始化)。”