From 36ba75b598886d0f734de88d3d3b0e92b6debab0 Mon Sep 17 00:00:00 2001 From: castano Date: Thu, 30 Oct 2008 04:50:41 +0000 Subject: [PATCH] Select fastest device. --- src/nvtt/Compressor.cpp | 10 +++++++++- src/nvtt/cuda/CudaUtils.cpp | 32 +++++++++++++++++++++++++++++++- src/nvtt/cuda/CudaUtils.h | 3 ++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/nvtt/Compressor.cpp b/src/nvtt/Compressor.cpp index ee0164f..197e480 100644 --- a/src/nvtt/Compressor.cpp +++ b/src/nvtt/Compressor.cpp @@ -221,8 +221,12 @@ Compressor::Compressor() : m(*new Compressor::Private()) if (m.cudaEnabled) { + // Select fastest CUDA device. + int device = cuda::getFastestDevice(); + cuda::setDevice(device); + m.cuda = new CudaCompressor(); - + if (!m.cuda->isValid()) { m.cudaEnabled = false; @@ -247,6 +251,10 @@ void Compressor::enableCudaAcceleration(bool enable) if (m.cudaEnabled && m.cuda == NULL) { + // Select fastest CUDA device. + int device = cuda::getFastestDevice(); + cuda::setDevice(device); + m.cuda = new CudaCompressor(); if (!m.cuda->isValid()) diff --git a/src/nvtt/cuda/CudaUtils.cpp b/src/nvtt/cuda/CudaUtils.cpp index fcf2a97..745b478 100644 --- a/src/nvtt/cuda/CudaUtils.cpp +++ b/src/nvtt/cuda/CudaUtils.cpp @@ -149,7 +149,37 @@ int nv::cuda::deviceCount() } #endif return 0; -} +} + +int nv::cuda::getFastestDevice() +{ + const int device_count = deviceCount(); + + int max_gflops_device = 0; + int max_gflops = 0; + + int current_device = 0; + while (current_device < device_count) + { + cudaDeviceProp device_properties; + cudaGetDeviceProperties(&device_properties, current_device); + int gflops = device_properties.multiProcessorCount * device_properties.clockRate; + + if (device_properties.major != -1 && device_properties.minor != -1) + { + if( gflops > max_gflops ) + { + max_gflops = gflops; + max_gflops_device = current_device; + } + } + + current_device++; + } + + return max_gflops_device; +} + /// Activate the given devices. bool nv::cuda::setDevice(int i) diff --git a/src/nvtt/cuda/CudaUtils.h b/src/nvtt/cuda/CudaUtils.h index 5a5bdab..c284401 100644 --- a/src/nvtt/cuda/CudaUtils.h +++ b/src/nvtt/cuda/CudaUtils.h @@ -30,7 +30,8 @@ namespace nv namespace cuda { bool isHardwarePresent(); - int deviceCount(); + int deviceCount(); + int getFastestDevice(); bool setDevice(int i); };