2015-03-09 3 views
2

Например, у меня есть 2 графических процессора и 2 хост-потока. Я не могу проверить это, потому что многоязычный компьютер находится далеко от меня. Я хочу, чтобы первый поток хоста работал с первым графическим процессором, а второй хост-поток работал со вторым графическим процессором. Все потоки хоста состоят из множества вызовов cublas. Итак, можно ли выбрать fisrt GPU из первого хост-потока, а второй gpu из второго потока хоста вызовом cudaSetDevice()?Могут ли разные потоки установить различные графические процессоры в качестве их текущего устройства CUDA?

Например, для второго хост-потока я позвоню cudaSetDevice(1), а для первого потока я позвоню cudaSetDevice(0).

ответ

2

Итак, можно выбрать графический процессор fisrt из первого хост-потока и второй gpu из второго потока хоста вызовом cudaSetDevice()?

Да, это возможно. Пример приведен в cudaOpenMPsample code для этого вида использования (excerpting):

.... 
omp_set_num_threads(num_gpus); // create as many CPU threads as there are CUDA devices 
//omp_set_num_threads(2*num_gpus);// create twice as many CPU threads as there are CUDA devices 
#pragma omp parallel 
{ 
    unsigned int cpu_thread_id = omp_get_thread_num(); 
    unsigned int num_cpu_threads = omp_get_num_threads(); 

    // set and check the CUDA device for this CPU thread 
    int gpu_id = -1; 
--> checkCudaErrors(cudaSetDevice(cpu_thread_id % num_gpus)); // "% num_gpus" allows more CPU threads than GPU devices 
    ..., 
+0

Как я могу получить без знака Int статический связанных с нитью у меня на CPU? Если я вызываю GetCurrentProcessorNumber(), я получаю не постоянные числа. – jimifiki

+0

Это будет зависеть от используемой модели резьбы. Если вы используете OpenMP, 'omp_get_thread_num()' вернет уникальный идентификатор из 0 .. (# threads-1) для каждого потока, о котором знает OMP. –

Смежные вопросы