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.
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. –