# HG changeset patch # User Morris Meyer # Date 1376337146 14400 # Node ID 5040ec3ff3aa41fbd8b9614b95fb1c2a6de9d39d # Parent 4a6b03a1680830a40f929592e85f70378d32f63c Defer PTX on Mac probe to the CUDA driver initialization call diff -r 4a6b03a16808 -r 5040ec3ff3aa src/os_gpu/bsd_ptx/vm/gpu_bsd.cpp --- a/src/os_gpu/bsd_ptx/vm/gpu_bsd.cpp Mon Aug 12 13:12:14 2013 -0400 +++ b/src/os_gpu/bsd_ptx/vm/gpu_bsd.cpp Mon Aug 12 15:52:26 2013 -0400 @@ -25,14 +25,14 @@ #include "runtime/gpu.hpp" #include "utilities/ostream.hpp" -#ifdef __APPLE__ -#include -#include -#endif void gpu::probe_gpu() { #ifdef __APPLE__ - set_available(gpu::Bsd::probe_gpu_apple()); + /* + * Let the CUDA driver initialization be the gate to GPU for now, pending + * a better detection solution for NVIDA PTX and AMD HSAIL. + */ + set_available(true); if (TraceGPUInteraction) { tty->print_cr("gpu_bsd::probe_gpu(APPLE): %d", gpu::is_available()); } @@ -44,56 +44,3 @@ #endif } -#ifdef __APPLE__ -/* - * This is rudimentary at best, but until we decide on a CUDA Compiler Compatibility - * level, this will have to suffice. - */ -bool gpu::Bsd::probe_gpu_apple() { - CGError err = CGDisplayNoErr; - CGDisplayCount displayCount = 0; - CFDataRef vendorID, deviceID, model; - CGDirectDisplayID *displays; - IOOptionBits options = kIORegistryIterateRecursively | kIORegistryIterateParents; - io_registry_entry_t displayPort; - - err = CGGetActiveDisplayList(0, NULL, &displayCount); - displays = (CGDirectDisplayID *)calloc((size_t)displayCount, sizeof(CGDirectDisplayID)); - err = CGGetActiveDisplayList(displayCount, displays, &displayCount); - - for (CGDisplayCount i = 0; i < displayCount; i++) { - displayPort = CGDisplayIOServicePort(displays[i]); - vendorID = (CFDataRef)IORegistryEntrySearchCFProperty(displayPort, kIOServicePlane, CFSTR("vendor-id"), - kCFAllocatorDefault, options); - deviceID = (CFDataRef)IORegistryEntrySearchCFProperty(displayPort, kIOServicePlane, CFSTR("device-id"), - kCFAllocatorDefault, options); - model = (CFDataRef)IORegistryEntrySearchCFProperty(displayPort, kIOServicePlane, CFSTR("model"), - kCFAllocatorDefault, options); - if (TraceGPUInteraction) { - tty->print_cr("vendor: 0x%08X", *((UInt32*)CFDataGetBytePtr(vendorID))); - tty->print_cr("device: 0x%08X", *((UInt32*)CFDataGetBytePtr(deviceID))); - tty->print_cr("model: %s", CFDataGetBytePtr(model)); - } - UInt32 vendor = *((UInt32*)CFDataGetBytePtr(vendorID)); - if (vendor != 0x10DE) { - return false; - } else { - /* - * see https://developer.nvidia.com/cuda-gpus - * see http://en.wikipedia.org/wiki/CUDA#Supported_GPUs - * see http://www.pcidatabase.com/reports.php?type=csv - * - * Only supporting GK104, GK106, GK107 and GK110 GPUs for now, - * which is CUDA Computer Capability 3.0 and greater. - */ - switch (*((UInt32*)CFDataGetBytePtr(deviceID))) { - case 0x11C0: - return true; // NVIDIA GeForce GTX 660 - default: - return false; - } - } - } - return false; -} -#endif diff -r 4a6b03a16808 -r 5040ec3ff3aa src/os_gpu/linux_ptx/vm/gpu_linux.cpp --- a/src/os_gpu/linux_ptx/vm/gpu_linux.cpp Mon Aug 12 13:12:14 2013 -0400 +++ b/src/os_gpu/linux_ptx/vm/gpu_linux.cpp Mon Aug 12 15:52:26 2013 -0400 @@ -43,11 +43,11 @@ bool gpu::Linux::probe_gpu() { /* - Open /proc/bus/pci/devices to look for the first CUDA enabled - device. For now, finding the first CUDA device. Will need to - revisit this wo support execution on multiple CUDA devices if - they exist. - */ + * Open /proc/bus/pci/devices to look for the first CUDA enabled + * device. For now, finding the first CUDA device. Will need to + * revisit this to support execution on multiple CUDA devices if + * they exist. + */ FILE *pci_devices = fopen("/proc/bus/pci/devices", "r"); char contents[4096]; unsigned int bus_num_devfn_ign;