Вопрос по interop, opengl – Почему cudaGLSetGLDevice не удалось, даже если он вызывается в первой строке основной функции

0

Я хочу использовать совместимость между OpenGL и CUDA. Я знаю, как говорилось в некоторых уроках, первый шаг - выбрать устройство. Однако когда я вызвал cudaGLSetGLDevice (0) в первой строке основной функции, программа завершила работу с информацией «cudaSafeCall () Runtime API error 36: невозможно установить, когда устройство активно в этом процессе».

На самом деле, хотя я и использую cudaDeviceProp и cudaChooseDevice до вызова cudaGLSetDevice, ошибка все еще существует.

Поверьте, у моего компьютера только один графический процессор 9800GT. И я знаю, что вызов cudaGLSetGLDevice должен предшествовать любой другой функции CUDA, поэтому я помещаю его в первую строку основной функции.

И я использую Windows SDK для рендеринга OpenGL вместо перенасыщения, это проблема?

Ваш Ответ

1   ответ
2

Вам нужно в контексте opengl инициализировать перед вызовомcudaGLSetDevice, В случае перенасыщенияglutInit(argc, argv); называется. Инициализируйте контекст opengl перед использованием любого вызова функций взаимодействия cuda & lt; -> gtg.

Этот ответ частично прав. Помимо установки контекста OpenGL, нам нужен glewInit () перед cudaGLSetDevice. TonyLic
Спасибо приятель. Но я использую Windows SDK, например, фрейм NeHe, вместо перенасыщения. Если вы не ошиблись, я думаю, что инициализация контекста будет ChoosePixelFormat SetPixelFormat wglCreateContext wglMakeCurrent. Итак, после вызова этих функций я вызвал cudaGLSetGLDevice. Тем не менее, ошибка все еще существует. Не могли бы вы помочь мне еще немного? Благодарю. TonyLic

Похожие вопросы