В школе имеется вычислительный кластер на GPU с 8 GPUS на каждом узле. И мы используем систему управления задачами SLURM для управления задачами. Система SLURM предписана, если на GPU есть задача, тогда новые задачи не будут назначены этому GPU.
Например: на узле 1 имеется 8 GPU TITAN XP, и ни одна задача не отправляется, поэтому мы можем использовать все 8 GPUS. В этой ситуации я могу использовать простой код на c ++ / cuda, чтобы использовать их все, например:
for(int i = 0; i < 8; i++) {
cudaSetDevice(i);
......
}
Но почти всегда кто-то имеет задачу отправки, они могут использовать только один или два графических процессора, , например . Его задача выполняется во втором графическом процессоре.
Если я отправлю свою задачу, также используйте приведенный выше простой код, он выдаст ошибку:
CUDA error at optStream.cu:496 code=10(cudaErrorInvalidDevice) "cudaSetDevice(coreID)"
Я не знаю, как решить эту ситуацию, я не хочу проверять номер неработающего графического процессора и перекомпилировать программу, это слишком неэффективно.
Так что мне нужен совет.