Ani současné moderní GPU nemají bohužel stále tolik hrubého výkonu,
aby mohly realizovat kompletní normalizovanou křížovou korelaci pro
všechny pixely obrazu se všemi pixely hledaného patternu. Škoda,
řešení hrubou silou by poskytovalo nejpřesnější výsledky, ale
normalizované křížová korelace je opravdu výpočetně příliš náročná.
Proto i GPU algoritmus potřebuje několik optimalizací na výkon, které
vedou na nutnost několika vykreslovacích průchodů. Nový krok je
optimalizován tak, aby byla pokud možno co nejméně přenášena data mezi
pamětí CPU a pamětí grafické karty.
Všechna měření výkonnosti byla na počítači s CPU Intel Core i-5 a
GPU Nvidia GF680 GTX. GPU je již hodně vzdálená od současné výkonové
špičky, ale pro reálná nasazení v průmyslových podmínkách je toto
srovnání užitečné.
Srovnání výkonnosti předchozího GPU algoritmu, nového GPU
řešení a podobného kroku, řešeného prostřednictvím více jader
CPU.
Na výše uvedeném obrázku jsou uvedenu doby vykonávání v
nejvýhodnější variantě pro CPU algoritmus, je hledán jen jeden výskyt
korelace se vzorem a není vyžadováno žádné natočení či škálování.
Výkonový rozestup mezi CPU krokem a předchozím a novým GPU řešením je
viditelný, i když nijak dramatický.
Ve všech krocích je hledán tento stejný pattern.
Testovací obrázek má velikost 800 x 600 pixelů a výše uvedený
pattern je hledán v celé jeho ploše. Hledáme-li jediný výskyt vzoru a
nepotřebujeme-li rotační ani měřítkovou invarianci, jsou rozdíly ve
výkonu mezi jednotlivými algoritmy sice nejmenší, ale i v tomto
případě mohou být v některých úlohách velmi důležité. Situace se ale
hodně změní, budeme-li hledat více výskytů vzoru a ještě větší rozdíly
se objeví při požadavku hledání natočených patternů. Pojďme se
podívat, jaké budou rozdíly výkonnosti nyní:
V těchto testech již začíná dramaticky narůstat spotřeba času u CPU
algoritmu. Masivně paralelní podstata grafických procesorů ukazuje své
přednosti. Spotřeba času se u GPU algoritmů s množstvím hledaných
výskytů příliš nemění, neboť množství dat, přenášených mezi CPU a GPU
pamětí zůstává přibližně stejné. Přibude-li navíc ještě nutnost
testování korelací s pootočenými vzorovými obrazy, začíná být tato
úloha pro CPU opravdu velikou zátěží. V posledních výsledcích měření
je také dobře vidět, jakým přínosem je optimalizace nového GPU řešení
při opakovaných průchodech několika shaderů oproti staršímu GPU
algoritmu.
Nyní si můžeme prohlédnout výsledky u všech třech srovnávaných
kroků. Parametru hledání byly nastaveny shodně a výsledky jsou rovněž
dosti podobné. V tomto srovnání se zdají být výsledky nového GPU
řešení mírně lepší než u dalších dvou kroků.
Výsledku hledání vzorů u předchozího GPU
algoritmu
Výsledku hledání vzorů novým GPU krokem
Výsledku hledání vzorů u CPU algoritmu
Krok gpu_match_monochrome dále zůstává součásti
systému VisionLab. Všechny aplikace, kde je tento krok použit tedy
budou bez problémů fungovat i nadále. Pouze v paletě kroků grafického
editoru již není pro tvorbu nových aplikací nabízen a je nahrazen
novým krokem gpu_pattern.
Schopnosti modernizovaného GPU algoritmu mohou být přínosem pro
řešení úloh vizuální inspekce.
Roman Cagaš
|