Изпълнение на CUDA GUI проби от пасивен (неактивен) GPU

Успях успешно да стартирам CUDA програми на GeForce GTX 750 Ti, докато използвах AMD Radeon HD 7900 като устройство за изобразяване (всъщност свързано с дисплея), използвайки това ръководство; например примерът за Векторно добавяне работи добре. Мога обаче да стартирам само приложения, които не произвеждат визуален изход. Например CUDA извадката на Mandelbrot не се изпълнява и се проваля с грешка:

Error: failed to get minimal extensions for demo:
  Missing support for:  GL_ARB_pixel_buffer_object
This sample requires:
  OpenGL version 1.5
  GL_ARB_vertex_buffer_object
  GL_ARB_pixel_buffer_object

Грешката произлиза от запитването на glewIsSupported() за тези разширения. Има ли някакъв начин да стартирате приложение, като тези CUDA проби, така че CUDA операциите да се изпълняват на GTX както обикновено, но Window да се изчертава на Radeon картата? Опитах се да убедя Nsight Eclipse да изпълни сесия за отдалечено отстраняване на грешки с моя собствен компютър като отдалечен хост, но нещо друго се провали веднага. Това наистина ли трябва да работи? Възможно ли е да се използва VirtualGL?


person freudberg    schedule 12.02.2015    source източник


Отговори (1)


Някои от примерите на NVIDIA CUDA, които включват графики, като примера на Mandelbrot, прилагат ефективна стратегия за рендиране: те свързват OpenGL структури от данни - Pixel Vertex Objects в случая на Mandelbrot - към CUDA масивите, съдържащи симулационните данни, и ги рендират директно от графичния процесор. Това избягва копирането на данните от устройството към хоста в края на всяка итерация на симулацията и води до светкавично бързо изобразяване.

За да отговоря на въпроса ви: примерите на NVIDIA както са трябва да изпълняват фазата на изобразяване на същия графичен процесор, където се изпълнява фазата на симулация, в противен случай графичният процесор, който обработва графиките, няма да има данните за изобразяване в паметта си.

Това не изключва, че пробите могат да бъдат модифицирани, за да работят с множество GPU. Трябва да е възможно да се копират симулационните данни обратно към хоста в края на всяка итерация и след това да се изобразят с помощта на персонализиран метод или дори да се изпратят по мрежата. Това би изисквало (1) модифициране на кода чрез отделяне и създаване на независими фази на симулация и изобразяване и (2) приемане на голямата загуба на кадри в секунда, която би произтекла от това.

person Bernardino Frola    schedule 12.02.2015