LINUX.ORG.RU

определить, занято ли устройство другим процессом

 


0

1

как? имеется 2 gpu устройства. на одном из них может уже что-то считаться. нужно сделать так, чтобы работа запускалась на том устройстве, которое не занято.

есть две идеи.

1) воспользоваться nvidia-smi примерно следующим методом:

# get memory usage on device 0
MEM0=`nvidia-smi -q -g 0 2>&1 | grep -A 2 -i utilization \
                | grep -i memory | tail -1 | awk '{print $3}' | sed s/\%//g`

# get memory usage on device 1
MEM1=`nvidia-smi -q -g 1 2>&1 | grep -A 2 -i utilization \
                | grep -i memory | tail -1 | awk '{print $3}' | sed s/\%//g`
}
#------------------------------------------------------------------------------

function get_gpu
{
# get gpu usage on device 0
GPU0=`nvidia-smi -q -g 0 2>&1 | grep -A 2 -i utilization \
                | grep -i gpu | tail -1 | awk '{print $3}' | sed s/\%//g`

# get gpu usage on device 1
GPU1=`nvidia-smi -q -g 1 2>&1 | grep -A 2 -i utilization \
                | grep -i gpu | tail -1 | awk '{print $3}' | sed s/\%//g`
}

get_mem
get_gpu

if [ $MEM0 -eq  0  -a  $GPU0 -eq  0  ];
then
        echo "I am taking device 0"
        export  DEVICE_TO_USE=0
else
        if [ $MEM1 -eq 0 -a  $GPU1 -eq 0];
        then
                echo "I am taking device 1"
                export DEVICE_TO_USE=1
        else
                echo "Both devices are in use. Giving up..."
                export DEVICE_TO_USE=-1;
        fi
fi

После этого передавать параметр $DEVICE_TO_USE в исполняемый код и там использовать в функции cudaSetDevice()

2) не мучаться с шелл-скриптом, а прямо внутре кода спрашивать, сколько на обоих девайсах имеется свободной памяти при помощи

cudaSetDevice(0);
cudaMemGetInfo(&freemem, &totalmem );
и если на каком-то freemem == totalmem, то на нем и запускать.

оба варианта не устраивают. мне хочется чтобы было как-то вроде

./a.out --wich_device_option=0

Такое вообще возможно? Я мало знаю о программировании gpu, так что прошу совета.



Последнее исправление: ntiy (всего исправлений: 1)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.