2

例如,我有 2 个 GPU 和 2 个主机线程。我无法检查它,因为 multigpu PC 离我很远。我想让第一个主机线程与第一个 GPU 一起工作,第二个主机线程与第二个 GPU 一起工作。所有主机线程都由许多 cublas 调用组成。那么是否可以通过 cudaSetDevice() 调用从第一个主机线程中选择第一个 GPU,从第二个主机线程中选择第二个 GPU?

例如对于我将调用的第二个主机线程cudaSetDevice(1),对于我将调用的第一个线程cudaSetDevice(0)

4

1 回答 1

2

那么是否可以通过 cudaSetDevice() 调用从第一个主机线程中选择第一个 GPU,从第二个主机线程中选择第二个 GPU?

是的,这是可能的。cudaOpenMP 示例代码中给出了此类用法的示例(摘录):

....
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
    ...,
于 2015-03-09T03:39:33.240 回答