Biometrische Algorithmen in der Ära des ‚Parallel Computing‘

10/05/2013
Compartir!

Traditionell hat die Halbleiterindustrie eine Erhöhung der Taktgeschwindigkeit von Computern erreicht während sie die Anzahl der Transistoren in jeder neuen Generation verdoppelte. Wegen Leistungsbeschränkungen stagnierte das Wachstum der Taktfrequenz in den letzten zehn Jahren und große Mikroprozessorhersteller änderten ihr Produktportfolio zu Mehr-Kern-Architekturen. Moderne GPUs gehen sogar noch weiter und integrieren Hunderte von einfachen Kernen bei einem vernünftigen Leistungsbudget. Aufgrund dieser Tatsache haben Softwareunternehmen versucht sich anzupassen und traditionelle, sequentielle Algorithmen abzubilden, welche für die serielle Ausführung bei diesen neuen Geräten konzipiert wurden. Diese Parallelisierungsaufgabe ist nicht so einfach wie man vielleicht denken möchte. Im Allgemeinen tendieren Menschen dazu in einer sequentiellen Art und Weise zu denken und zu agieren. Sind Sie in der Lage sich schnell hunderte gleichzeitiger Aktionen parallel vorzustellen (einige von ihnen sogar mit Interdependenzen)? Die meisten der besten Köpfe und Programmierer auf der Welt sind es nicht und das ist auch verständlich. In unserem täglichen Leben neigen wir bei der Arbeit zu Überforderung wenn wir neun oder zehn wichtige Dinge zur gleichen Zeit tun. Einfach ausgedrückt scheint es, dass unser Gehirn nicht für Multitasking ausgelegt ist. Je mehr Aufgaben wir beabsichtigen parallel zu tun (zum Beispiel eine E-Mail und einen Anruf gleichzeitig zu beantworten), desto wahrscheinlicher ist es, dass wir aufgrund ungenügender Aufmerksamkeit einen Fehler machen. Das ist der Grund, weshalb schriftlich optimierten und skalierbaren, parallelen Code für Geräte wie GPUs zu schreiben ein langer und mühsamer Prozess ist. Das Schreiben von Code für diese Architekturen ist in der Regel fehleranfällig und schwer zu debuggen. Es ist nicht ungewöhnlich monatelang effizienten Parallelcode für einen bestimmten Kernel-Betrieb zu programmieren, wohingegen dessen serialisierte Version leicht programmiert und in ein paar Tagen getestet werden könnte.

Wenn in dieser neuen Ära des Parallel-Computing ein Unternehmen ein Software-Produkt veröffentlichen will, das in vollem Umfang die Fähigkeiten der neuesten, auf dem Markt erhältlichen, parallelen Hardware ausreizt, muss sie mehr Geld und Ressourcen aufbringen als dies früher der Fall war. Wir bei Herta Secutirty begannen mit der Parallelisierung unserer Produkte von Anfang an und erkannten bald, dass biometrische Algorithmen erheblich von feinkörniger Parallelisierung und datenparallelen Vektorberechnungen profitieren können. Verschiedene Phasen der traditionellen, biometrischen Pipeline wie die Merkmalsextraktion sind von Natur aus parallel. Die Komplexität der Speicherzugriffsmuster einiger Features machen jedoch Strategien wie die Wiederverwendung von Daten, das Caching und das Prefetching zu großen Herausforderung. Mit dem Aufkommen des GPU-Computing hat nun der Programmierer mit Millionen von gleichzeitigen Threads umzugehen, zu synchronisieren und effizient die heterogene Cache-Architektur dieser Geräte zu nutzen um Latenzzeiten so weit wie möglich zu reduzieren. Auch wenn diese Aufgaben von einer Forschungs- und Entwicklungsperspektive aus gesehen zeitaufwändig sind, ermöglichen sie uns doch das Schaffen qualitativ hochwertiger Produkte, welche gut zu skalieren sind und mit den neuesten Fortschritten in der Hardware eine unschlagbare Benutzererfahrung bieten.