public static IEnumerable <string> EnumerateDevices(bool openCL = false)//out string info, out bool driverInstalled) { int count = 0; string message = string.Empty; string info = string.Empty; IsDriverInstalled = true; List <string> sb = new List <string>(); List <GPGPUProperties> deviceProps = new List <GPGPUProperties>(); bool failed = true; try { count = openCL ? OpenCLDevice.GetDeviceCount() : CudaGPU.GetDeviceCount(); deviceProps = CudafyHost.GetDeviceProperties(openCL ? eGPUType.OpenCL : eGPUType.Cuda).ToList(); failed = false; } catch (DllNotFoundException dnfe) { sb.Add("Suitable driver not installed. " + dnfe.Message); IsDriverInstalled = false; } catch (GASS.CUDA.CUDAException ex) { if (ex.Message == "ErrorNotInitialized") { sb.Add("Found 0 CUDA devices."); } else { sb.Add("CUDAException: " + ex.Message); } } catch (Exception ex) { sb.Add("Error: " + ex.Message); } if (failed) { foreach (var s in sb) { yield return(s); } } else { yield return(string.Format("Found {0} devices.\r\n", count)); foreach (var prop in deviceProps) { yield return("Name: " + prop.Name); if (openCL) { yield return("OpenCL Version: " + prop.Capability.ToString()); } else { yield return("Compute capability: " + prop.Capability.ToString()); } if (!openCL && prop.Capability < new Version(1, 4)) { yield return("Note: This device will not support default calls to Cudafy(). Use overloads to give specific value."); } yield return(string.Empty); } } }