Page 1 of 1

Multicore Support

Posted: Mon 8. Mar 2010, 14:02
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

Re: Multicore Support

Posted: Mon 8. Mar 2010, 21:23
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

Re: Multicore Support

Posted: Sat 26. Jun 2010, 14:53
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