Forum: Mikrocontroller und Digitale Elektronik Cluster an phys. CPUs als eine Multicore CPU behandeln?


von Researcher (Gast)


Lesenswert?

Hallo Leute,

ist es eigentlich möglich, mehrere physikalische CPUs zu einer CPU 
softwareseitig zusammen zu fassen?

Uns schwebt da gerade ein Projekt vor, in dem wir gene 8 i.MX ARMs von 
Freescale zu einem Rechnerverbund zusammen "knüpfen".

Würde jeder ARM sein eigenes betriebssystem (Linux) mitbringen wäre 
schon einiges an Performance durch das OS belegt. Könnte man aber nur 
ein OS auf 8 ARMs verteilen wäre dies sicherlich sparsamer.

Einsatz von FPGAs wäre als Verbund auch kein Problem!

Gibt es dafür Beispiele?
von Thomas K. (rlyeh_drifter) Benutzerseite


Lesenswert?

Bei allen ARM singlecores die ich kenne ist der system-bus (AHB, AXI, 
AMBA) leider nicht herausgeführt, das wird nicht bringen was du dir 
vorstellst.

Aber um was gehts denn?
Hilft euch openmp.org vielleicht?
von Researcher (Gast)


Lesenswert?

Wie machen die es denn:
http://www.calxeda.com/
von Arc N. (arc)


Lesenswert?

Researcher schrieb:
> Wie machen die es denn:
> http://www.calxeda.com/

http://www.calxeda.com/products/energycore/ecx1000/techspecs
So wie damals Inmos bei den Transputern auch.

> Uns schwebt da gerade ein Projekt vor, in dem wir gene 8 i.MX ARMs von
> Freescale zu einem Rechnerverbund zusammen "knüpfen".

Geht's um richtige Rechenleistung (Integer, Fließkomma/SIMD, spezielle 
Algorithmen) oder nur um die Machbarkeit?

> Würde jeder ARM sein eigenes betriebssystem (Linux) mitbringen wäre
> schon einiges an Performance durch das OS belegt.

Von was/wem? Man muss keine Desktop-Distribution auf so etwas laufen 
lassen...

> Könnte man aber nur ein OS auf 8 ARMs verteilen wäre dies
> sicherlich sparsamer.

Kommt drauf an, wenn bspw. jede CPU nur einen Task hätte und keine 
Speicherverwaltung etc. braucht, dann ja, ansonsten nein.

> ist es eigentlich möglich, mehrere physikalische CPUs zu einer CPU
> softwareseitig zusammen zu fassen?

Warum nicht bzw. wie/was soll zusammengefasst werden?
von Researcher (Gast)


Lesenswert?

Ich will halt vermeiden, das ich 8 komplette rechner je Board brauche.

Wenn ich das ganze "Transputer Like" aufbaue wären es ja eben jeweis 8 
komplette Systeme plus "Netzwerk" (wie dies auch immer aussehen mag).
von (prx) A. K. (prx)


Lesenswert?

Du kannst auch asymmetrisch fahren. Einer hat das komplette OS drauf, 
die übrigen nur einen kleinen Hilfskernel. Klappt gut, wenn es um 
Compute-Cluster geht, deren ziemlich homogene Jobs sowieso zentral 
gesteuert und verteilt werden. Klappt sehr viel weniger gut, wenn da zig 
völlig disjunkte Prozesse mit viel I/O laufen, die sich bei diesem 
Schema durch die häufigen Kernelaufrufe gegenseitig blockieren.

In der Frühphase von Hochleistungsrechnern war das nicht selten, der 
zentrale Rechner war dann beispielsweise ein Standard-Mainframe.
von Researcher (Gast)


Lesenswert?

Also eher einen Master der alles (und alles aht) kann und 7 
(abgespeckte) Slaves die als "Rechenknecht" sich anbieten. Klingt Okay

Fragt sich nurnoch, wie man diese zur Kommunikation bringt. Ethernet 
würde ich da eher ungerne benutzen, alleine schon wegen dem Stromhunger.
von (prx) A. K. (prx)


Lesenswert?

Researcher schrieb:

> Fragt sich nurnoch, wie man diese zur Kommunikation bringt. Ethernet
> würde ich da eher ungerne benutzen, alleine schon wegen dem Stromhunger.

Du schreibst selbst, dass FPGAs in Frage kommen. Damit sollte sich doch 
problemlos shared Memory realisieren lassen, plus Interruptsystem. Die 
Slaves kriegen vor dort auch ihren Bootcode und werden vom Master 
gestartet. Brauchen dann nur noch lokales RAM wg. Performance, sonst 
nix.
von Murkser (Gast)


Lesenswert?

Dann mach Dir auch mal rechtzeitig Gedanken zu Cache Coherence, 
Multi-Core Interrupt Controller, und wenn Du tatsächlich Deine Hardware 
zusammengeklebt hast, wie Du das Ding dann noch sinnvoll programmieren 
willst.

Mit vertretbarem Aufwand wirst Du Deine 8 i.MX nicht so einfach 
zusammenpappen können, um damit was sinnvolles anzustellen. Nimm die 8 
Prozessoren und hänge sie über Ethernet an einen Hub und bau Dir einen 
konventionellen Cluster. Jeder Prozessor hat sein eigenes Linux, und Du 
programmierst das ganze Ding damit mit MPI.

Wenn Du einen ARM Multicore willst schaue Dich bei TI nach den OMAPS um. 
Oder bei nVidia guckst Du bei Tegra 2/3.

Murkser
von (prx) A. K. (prx)


Lesenswert?

Das hängt völlig von der Aufgabe ab.

