2012-12-05 16 views
6

İki parçalı soru: Ben GPGPU denemeye bir araç olarak hayatın oyunu kullanan bir okul projesi üzerinde çalışıyorumOpenGL-OpenCL birlikte çalışma transfer saatleri

. Gerçek zamanlı görselleştirmeler için OpenCL ve OpenGL kullanıyorum ve amaç bu şeyi olabildiğince büyük ve hızlı bir şekilde elde etmektir. Profilleme üzerine, çerçeve süresinin, CL arabelleklerinin alınması ve serbest bırakılması ile baskın olduğunu ve zaman maliyetinin, tamponun gerçek boyutuyla doğru orantılı olduğunu buluyorum.

1) Bu normal midir? Neden bu olmalı? Anlayışımın en iyisi için, tampon asla cihaz hafızasını terk etmez ve CL Acquire/Release, bir muteks gibi davranır. OpenCL, her baytı tek tek veya bir şey kilidini/kilidini açar mı?

Ben 24 bit RGBA renk modundan küçüldü ettik Bundan kaçınmak için (OpenGL'ın tercih renk modu bunu? Anladığım kadarıyla) 8 bit RGB renk. Bu, büyük bir hızlanma ile sonuçlandı, ancak çekirdeğimi ayarladıktan sonra aktarım süreleri yeniden baskın çıkıyor.

Aktarım sürelerinin tamamen ortadan kaldırılmasıyla ilgili herhangi bir fikir bulunmadığında (çekirdeğimin OpenCL'den GLSL'ye taşınması, projenin asıl kapsamını geçecek kadar kısa), şimdi en iyi seçeneğimin yazmak olduğunu düşünüyorum. bir bitmap'e (şu anda kullanıyorum 8-bit pixmap aksine) ve sonra bir dörtlü doku için bir renk indeksi ile bu bitmap kullanın.

2) Doğrudan bir bitmap kullanarak dörtlü yapıyabilir miyim? Ben bir yardımcı arabellek çizmek için glBitmap kullanarak düşündüm ve sonra bu arabayı dörtlümde doku oluşturmak için kullandım, ancak kullanılabilirse daha doğrudan bir yol kullanmayı tercih ederim.

cevap

2

CL/GL interop'un arkasındaki tasarım amacı, satın alma ve bırakma çağrılarının yalnızca sahiplik aktarımı olmasıydı. Ancak, birçok erken uygulamada, bu görüntüler CL'den GL'ye ve arkadan kopyalar yapıyordu. Eğer OpenCL 1.1 senkronizasyon nesne uzantıları kullanmak sürece

, size elde önce serbest bırakıp glFinish önce clFinish gerekir; burada harcanan çok zaman göreceksiniz çünkü tüm sıraya alınmış çalışmalar bu çağrıların devam etmesinden önce bitmek zorunda kalacaktır. ClFinish yerine clFlush kullanabileceğiniz bazı platformlar; satıcınızdan OpenCL belgelerini kontrol edin. az ya da çok yakın donanım üzerinde en son NVIDIA ve AMD sürücüleri ile

, ben acquire görüyorum ve bırakın bir HD video boyutlu görüntüler için oldukça hızlı gidiyor aramaları.

+0

Mükemmel. 1.0 (donanım sınırlamaları) kullanıyorum ve bu sorunların çözüldüğünü bilmekten memnuniyet duyuyorum. Gerçekten ihtiyacım olan şey yeni bir ekran kartı. –

İlgili konular