Это дополнительный вопрос к более раннему вопросу .
. Из обсуждения код mm c (https://github.com/fangq/mmc) выглядит так: хорошо, и память была правильно освобождена при работе на процессорах Intel и AMD GPU. Однако на графическом процессоре NVIDIA valgrind
сообщил о значительной утечке памяти, так же как и тест. Каждый раз после цикла создания и выпуска контекста GPU память продолжала увеличиваться.
Вы можете увидеть этот результат в отчете профилирования памяти (синяя линия) ниже. ![enter image description here](https://i.stack.imgur.com/oobfp.png)
Вот тест и команды для воспроизведения проблемы (необходимо запустить ее на графических процессорах 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, которую можно вызывать несколько раз, и эта проблема может привести к значительному использованию памяти после нескольких вызовов.