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);
                }
            }
        }