2012-12-05 6 views
6

Dwuczęściowa pytanie:OpenGL OpenCL czasy transferu współdziałanie + teksturowania z bitmapy

pracuję nad projektem szkoły, korzystając z gry życia jako pojazd do eksperymentowania z GPGPU. Używam OpenCL i OpenGL do wizualizacji w czasie rzeczywistym, a celem jest uzyskanie tego jak największego i najszybszego. Podczas profilowania stwierdzam, że czas ramki jest zdominowany przez CL, który pobiera i zwalnia bufory GL, i że koszt czasu jest wprost proporcjonalny do rzeczywistego rozmiaru bufora.

1) Czy to normalne? Dlaczego miałoby to być? Zgodnie z moim rozumieniem, bufor nigdy nie opuszcza pamięci urządzenia, a CL Acquire/Release działa jak muteks. Czy OpenCL blokuje/odblokowuje każdy bajt indywidualnie czy coś?

Aby obejść ten problem mam skurczyła z 24-bitowym trybie koloru RGBA (preferowany tryb koloru OpenGL jak rozumiem?) Do 8-bitowego koloru RGB. Doprowadziło to do znacznego przyspieszenia, ale po dostrojeniu jądra czasy transferu dominują ponownie.

Wobec braku pomysłów na całkowite wyeliminowanie czasu transferu (poza przeniesieniem jądra z OpenCL do GLSL, które przekraczałoby pierwotny zakres projektu), teraz uważam, że najlepiej jest pisać do bitmapy (w przeciwieństwie do 8-bitowej pixmapy, której aktualnie używam), a następnie użyć tej bitmapy z indeksem kolorów do tekstury kwadratu.

2) Czy mogę tekstury quad bezpośrednio za pomocą mapy bitowej? Rozważałem użycie glBitmap do narysowania bufora pomocniczego, a następnie użycie tego bufora do tekstury mojego kwadratu, ale wolałbym użyć bardziej bezpośredniej trasy, jeśli taka jest dostępna.

Odpowiedz

2

Intencją projekt za międzyoperacyjne nabywać CL/GL i uwalniają rozmowy był dla nich po prostu przenosi własności. Jednak w wielu wczesnych implementacjach wykonywano kopie obrazów z CL do GL iz powrotem.

ile używasz synchronizacji rozszerzeń obiektów w OpenCL 1.1, trzeba clFinish przed zwolnieniem i glFinish przed nabyć; ty będzie zobaczyć dużo czasu spędzonego tutaj, ponieważ wszystkie prace w kolejce będą musiały zakończyć, zanim te połączenia będą kontynuowane. Niektóre platformy mogą używać clFlush zamiast clFinish; sprawdź dokumentację OpenCL od swojego dostawcy.

z najnowszych sterowników NVIDIA i AMD na mniej lub bardziej niedawnego sprzętu, widzę na nabycie i uwolnienie połączeń będzie dość szybko dla wideo HD wielkości obrazów.

+0

Doskonały. Używam 1.0 (ograniczenia sprzętowe) i cieszę się, że te problemy zostały rozwiązane. Domyślam się, że naprawdę potrzebuję nowej karty wideo. –