2011-03-14 9 views
6

Ağır numara çatırdama yapan ve GPU'nun% 100'ünü mutlu bir şekilde tüketen bir OpenCL Windows programım var. Bilgisayarı normal bir şekilde kullanırken arka planda çalıştırabilmek isterdim, ancak şu anda çok fazla masaüstü gecikmesine neden oluyor ve herhangi bir 3d uygulamayı kullanılamaz hale getiriyor.Düşük öncelikli OpenCL programını çalıştırabilmek için ("hoş" olun)?

OpenCL'de bir öncelik belirlemenin bir yolu var, böylece diğer işlemlere GPU gücü kazandıracak ve yalnızca yedek döngüleri kullanacak mı?

cevap

7

Ne yazık ki çoğu GPU bir seferde birkaç görevi yürütmeyi desteklemiyor ve bu nedenle öncelik atamanın bir yolu yoktur. Bu, OpenCL çekirdeğiniz çalıştığında, GPU tarafından yürütülen tek görevdir ve çekirdek tamamlanana kadar durum böyle olacaktır.

Çekirdeği çalıştırırken bilgisayarın kullanılabilmesini istiyorsanız (normal masaüstü etkinliği, göz atma, videolar, oyunlar) her çekirdek yinelemesinin çok hızlı olması gerekir. Bu nedenle, her bir çekirdek başlatma kümesi tarafından harcanan zamanı azaltabilirsiniz (yani, clEnqueueNDRangeKernel ile sıralanan her iş), aradığınız şeyi elde edebilirsiniz. Bu, NDRange'ın küçültülmesiyle elde edilebilirdi, ancak GPU üzerinde etkili olacak kadar büyük olması gerekiyordu. 5120 iş öğesi gibi bir şey, Radeon HD 5870'de en az olduğum şeydi. Veya her çekirdeğin miktarını azaltabilirsiniz.

Her bir küçültülmüş işin yürütme süresini saniyenin 1/2'si kadar düşürürseniz, bilgisayarın kullanılabilir olması için iyi bir şans vardır. Herhangi bir şey fark etmeden oyun oynarken her bireyin saniyenin 1/120'ini aldığı OpenCL programlarını çalıştırabildim.