A slightly different question, but a continuation, How to use GPU to speed up the parallel operation in vb.net? :
Does anybody have any suggestions on which GPU programming interfaces work best with RhinoCommon? (I’m aware that the functions provided by RhinoCommon won’t carry over to the GPU and I’ll have to write my own logic functions for geometry.) I’ve found the following wrappers that make CUDA and/or OpenCL usable in C# .NET and I wonder if anyone has experience using them.
See also this list by Campy from November 2018.
Under active development:
CUDA and OpenCL
- ILGPU - Works on .NET Core or Framework. Kernels are written in C#, and can be called on any type of accelerator (CPU, CUDA, OpenCL). Good documentation. Free, NCSA license, available on NuGet.
- Amplifier.NET - Free/MIT License. Available on NuGet. OpenCL only. Relatively limited documentation, but at least the complete API listing. Kernel written in C#.
- ALEA - “Code runs as fast as CUDA C”; commercial solution, has a free license that only works on consumer GPUs (excluding high-performance compute GPUs offered on Google Cloud Platform). Has good documentation that seems to be useful beyond just this tool. Extensive sample code, too.
- Hybridizer - Non-free (commercial) solution, 3 month free trial (pricing buried here on the website) . Good documentation and samples. Perhaps a complicated build process?
- Campy - “Compiler, Runtime and API”, memory management by the compiler, integrated in to the - NuGet Update Jan 2019, Free/MIT License
- CUDAfy (also on Codeplex) - last updated apparently in 2015. Despite the name works with both OpenCL and CUDA. Can’t find the documentation. Free and Commercial licenses are provided (but no apparent purchasing mechanism…)
- ManagedCUDA - works only with .NET Core (even though RhinoCommon requires .NET Framework - I don’t understand it yet but these guys were successful). GPU code is written in CUDA-C, compiled with the NVIDIA toolkit
- Cloo - NuGet package has 2019 release? Code is written in OpenCL-C
Personally, I’d like to stick with OpenCL (principally because I’m testing on Intel graphics hardware and Google is not making the GPU provisioning very easy which would allow access to very powerful GPUs at a reasonable cost) but if the consensus is that CUDA (being more proprietary and therefore more efficient) is better, I allow myself to be convinced. I’d also prefer to continue coding in C# if I can, but I’m open to other, better options.
Also, does anyone know of an RTree port to either GPU framework, or have any other suggestions for culling surfaces/meshes for ray-intersection testing?