Как заставить NVIDIA OpenCL освободить контекст графического процессора, чтобы избежать утечки памяти - PullRequest
0 голосов
/ 11 апреля 2020

Это дополнительный вопрос к более раннему вопросу .

. Из обсуждения код mm c (https://github.com/fangq/mmc) выглядит так: хорошо, и память была правильно освобождена при работе на процессорах Intel и AMD GPU. Однако на графическом процессоре NVIDIA valgrind сообщил о значительной утечке памяти, так же как и тест. Каждый раз после цикла создания и выпуска контекста GPU память продолжала увеличиваться.

Вы можете увидеть этот результат в отчете профилирования памяти (синяя линия) ниже. enter image description here

Вот тест и команды для воспроизведения проблемы (необходимо запустить ее на графических процессорах NVIDIA):

git clone https://github.com/fangq/mmc.git
cd mmc/src
sed -i -e 's/mmc_init_from_cmd/for(int i=0;i<5;i++){\nmmc_init_from_cmd/g' mmc.c
sed -i -e 's/return/getchar();}\nreturn/g' mmc.c
make clean
make all
cd ../examples/validation
../../src/bin/mmc -f cube2.inp -G 1 -s cube2 -n 1e4 -b 0 -D TP -M G -F bin

запустить ../../src/bin/mmc -L, чтобы получить список GPU, используйте -G #, чтобы указать, какой GPU использовать.

, как вы увидите, симуляция будет повторяться 5 раз, разделенных клавишами ввода. Вы можете запустить монитор памяти, например, команду top в Linux, и видеть увеличивающееся распределение памяти после каждого повторения.

Я гуглил и нашел несколько предыдущих отчетов об утечках памяти OpenCL, но я не нашел решение. Я хотел бы знать, есть ли какая-нибудь хитрость, чтобы заставить драйвер NVIDIA OpenCL очищать память после каждого запуска. Я спрашиваю об этом, потому что mm c имеет функцию MATLAB / Octave mex, которую можно вызывать несколько раз, и эта проблема может привести к значительному использованию памяти после нескольких вызовов.

...