Wenn der Cluster für eine bestimmte Aufgabe vorgesehen ist und jeder 
Slave ohne eigenes Multitasking für eine gewisse Zeit lokal an seinem 
Häppchen Arbeit rumwerkelt, dann ist die Komplexität sehr überschaubar.

Als Ersatz für universelle SMP-Systeme wie in PCs oder Handies/Tablets 
ist diese Konstruktion hingegen völlig ungeeignet.
von Researcher (Gast)


Lesenswert?

Mein Problem ist, das das System mobil, klein/leicht und (el.) 
Leistungsbegrenzt sein muss!

Aktuell laufen die Aufgaben auf einem Core i7 und 2xGPGPU.
Aufgaben sind u.A. Objekterkennung aus stereografischen Kamerasystemen 
sowie kinematische Berechnungen -> und alles in Echtzeit bei fast 400W 
:(.

Das es mit 8 ARMs nicht getan ist ist mir klar, nur ist ein 8er System 
mit weiteren 8er Boards kaskadierbar, bis man die Performance hat, die 
man braucht.

Wir dachten auch schon daran, uns mit einem (bzw. mehreren) dieser 
neuronalen Chips zu versorgen 
http://www.cognimem.com/products/chips-and-modules/CM1K-Chip/index.html
von Arc N. (arc)


Lesenswert?

Researcher schrieb:
> Mein Problem ist, das das System mobil, klein/leicht und (el.)
> Leistungsbegrenzt sein muss!
>
> Aktuell laufen die Aufgaben auf einem Core i7 und 2xGPGPU.
> Aufgaben sind u.A. Objekterkennung aus stereografischen Kamerasystemen
> sowie kinematische Berechnungen -> und alles in Echtzeit bei fast 400W

Schon mal gerechnet wieviele ARMs benötigt würden um alleine den i7 zu 
ersetzen? Die GPU des i.MX6 erreicht gerade mal 24 GFlops (single 
precision), der Cortex-A9 ist so gut wie vernachlässigbar, ein i5-2600K 
dagegen bis zu 92 GFlops (double precision, LinPack 1)), eine HD 5970 
928 GFlops (double precision)...

D.h. entweder zieht das ARM-System nachher min. genauso viel Strom 
(Zaubern können weder ARM, noch Freescale) oder man fängt an zu 
optimieren von handoptimierter SSE/AVX-Nutzung, über Optimierung der 
Algorithmen bis hin zu FPGA-Implementierungen)

> Das es mit 8 ARMs nicht getan ist ist mir klar, nur ist ein 8er System
> mit weiteren 8er Boards kaskadierbar, bis man die Performance hat, die
> man braucht.

Overhead durch das u.U. nötige kopieren und warten auf Daten 
miteinbezogen?

> Wir dachten auch schon daran, uns mit einem (bzw. mehreren) dieser
> neuronalen Chips zu versorgen
> http://www.cognimem.com/products/chips-and-modules/CM1K-Chip/index.html

1) 
http://ht4u.net/reviews/2011/intel_sandy_bridge_sockel_1155_quadcore/index18.php
(AVX optimiert 92 GFlops, ansonsten nur die hälfte)
von Zorg (Gast)


Lesenswert?

i7 + 2x GPU ersetzen wollen... da seid ihr bei ARM aber komplett an der 
falschen Adresse wenn das tatsächlich benötigt wird.

Schau Dir mal die AMD Fusion Teile an - die haben GPU und CPU integriert 
und etwas mehr power als die ARM basierten SoCs.
So ein E-350 z.B. hat ne 18W TDP.


Damit Du das mal besser einordnen kannst:
http://www.tomshardware.de/charts/desktop-cpu-charts-2010/Raw-Performance-SiSoftware-Sandra-2010-Pro-GFLOPS,2409.html

Da gaaanz unten isser.
von Researcher (Gast)


Lesenswert?

Ich habe nie gesagt, das die bisherige Hardware voll ausgelastet ist, 
oder?
Nur das sie viel zu Leistungshungrig ist! Die GPGPUs werden benutzt, da 
die Tasks "Unix Like" in ihre kleinste Einheit unterteilt wurde und so 
enorm viele single Threads unterteilt wurden.

Der Core i7 ist mehr oder weniger nur der Host für das OS und der 
Datensammler der Peripherie!
von Microman (Gast)


Lesenswert?

Hallo,

wenn ich das hier so verfolge, stellt sich für mich nicht die Frage wer, 
was, wo rechnet, sondern wie die Daten schnell genug von A nach B 
kommen. Wie verteilt z.B. ein Master die Daten schnell genug auf die 
"Worker-Units" und wie erhält er schnell genug die Ergebnisse? In einem 
System wie zwischen CPU und GPU ist enorme Bandbreite vorhanden, doch 
wie wäre es zwischen den i-MX's in einem Cluster.
Bei den Calxeda EnergyCore z.B. werden, soweit ich weiß, auf einer Karte 
von HP (Redstone) 10Gbit-Verbindungen von SoC zu SoC verwendet aber was 
haben die i.MX da alternativ zu bieten?
Mein Vorschlag wären z.B. FPGA-SoC von Altera oder Xilinx. Die haben 
schnelle serielle Tranceiver-Hardware mit der man eine Kommunikation zu 
den anderen SoC's aufbauen könnte innerhalb eines Clusters und zwischen 
den Clustern hätte man 2 mal Gigabit-Ethernet. Die zwei Cortex-A9 Kerne 
helfen schon mal beim Rechnen und die FPGA-Fabric auf den SoC kann evtl. 
auch noch für bestimmte Auswertungen mit einbezogen werden um eine 
weitere Beschleunigung zu erhalten. Linux sollte ( bei Altera schon im 
Simulator zu sehen) auch auf den Teilen laufen.

Ist natürlich wieder nur ein Ansatz von möglichen vielen.

Gruß Microman
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.