Я использую взаимодействие GL-CUDA для доступа к визуализированному каналу цвета GL в пользовательском ядре CUDA. Мой код работал на машине с Windows, но теперь я переключаюсь на машину с Linux, и внезапно ресурсы отображения становятся очень медленными. После удаления всего ненужного кода возникает проблема:
_viewer.launch_init(false, false, "test", 800, 600);
_viewer.launch_rendering(false);
for (int ii=0; ii<20; ++ii) {
GLuint pbo_test;
glGenBuffers(1, &pbo_test);
cudaGraphicsResource *res;
glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo_test);
glBufferData(GL_PIXEL_PACK_BUFFER, window_width*window_height*3*4, NULL, GL_STREAM_READ); // RGB floats
cudaGraphicsGLRegisterBuffer(&res, pbo_test, cudaGraphicsRegisterFlagsNone);
gpuErrchk(cudaGraphicsMapResources(1, &res, 0));
// do something in cuda...
gpuErrchk(cudaGraphicsUnmapResources(1, &res, 0));
}
Как видите, это просто визуализирует контент один раз, а затем пытается несколько раз упаковать его в PBO и отобразить/ unmap ресурсы. Обычно я помещаю что-то промежуточное, но этот шаг map / unmap очень медленный, иногда занимает десятки секунд и останавливает мой экран. Любая помощь приветствуется.
Я попытался отключить мой второй экран. Переключитесь на более низкую версию CUDA. Я мог бы попытаться поменять графический процессор на другой, чтобы посмотреть, поможет ли он с этой проблемой.
У меня Linux Ubuntu 14.04LTS, CUDA 10.1 (также пробовал с 9.2), и я использую OpenGL 330. Графический процессор представляет собой гигабайт RTX 2080 Ti. До этого он работал на Windows 10 с CUDA 10.1 на Nvidia RTX 2080 Ti. Работая, я имел в виду, что он может работать со скоростью 60 кадров в секунду достаточно плавно.