Multicore Support

Haben Sie Verbesserungsvorschläge oder Wünsche für eine neue MemBrain-Version? Haben Sie einen Bug entdeckt, der behoben werden sollte? Möchten Sie einfach nur eine positive oder negative Bewertung hinterlassen?

Dann ist dieses Forum der richtige Platz, um Ihren Beitrag einzubringen.
Post Reply
fostgate
Posts: 2
Joined: Thu 19. Nov 2009, 08:14

Multicore Support

Post by fostgate »

Hallo Thomas,

wäre es evtl. denkbar für das Training die Nutzung mehrerer Cores von Multicore Prozessoren zu implementieren?
Während des Trainings könnte die Berechnung auf z.B. 4 Kernen parallel laufen und die Daten könnten nach dem Durchlauf wieder gemerged werden?

Liebe Grüße,
Daniel
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Multicore Support

Post by Admin »

Ja, prinzipiell wäre das möglich, ist aber einiges an Implementierungsaufwand: Man müsste alle Layer in der Berechnung so auf mehrere Threads aufteilen, dass alle Rechnerkerne ausgelastet sind.
Im Moment finden alle Berechnungen in einem Thread statt, alle UI-Operationen in einem anderen. D.h., im Moment macht sich MemBrain max. 2 Cores zu Nutze (je nachdem wie das OS seine Cores auf die THreads verteilt). Wobei allerdings auch oft auch Berechnungen und UI aufeinander warten müssen...

Ich werde das mal im Hinterkopf behalten und hier wieder posten, wenn ich Neuigkeiten dazu habe.

Viele Grüße
Thomas Jetter
User avatar
Admin
Site Admin
Posts: 438
Joined: Sun 16. Nov 2008, 18:21

Re: Multicore Support

Post by Admin »

Also, hier ein kurzes Update zum Multicore Support:

In einer ersten Testimplementierung habe ich das mal umgesetzt und es stellt sich heraus, dass es nur Vorteile bei sehr mächtigen Netzen bringt, d.h., wenn die Layer über sehr viele Neuronen und dementsprechend sehr viele Links verfügen. Das kommt daher, dass man bei einem NN die Reihenfolge der Layer in der Berechnung (sowohl 'Think' als auch 'Teach') strikt einhalten muss, man kann also die Cores eines Rechners nicht einfach permanent parallel auf dem selben Netz laufen lassen. Vielmehr muss man jeden Layer aufteilen und vor der Berechnung des nächsten Layers warten, bis alle Teile des Vorgängerlayers berechnet wurden.
Der Overhead des damit verknüpften Thread-Managements macht sich erst bezahlt, wenn die Rechenzeiten für einen einzelnen Layer lang werden. Für einfache Netze und Netze mittlerer Komplexität ist das nicht der Fall, so dass man durch die Aufteilung auf mehrere Kerne deutlich langsamer wird, als wenn man alles auf einem Kern rechnen lässt.
Ich werde mal noch etwas weiter daran arbeiten und nach Optimierungen suchen. Es könnte auch sein, dass ich den Multicore-Support als Option in MemBrain einbaue, so dass man je nach Netzkomplexität die Abarbeitung durch mehrere Kerne oder durch einen einzelnen Kern nutzen kann.

Viele Grüße
Thomas Jetter
Post Reply