Forum: FPGA, VHDL & Co. Allgemeine Designfrage zur hochparallelen Beschleunigung mit FPGAs


von Simon D. (simd)


Lesenswert?

Liebes Forum,

ich verfolge einige Themen hier schon seit einiger Zeit anonym und finde 
es wirklich äußerst spannend, was sich so mancher von euch einfallen 
lässt :-)

Nun stehe ich aber mit meiner Uni-Arbeitsgruppe (keine Angst, keine 
Hausaufgaben oder Ähnliches) selbst mit so vielen Fragen da, dass ich 
mich gerne direkt an euch wenden möchte.

Kurz zum Hintergrund: wir sind alle Informatiker und haben im Bereich 
Elektronik nur minimale Grundkenntnisse. Für den Fall, dass wir unseren 
Plan in die Tat umsetzen, würden wir uns natürlich auch Hilfe von der 
entsprechenden Fakultät holen.

Meine Fragen hier sind also sehr allgemeiner Natur und haben für uns den 
Zweck vor allem ein paar Erfahrungen abzufragen und eine 
Entscheidungsgrundlage zu erstellen.

Nun zu dem Vorhaben:
Wir haben in der Arbeitsgruppe eine sehr große Datenbank, die das 
Ergebnis einer ziemlich einfachen Berechnung ist. Es geht hierbei nur um 
Stringoperationen. Leider wächst die Datenmenge exponentiell und es ist 
definitiv kein Ende in Sicht. Die vorhandenen und zukünftigen 
Kapazitäten mit normalen Computern sind also ausgereizt und werden es 
auch definitiv bleiben. Wir testen gerade zwar auch die Beschleunigung 
durch GPGPU und einige SIMD Erweiterungen, aber gleichzeitig denken wir 
auch in die "Special Purpose Hardware" Richtung.

Eventuell kennen von euch schon einige das COPACOBANA Projekt 
(http://www.copacobana.org/). Im Prinzip würde uns eine ähnliche 
Architektur vorschweben, also möglichst viele FPGAs, die parallel durch 
einen Controller koordiniert die Instanzen des Problems abarbeiten. 
Besonders viele Anforderungen haben wir nicht an die Hardware. Der FPGA 
Speicher darf relativ klein sein, wir haben als maximale Obergrenze 
dafür mal ca. 25kbit berechnet. Dafür sollte er dann einen möglichst 
hohen Takt fahren. Die Implementierung des Algorithmus im FPGA bekommen 
wir selbst vernünftig hin. Ein Eval-Board von Xilinx zum Spielen ist 
schon auf dem Weg ;-)
Besonders viele Logikblöcke sollten wir auch nicht brauchen, der 
Algorithmus ist eine verschachtelte Schleife mit einer einfachen 
Updateoperation. Habt ihr hier eventuell auch Vorschläge, welchen FPGA 
wir uns genauer ansehen sollten?

Was für uns nun interessant zu wissen ist, wie man die ganzen FPGAs 
koordinieren soll. Über einen parallelen Bus würde ja sicher Sinn 
ergeben, aber dieser darf natürlich nicht zum Flaschenhals werden. Für 
einen "Job" müsste an einen FPGA eine Gesamteingabegröße von etwa 15kbit 
geschickt werden, das Ergebnis ist maximal ein 8bittiger Wert. Die 
Berechnung selbst sollte ziemlich schnell ablaufen, also ist mit einem 
hohen Durchsatz zu rechnen. Was für bestehende Systeme könnten hier in 
Frage kommen, wenn z.B. 200 bis 300 FPGAs in einem System gebündelt 
werden sollen?
In dem Zusammenhang gibt es noch ein paar Überlegungen und somit evtl. 
Constraints: in dem System sollte zur Vor- und Nachbearbeitung eventuell 
noch ein "normaler" Computer stecken, also großzügig dimensionierter 
Xeon mit viel RAM und Ethernet. Wäre es z.B. denkbar die Anbindung 
direkt über PCIe zu machen? Oder bräuchte man eher einen Bus zum 
Verbinden der FPGAs und dann eine Brücke zu PCIe?

Abschließend möchte ich noch sagen, dass wir genau wissen, dass dies ein 
ambitioniertes Projekt ist, also möchte ich euch bitten konstruktiv auf 
meine Fragen einzugehen. Sollte ich (und davon gehe ich aus) 
Anforderungen oder Daten vergessen haben, die u.U. wichtig sind, bitte 
gebt mir Bescheid.

Vielen Dank für euren Input!
Simon

von Grendel (Gast)


Lesenswert?

Simon D. schrieb:
> Besonders viele Logikblöcke sollten wir auch nicht brauchen, der
> Algorithmus ist eine verschachtelte Schleife mit einer einfachen
> Updateoperation.

Das solltest Du evtl. etwas genauer ausführen.
Das "Besonders viele Logikblöcke sollten wir auch nicht brauchen" ist 
nicht unbedingt davon abhängig wie der C-Code aussieht ;-)

von lalala (Gast)


Lesenswert?

Simon D. schrieb:
> Wir haben in der Arbeitsgruppe eine sehr große Datenbank, die das
> Ergebnis einer ziemlich einfachen Berechnung ist.

Willst Du die Datenbank erzeugen, oder verwenden? Oder ist die sehr 
große (wie groß ist sehr groß?) Datenbank nur ein Zwischenergebnis?
Falls nicht, dann kann das leicht gegen :'COPACOBANA is suitable for 
parallel computation problems which have low communication 
requirements.'
Hast Du relativ 'low' communication requierements?

Also : Wie groß ist der Eigangstring (i.e. Datenbank?), wie viele 
Operationen werden ausgeführt? Wie lange dauert das ganze auf einem 
normalen PC?

von Simon D. (simd)


Lesenswert?

Zunächt schon einmal vielen Dank für eure Antworten.

Grendel schrieb:
> Das solltest Du evtl. etwas genauer ausführen.
> Das "Besonders viele Logikblöcke sollten wir auch nicht brauchen" ist
> nicht unbedingt davon abhängig wie der C-Code aussieht ;-)
Ich habe die Aussage von anderen Projekten transferiert, die ich so auf 
FPGA Basis gesehen habe. Es handelt sich hierbei um den Dynamic 
Programming Algorithmus von Smith und Waterman 
(http://en.wikipedia.org/wiki/Smith_Waterman_algorithm). Bevor jetzt 
jemand sagt, der braucht aber O(nm) Speicher: theoretisch ja, lässt sich 
aber auch linear umsetzen.
Wie ich also schon geschrieben hatte, es handelt sich um zwei Schleifen 
und eine Maximumsabfrage über drei Werte. Zusätzlich können wir für 
unsere Bedürfnisse noch ein paar speziellere Konditionen einführen, die 
die Laufzeit deutlich reduzieren können. Wenn mich mein Gefühl jetzt 
nicht arg trügt, sollte das eine ziemlich kleine Aufgabe für ein FPGA 
sein, oder?

lalala schrieb:
> Willst Du die Datenbank erzeugen, oder verwenden? Oder ist die sehr
> große (wie groß ist sehr groß?) Datenbank nur ein Zwischenergebnis?
> Falls nicht, dann kann das leicht gegen :'COPACOBANA is suitable for
> parallel computation problems which have low communication
> requirements.'
> Hast Du relativ 'low' communication requierements?
>
> Also : Wie groß ist der Eigangstring (i.e. Datenbank?), wie viele
> Operationen werden ausgeführt? Wie lange dauert das ganze auf einem
> normalen PC?
Die Datenbank existiert, müsste aber auf jeden Fall neu gerechnet 
werden, es geht also um Erzeugen. Nach aktuellem Stand müsste der 
Algorithmus etwa 5 Billiarden Mal ausgeführt werden (und nein, ich habe 
mich nicht verschrieben), Tendenz leider exponentiell steigend. Daher 
eben auch die Überlegungen, in welche Richtung es gehen soll.

Die durchschnittliche Wortlänge unserer DB haben wir kalkuliert und um 
nicht zu viel RAM im FPGA zu benötigen, haben wir eine Obergrenze von 
fünf Standardabweichungen genommen, damit würde der absolute Großteil 
durch die FPGA-Berechnungen erschlagen werden, nur ein kleiner Teil 
würde auf herkömmlichem Wege berechnet werden müssen. So bin ich auch 
auf die eingangs erwähnten Inputgrößen gekommen.

EDIT
Genau die Geschichte mit den "low communication requirements" liegt mir 
etwas im Magen. Ich glaube für COPACABANA wurde ein 64bit Bus benutzt, 
an dem dann aber eben auch 128 FPGAs hängen. Ich denke das ist der 
Bottleneck, den sie beschreiben. Bei uns müsste das wohl wesentlich 
breiter dimensioniert werden.
Ich hatte ja ursprünglich an mehrere CAN-Busse gedacht, da ich mich 
dafür schon für ein anderes Projekt ein klein wenig eingearbeitet hatte. 
Wie schnell nun die Berechnung auf einem FPGA im Detail ist, weiß ich 
natürlich leider nicht, aber sie wird wohl einiges schneller sein, als 
1s. Ob dann die 1Mbit/s von CAN reichen, fraglich.
/EDIT

Ich hoffe, die Infos helfen erstmal weiter.

Danke für eure Zeit!
Simon

: Bearbeitet durch User
von lalala (Gast)


Lesenswert?

Simon D. schrieb:
> Nach aktuellem Stand müsste der
> Algorithmus etwa 5 Billiarden Mal ausgeführt werden (und nein, ich habe
> mich nicht verschrieben)

Naja, eine Billiarde ist auch nicht sooo viel. Aktuelle GPUs schaffen 3 
TFlop/s. D.h. falls wir für Deinen 'einfachen' Algorithmus (den ich 
wirklich noch nicht verstanden habe) mal 20 Flop annehmen, dann rechnet 
sich das in 10 Stunden durch. Also machbar. Natürlich ist dann
>  Tendenz leider exponentiell steigend.
nicht so schön.

von Simon D. (simd)


Lesenswert?

lalala schrieb:
> Naja, eine Billiarde ist auch nicht sooo viel. Aktuelle GPUs schaffen 3
> TFlop/s. D.h. falls wir für Deinen 'einfachen' Algorithmus (den ich
> wirklich noch nicht verstanden habe) mal 20 Flop annehmen, dann rechnet
> sich das in 10 Stunden durch. Also machbar. Natürlich ist dann
>>  Tendenz leider exponentiell steigend.
> nicht so schön.
Da hast Du wohl recht. Ein kurzer Vergleich: mit einer deutlich 
aufwändigeren Implementierung dieses Algorithmus (Vorfilter, diverse 
Constraints,...) wurde diese Datenbank in etwa 10 Jahren durch ein 
Public Distributed Computing Projekt erstellt, da war schon immer 
relativ viel Rechenleistung zur Verfügung.

Bei der Abschätzung, wie viele Operationen nötig sind, tue ich mich 
etwas schwer, da mir das Vorwissen um die FPGAs noch fehlt. Es lässt 
sich aber runterbrechen auf (alles Maximalwerte):

3000 Additionen (Schleifenvariablen)
9 Mio Zahlenvergleiche
13,5 Mio Additionen (für Werte in der Matrix)
2,25 Mio Lookups in einem "Array", also Zeichenvergleiche an Stellen in 
den Inputstrings

EDIT:
Es geht übrigens immer nur um Ganzzahlen. Die Inputstrings können sogar 
so codiert werden, dass 5bit pro Stelle ausreichen. Für die Werte in der 
Matrix reichen 7bit, da wir einen Cutoff einführen, der größere Zahlen 
überflüssig machen würde.

HTH
Simon

: Bearbeitet durch User
von Grendel (Gast)


Lesenswert?

Simon D. schrieb:
> Ich hatte ja ursprünglich an mehrere CAN-Busse gedacht, da ich mich
> dafür schon für ein anderes Projekt ein klein wenig eingearbeitet hatte.

Das vergiss mal ganz schnell wieder.
Auch wenn der eher lahm ist, DA wäre der 64 Bit Bus der Copacobana schon 
deutlichst besser geeignet...
Da hast Du mit FPGAs gaaanz andere Möglichkeiten als mit 0815 
Mikrocontrollern die Du vielleicht vorher angeschaut hast.


Sieht mir aber so aus als wäre das mit FPGAs machbar. Gibt ja schon 
einige Paper dazu da stehts ja drin ;-)

von Georg A. (georga)


Lesenswert?

Smith-Waterman klingt nach Sequenzsuche, die 5Bit nach Proteinen. Hab 
mich vor ~5 Jahren auch mal kurz damit beschäftigt. Unser Biologe wollte 
auch was schnelleres ;)

Da sollte es aber inzwischen doch schon einiges geben, gerade auch mit 
FPGAs. Gefühlt war Smith-Waterman 1:1 in HW umgesetzt eher unpraktisch, 
gerade wegen dem "Dynamic Programming", was den Ablauf schon sehr 
unregelmässig macht. Ein Problem ist auch noch die Datenmenge, die man 
durchs FPGA bekommen muss.

von Stauffenbiehl (Gast)


Lesenswert?

Die Bandbreite ist doch bei FPGAs am Höchsten. Da würde ich mir keine 
Sorgen machen. Das k.o. kommt durch die dynamischen Rechenzyklen. Das 
lässt sich nur virtuell abbilden und da sind CPUs einfach 
prädestinierter, wenn es komplizierter wird.

von Simon D. (simd)


Lesenswert?

Grendel schrieb:
> Das vergiss mal ganz schnell wieder.
> Auch wenn der eher lahm ist, DA wäre der 64 Bit Bus der Copacobana schon
> deutlichst besser geeignet...
> Da hast Du mit FPGAs gaaanz andere Möglichkeiten als mit 0815
> Mikrocontrollern die Du vielleicht vorher angeschaut hast.
Das dachte ich mir ehrlich gesagt bereits :-)

Grendel schrieb:
> Sieht mir aber so aus als wäre das mit FPGAs machbar. Gibt ja schon
> einige Paper dazu da stehts ja drin ;-)
Richtig, daher auch die Aussage, dass die Implementierung von uns 
durchführbar ist, auch wenn noch einige Anpassungen vorzunehmen sind.

Georg A. schrieb:
> Smith-Waterman klingt nach Sequenzsuche, die 5Bit nach Proteinen. Hab
> mich vor ~5 Jahren auch mal kurz damit beschäftigt. Unser Biologe wollte
> auch was schnelleres ;)
Alles vollkommen richtig erkannt :-) Ich wusste nicht, wie viel 
Vorwissen in dem Forum dazu vorhanden ist und wollte den Inhalt auf die 
für uns interessanten Punkte fokussieren.

Georg A. schrieb:
> Da sollte es aber inzwischen doch schon einiges geben, gerade auch mit
> FPGAs. Gefühlt war Smith-Waterman 1:1 in HW umgesetzt eher unpraktisch,
> gerade wegen dem "Dynamic Programming", was den Ablauf schon sehr
> unregelmässig macht. Ein Problem ist auch noch die Datenmenge, die man
> durchs FPGA bekommen muss.
Ich bin mir dessen auch bewusst, habe die Literatur einschlägig 
studiert. Es geht hier auch nicht darum das für eine kleine Workstation 
oder so zu basteln, wir brauchen die Vorschlaghammermethode, um unseren 
Datenmengen beizukommen. Insofern ist es ok, wenn der Algorithmus nicht 
der Idealfall für FPGAs ist, aber trotzdem ein ordentlicher Speedup raus 
kommt.

Das mit der Datenmenge ist allerdings ein interessanter Punkt. Meine 
Kalkulationen haben ja schon die Obergrenze an Daten gezeigt, die in den 
FPGA geschaufelt werden müssen. Nun fehlt mir eben die Erfahrung um 
einschätzen zu können, ob das sehr viel, oder nicht ist.

Stauffenbiehl schrieb:
> Die Bandbreite ist doch bei FPGAs am Höchsten. Da würde ich mir keine
> Sorgen machen. Das k.o. kommt durch die dynamischen Rechenzyklen. Das
> lässt sich nur virtuell abbilden und da sind CPUs einfach
> prädestinierter, wenn es komplizierter wird.
Siehe mein Kommentar oben. Den Vergleich zu den CPUs machen wir aktuell 
auch, haben testweise Xeon Phi Karten geordert.

Am Ende ist es eine Frage des Preis/Leistungsverhältnis. Auch wenn die 
FPGA Implementierung die CPU nicht um Welten schlägt, so kosten 100 
(kleine) FPGAs immer noch weniger in Anschaffung und Unterhalt, als 10 
große Server und sind laut meinen Recherchen trotzdem noch ein gutes 
Stück schneller. Und hier geht es dann eben um die Anschaffung in einer 
Größenordnung von deutlich mehr, als diese Hausnummer.
Zusätzlich gibt es starke Akademieprogramme der Hardwarehersteller, ein 
paar Spenden in Form von Silizium sind also immer drin.

Um also den Thread wieder etwas auf Spur zu bringen:
Ob die FPGA-Strategie umgesetzt wird, hängt von unseren Leistungstests 
mit dem Dev-Board ab. Und natürlich auch davon, wie sich Tesla und Xeon 
Phi Karten verhalten.

Was uns nun interessiert ist der Aufbau des Gesamtsystems und dabei vor 
allem, wie der Bus spezifiziert werden müsste, um einen vernünftigen 
Durchsatz zu erhalten. Die Parameter dafür denke ich sind genannt, wenn 
euch noch Infos fehlen, sagt es mir bitte.
zusätzlich ist dann noch offen, wie dieses System an ein normales Board 
angeschlossen werden könnte, um einerseits die Anbindung ans Netz zu 
bekommen und andererseits noch Vor- und Nachbearbeitung auf den 
Datensätzen durchführen zu können. Oder ob es Sinn macht, einen eigenen 
kleinen Controller zu bauen, der von dem Bus (oder auch mehreren Bussen) 
auf Ethernet überbrückt.

Vielen Dank für eure wirklich konstruktiven Kommentare,
Simon

von Kest (Gast)


Lesenswert?

Es hört sich alles unheimlich spannend und interessant an. Was mir nicht 
ganz klar ist ist der Kostenrahmen.
Mag sein, dass die "FPGA"s preiswert sind, aber wenn man die 
Entwicklung, Produktuion/Programmierung/Fehlersuche dazurechnet, dann 
wird es schon teuer. Klar, als Student arbeitet man ja vielleicht für 
umsonst, aber meist geht es doch schief.
Holt euch jemanden dazu, der sich damit auskennt (ich meine mit 
Konzepten und mit FPGAs). Sicher, die erste Kostenschätzung wird auf 
jeden Fall ein Schocker ("WAS? Dafür bekommen wir doch 10 schnelle 
Server!"), aber da muss man eben durch.

Wenn eine FPGA-Lösung in Betracht kommt, dann sollte man sich natürlich 
überlegen, wo der Flaschenhals liegen würde. Vielleicht wäre ein 
PC-Modul gar nicht mal so schlecht, welches über PCIe mit dem "großen" 
Mainboard verbunden ist und worauf dann mehrere kleinere "FPGA"-Karten 
steckbar sind. Oder über USB 3.0 angebunden.

Oder man setzt auf Cyclone 5 (oder Xilinx Äquivalent) mit einem ARM 
Prozessor drauf und baut daraus einen Grid. Über Ethernet verteilt man 
die Aufgaben, der Arm läuft mit 800 MHz (Dualcore, Linux) und 
kommuniziert direkt mit dem FPGA-Core (mehr Bandbreite bekommt man 
einfach nicht hin). Die einzelnen Platinen sind "klein", universell... 
Dann setzt man alles in einen 3 HE-Rack rein (16-32 Mal) und gut is 
(Switch und Stromversorgung baut man halt noch mal rein)... So würde ich 
es machen... aber ich habe kein Plan davon, wie die Anforderungen an den 
Algorithmus sind.

Grüße
Kest

von Simon D. (simd)


Lesenswert?

Kest schrieb:
> Es hört sich alles unheimlich spannend und interessant an. Was mir nicht
> ganz klar ist ist der Kostenrahmen.
> Mag sein, dass die "FPGA"s preiswert sind, aber wenn man die
> Entwicklung, Produktuion/Programmierung/Fehlersuche dazurechnet, dann
> wird es schon teuer. Klar, als Student arbeitet man ja vielleicht für
> umsonst, aber meist geht es doch schief.
> Holt euch jemanden dazu, der sich damit auskennt (ich meine mit
> Konzepten und mit FPGAs). Sicher, die erste Kostenschätzung wird auf
> jeden Fall ein Schocker ("WAS? Dafür bekommen wir doch 10 schnelle
> Server!"), aber da muss man eben durch.
>
> Wenn eine FPGA-Lösung in Betracht kommt, dann sollte man sich natürlich
> überlegen, wo der Flaschenhals liegen würde. Vielleicht wäre ein
> PC-Modul gar nicht mal so schlecht, welches über PCIe mit dem "großen"
> Mainboard verbunden ist und worauf dann mehrere kleinere "FPGA"-Karten
> steckbar sind. Oder über USB 3.0 angebunden.
>
> Oder man setzt auf Cyclone 5 (oder Xilinx Äquivalent) mit einem ARM
> Prozessor drauf und baut daraus einen Grid. Über Ethernet verteilt man
> die Aufgaben, der Arm läuft mit 800 MHz (Dualcore, Linux) und
> kommuniziert direkt mit dem FPGA-Core (mehr Bandbreite bekommt man
> einfach nicht hin). Die einzelnen Platinen sind "klein", universell...
> Dann setzt man alles in einen 3 HE-Rack rein (16-32 Mal) und gut is
> (Switch und Stromversorgung baut man halt noch mal rein)... So würde ich
> es machen... aber ich habe kein Plan davon, wie die Anforderungen an den
> Algorithmus sind.
Danke für Deine Antwort.

Vollkommen klar, ohne fachkundige Hilfe wird das nicht umzusetzen sein. 
Deshalb habe ich ja eingangs bereits erwähnt, dass wir uns die 
E-Techniker von der TU ins Boot holen wollen, falls wir uns für dieses 
Vorgehen entscheiden. Nichtsdestotrotz brauchen wir erstmal eine 
Entscheidungsgrundlage für uns im Haus. Und wenn wir ganz mit leeren 
Händen ankommen, kann es schnell so wirken, als ob wir nur Arbeit 
abwälzen wollen, daher die intensiven Recherchen vorneweg.

Zum Kostenrahmen:
Das ist natürlich nicht ganz leicht zu sagen, aber ich will es mal so 
ausdrücken: Manpower ist vorhanden und Doktoranden kosten nicht die Welt 
;-) es geht also hier wirklich primär um die für unseren Zweck beste 
Implementierung im Large-Scale Bereich. Klar, man kann auch nochmal 10 
Racks mit Servern voll klatschen, das würde auch irgendwer bezahlen, 
aber die Aussicht auf die stetig wachsende Datenmenge verlangt einfach 
einen etwas "more sophisticated" Plan.
Daher sollte das Konzept auch möglichst modular und erweiterbar sein. 
Und wie ich bereits gesagt habe, Hardwarespenden sind definitiv in 
Aussicht (in Form von FPGAs). Intel hat sich bisher noch nicht gemeldet 
und wollte uns ein par Hundert Xeons schicken ;-)

EDIT
Vielleicht noch ein kleiner interessanter Nachtrag:
Wir haben von Firmen Angebote für so ein System bekommen, da wären dann 
~100 FPGAs drin und das soll dann so zwischen 80k und 90k kosten. Das 
Problem ist halt nur, dass uns die Leistung nicht reicht (laut den 
Leistungsangaben der Hersteller) und damit zwei, drei, vielleicht vier 
solcher Systeme her müssten. Um das Geld einerseits sinnvoller (sprich 
in mehr Silizium) zu investieren und andererseits ein noch besser auf 
uns zugeschnittenes Design zu haben, wollen wir das selbst angehen (wie 
gesagt, falls die Tests positiv ausfallen).

In dem Zusammenhang wäre es dann noch sehr hilfreich, wenn ihr mir 
erläutern könntet, was die Performance bei den FPGAs ausmacht. Ist das 
nur der Takt alleine? Oder gibt es andere Werte (Speicherzugriffszeiten, 
spezielle arithmetische Einheiten, etc.) die das beeinflussen?
/EDIT

Entwicklungskosten bezogen auf die Implementierung schätze ich als 
gering ein, da auf diesem Feld (wie weiter oben schon richtig erwähnt 
wurde) schon sehr viel Arbeit gemacht wurde und wir nur Änderungen 
einfügen müssen. Dann bleibt noch die Infrastrukturentwicklung und 
Debugging und ja, das kann dauern. Aber wir haben als Zeitrahmen auch 
locker ein Jahr zur Verfügung.

Die Sache mit dem ARM finde ich aber interessant. Wie muss ich mir das 
vorstellen? Ist das ein ARM direkt mit FPGA integriert? Und die 
Verbindung von einer Recheneinheit (mit einem FPGA) soll dann über 
Ethernet laufen?
Das erscheint mir aber viel Overhead. Deshalb fand ich COPACABANA so 
reizvoll, weil eben richtig viel Rechenleistung in eine Kiste gepackt 
wird und nicht jedes einzelne Bauteil integriert werden muss.

Weil Du USB erwähnt hast:
Macht die Anbindung darüber wirklich mehr Sinn, als z.B. PCIe? Die 
USB3.0 Performance ist ja schon nicht ganz so schlecht :-) So wird es 
bei COPACABANA übrigens auch gehandhabt, der Controller übersetzt von 
dem internen Bus auf USB. Auf jedem Serverboard gibt es auch eine 
interne USB-Schnittstelle, also wäre es von der Verdrahtung einfach. 
Aber dann weiß ich nicht, ob der Controller nicht einen Flaschenhals 
bildet. Und es wäre auch immer noch nicht ganz klar, welche Bussysteme 
für die Kommunikation zwischen FPGAs und Controller sinnvoll ist.
Man könnte ja, wie oben schon erwähnt, auch mehrere Controller mit 
jeweils einem FPGA Busstrang dahinter haben, z.B. 4 à 50 FPGAs oder so. 
Aber welches Bussystem kommt für die beschriebenen Datengrößen dann in 
Frage? Reichen da bekanntere RS*** Typen? Vielleicht habt ihr ja ein 
paar Stichworte, nach denen ich mal suchen kann, um mich schlau zu 
machen.

Vielen Dank und viele Grüße,
Simon

: Bearbeitet durch User
von Christoph Z. (christophz)


Lesenswert?

Guck mal die Systeme von Picocomputing an:
http://picocomputing.com/

Simon D. schrieb:
> In dem Zusammenhang wäre es dann noch sehr hilfreich, wenn ihr mir
> erläutern könntet, was die Performance bei den FPGAs ausmacht. Ist das
> nur der Takt alleine? Oder gibt es andere Werte (Speicherzugriffszeiten,
> spezielle arithmetische Einheiten, etc.) die das beeinflussen?

Wie immer: Alles beinflusst die Performance wenn man darauf optimieren 
kann.

Grundsätzlich: Takt x Daten pro Takt x parallele Einheiten.

Je nach Problem/Algorithmus ist der Durchsatz höher, wenn z. B. mit 128 
bit Zahlen gerechnet wird (statt 64) dafür der Takt um z. B. 30% kleiner 
ist (da komplexeres Design).

Wie bei CPUs sagt der Takt auch nur einen Bruchteil aus. Alle grösseren 
FPGA Architekturen bieten sog. DSP Einheiten um integer Berechnungen zu 
beschleunigen. Diese Einheiten unterscheiden sich in ihren Fähigkeiten 
aber zwischen den Herstellern also ist der Takt dieser Einheiten nur 
schwer vergleichbar.

Limitierend heute ist das Routing, also die Zeit, die die Signale von A 
nach B benötigen innerhalb des FPGA. Theoretsich macht dein Logikblock 
600 MHz, real macht dein Design vielleicht 200 MHz weil da noch 
Leitungslatenz reinkommt.


Mein Bauchgefühl sagt mir, dass ihr den Rechenblöcken/FPGAs grössere 
Arbeitspakete geben solltet, damit ihr auch genug Zeit habt, neue Arbeit 
anzuliefern. Auch schon deshalb, weil PCIe und DDRx-RAM nur hohen 
Datendurchsatz hat, wenn Daten als Blöcke übertragen werden.
Das kann auch in mehreren Layern erfolgen, also z. B. pro FPGA ein 
externes RAM (grösse durch Berechnung/Simulation bestimmt) für die 
Arbeitspakete (gefüllt per DMA über PCIe), der FPGA verteilt dann diese 
selbständig intern in seine Recheneinheiten.

von lalala (Gast)


Lesenswert?

Simon D. schrieb:
> Für
> einen "Job" müsste an einen FPGA eine Gesamteingabegröße von etwa 15kbit
> geschickt werden, das Ergebnis ist maximal ein 8bittiger Wert.
Und Du hast Größenordnung 5 Billiarden 'Jobs'?
D.h. ein Gesamtdatenvolumen  von 5 * 10^15 * 15*10^3 /8 Bytes?
~ 8 * 10^15 kbytes = 8 Exabytes ?

wo kommen die her? Von einem Magnetband? Festplattenmegaarray?

Wieviel Datendurchsatz hast Du da?

Sagen wir mal Du kannst (auch auf die FPGA) so um die 10 Gbyte/s 
schaufeln, bist Du dann nicht auch bei 8* 10^5 s = 9 Tagen?
Mit exponentieller Zunahme wird das aber auch hart?

Oder hab ich da was falsch verstanden? Kannst Du vielleicht mal den 
gesamten Ablauf skizzieren?

Und zusätzlich zu den Kosten. Wie lange soll den die Berechnung maximal 
dauern? 1h, 1d, 1m oder 1a?

von lalala (Gast)


Lesenswert?

Simon D. schrieb:

> Zum Kostenrahmen:
> Das ist natürlich nicht ganz leicht zu sagen, aber ich will es mal so
> ausdrücken: Manpower ist vorhanden und Doktoranden kosten nicht die Welt

> Entwicklungskosten bezogen auf die Implementierung schätze ich als
> gering ein, da auf diesem Feld (wie weiter oben schon richtig erwähnt
> wurde) schon sehr viel Arbeit gemacht wurde und wir nur Änderungen
> einfügen müssen. Dann bleibt noch die Infrastrukturentwicklung und
> Debugging und ja, das kann dauern. Aber wir haben als Zeitrahmen auch
> locker ein Jahr zur Verfügung.
>
Nicht die Dokumentation vergessen, wenn die Doktoranden weg sind, soll 
das Ding ja auch weiterlaufen. Spricht denn schon einer der Doktoranden 
z.B. VHDL?

Da ihr nur Änderungen einfügen müsst, habt ihr denn Zugriff auf die 
(VHDL?) Source Codes?

Ein Jahr im universitären Bereich ist gar nichts. Ich wär schon 
(positiv) überrascht wenn ihr den Algorithmus auf dem Eval-Bord in 6 
Monaten zum laufen bringt.

Natürlich wenn ihr ein paar FPGA Spezialisten habt, ist das alles 
machbar. Dann würdest Du hier aber auch nicht solche Fragen stellen, 
oder?

von Simon D. (simd)


Lesenswert?

Christoph Z. schrieb:
> Guck mal die Systeme von Picocomputing an:
> http://picocomputing.com/
>
Werde ich unter die Lupe nehmen, danke.

Christoph Z. schrieb:
> Wie immer: Alles beinflusst die Performance wenn man darauf optimieren
> kann.
>
> Grundsätzlich: Takt x Daten pro Takt x parallele Einheiten.
>
> Je nach Problem/Algorithmus ist der Durchsatz höher, wenn z. B. mit 128
> bit Zahlen gerechnet wird (statt 64) dafür der Takt um z. B. 30% kleiner
> ist (da komplexeres Design).
>
> Wie bei CPUs sagt der Takt auch nur einen Bruchteil aus. Alle grösseren
> FPGA Architekturen bieten sog. DSP Einheiten um integer Berechnungen zu
> beschleunigen. Diese Einheiten unterscheiden sich in ihren Fähigkeiten
> aber zwischen den Herstellern also ist der Takt dieser Einheiten nur
> schwer vergleichbar.
>
> Limitierend heute ist das Routing, also die Zeit, die die Signale von A
> nach B benötigen innerhalb des FPGA. Theoretsich macht dein Logikblock
> 600 MHz, real macht dein Design vielleicht 200 MHz weil da noch
> Leitungslatenz reinkommt.
Danke für die Aufklärung. Hatte schon so eine Antwort erwartet.
Kann man denn allgemein ein gutes Vorgehen nennen, wie man einen 
angemessenen FPGA raussucht? Ich habe z.B. gesehen, dass sich in MATLAB 
ganz angenehm FPGAs simulieren lassen und dabei auch Nutzungsstatistiken 
rauskommen. Oder "reicht" die Analyse von Hand, also zu untersuchen 
welche Ressourcen die Implementierung nutzen wird?

Christoph Z. schrieb:
> Mein Bauchgefühl sagt mir, dass ihr den Rechenblöcken/FPGAs grössere
> Arbeitspakete geben solltet, damit ihr auch genug Zeit habt, neue Arbeit
> anzuliefern. Auch schon deshalb, weil PCIe und DDRx-RAM nur hohen
> Datendurchsatz hat, wenn Daten als Blöcke übertragen werden.
> Das kann auch in mehreren Layern erfolgen, also z. B. pro FPGA ein
> externes RAM (grösse durch Berechnung/Simulation bestimmt) für die
> Arbeitspakete (gefüllt per DMA über PCIe), der FPGA verteilt dann diese
> selbständig intern in seine Recheneinheiten.
Das ist ein wichtiger Teil. Ich dachte mir auch schon, dass wir die 
Arbeitspakete irgendwo "queuen" müssen, ich dachte dabei aber an den 
Controller vor allen FPGAs. Wenn ich Dich richtig verstehe schlägst Du 
also vor, die Pakete vor jedem FPGA vorzuhalten, so dass er sie dann 
abarbeiten kann. Das Ergebnis wird dann anschließend zurückgeschickt 
(z.B. als Tupel (PaketID, Score)) und abgelegt.

Vergrößert sich dadurch nicht der Aufwand für den FPGA? Ich habe zwar 
gesehen, dass viele/die meisten mittlerweile Memory Interfaces haben, 
aber das sind ja dann nicht mehr die Low-End-Varianten an die ich jetzt 
in großer Anzahl zur Beschleunigung gedacht habe, oder liege ich da 
falsch? Um mal konkret zu werden: ich hatte an die Spartan-3A Reihe 
gedacht.

Und weil Du die Anbindung an PCIe genannt hast:
Kann ich denn mehrere FPGAs direkt an den Bus hängen (die Pico 
Boardbeschreibungen lassen sowas in der Art vermuten)? Sollte das 
möglich sein, wäre man aber sicherlich noch immer in der Anzahl 
limitiert, oder?

Vielen Dank und liebe Grüße,
Simon

von Simon D. (simd)


Lesenswert?

lalala schrieb:
> Und Du hast Größenordnung 5 Billiarden 'Jobs'?
> D.h. ein Gesamtdatenvolumen  von 5 * 10^15 * 15*10^3 /8 Bytes?
> ~ 8 * 10^15 kbytes = 8 Exabytes ?
>
> wo kommen die her? Von einem Magnetband? Festplattenmegaarray?
>
> Wieviel Datendurchsatz hast Du da?
>
> Sagen wir mal Du kannst (auch auf die FPGA) so um die 10 Gbyte/s
> schaufeln, bist Du dann nicht auch bei 8* 10^5 s = 9 Tagen?
> Mit exponentieller Zunahme wird das aber auch hart?
>
> Oder hab ich da was falsch verstanden? Kannst Du vielleicht mal den
> gesamten Ablauf skizzieren?
>
> Und zusätzlich zu den Kosten. Wie lange soll den die Berechnung maximal
> dauern? 1h, 1d, 1m oder 1a?
Ok, ganz konkret:
Die Datenbank ist eine Ähnlichkeitsmatrix von allen Proteinsequenzen 
gegen sich selbst, also #(aller öffentlichen Sequenzen)^2. Auch wenn die 
DB relativ sparse ist, so müssen doch z.B. neue Sequenzen auch gegen 
alle anderen gerechnet werden. Neue Sequenzen kommen heute fast täglich 
hinzu (letztens gab es erst ein major update von einem großen Projekt, 
das selbst einfach mal 100 Mio Sequenzen hatte).

Die bisherige Sequenzlängenverteilung zeigt eine Standardabweichung von 
~300, also 5sigma sind 1500 Zeichen als Längenbeschränkung von 
Inputstrings für den FPGA. Bei einem Alphabet von 20 (plus noch ein 
paar) Zeichen braucht man 5 Bit zum Codieren (= 7500 bit). Der 
Algorithmus selbst braucht zwei Inputstrings und einmal diese Wortlänge 
zum Zwischenspeichern der Matrixwerte, wobei die Zwischenwerte nur 7 Bit 
haben müssen, da unser Score bei 80 abgeschnitten wird (= 25500 Bit). 
Hinzu kommen noch einige Schleifenvariablen und ein paar andere kleinere 
Geschichten. Alle Werte sind Ganzzahlen.

Die Inputstrings liegen in Datenbanken und Flatfiles und sind in der Tat 
nicht klein. Text lässt sich ja zum Glück gut komprimieren und so sind 
es ein paar hundert Terabyte in Summe.

Die Matrix soll nicht in kurzer Zeit neu berechnet werden. Wir haben 
schonmal über den Daumen gepeilt, dass das z.B. auf SuperMUC (Petaflop 
Größenordnung) schon ein paar Tage dauern kann (bzw Wochen). Mit der 
Neuimplementierung würde allerdings die Heuristik im aktuellen Algo 
verschwinden, eine Neuberechnung (komplett) wäre also notwendig. Wenn 
das in ein paar Wochen/Monaten auf den FPGA-Systemen laufen könnte, wäre 
das sicherlich gut.

lalala schrieb:
> Nicht die Dokumentation vergessen, wenn die Doktoranden weg sind, soll
> das Ding ja auch weiterlaufen. Spricht denn schon einer der Doktoranden
> z.B. VHDL?
>
> Da ihr nur Änderungen einfügen müsst, habt ihr denn Zugriff auf die
> (VHDL?) Source Codes?
>
> Ein Jahr im universitären Bereich ist gar nichts. Ich wär schon
> (positiv) überrascht wenn ihr den Algorithmus auf dem Eval-Bord in 6
> Monaten zum laufen bringt.
>
> Natürlich wenn ihr ein paar FPGA Spezialisten habt, ist das alles
> machbar. Dann würdest Du hier aber auch nicht solche Fragen stellen,
> oder?
Sourcecode gibt es, ja. Und ich habe die Simulation davon in MATLAB z.B. 
auch schon zum Laufen gebracht, ist ja jetzt nicht der riesen Aufwand. 
Sicher, da kommt noch einiges an Optimierung etc hinterher, aber über 
Monate sprechen wir hier nach meiner aktuellen Einschätzung nicht.

Was allerdings an Implementierungen rundherum gemacht werden muss, kann 
ich jetzt noch nicht wissen. Wenn wie im vorigen Beitrag z.B. genannt 
noch Speicherinterfaces und Queues hinzu kommen, wird es für mich/uns 
als Neulinge in dem Feld natürlich nicht trivialer.

HTH
Simon

von Kest (Gast)


Lesenswert?

Ich möchte ja nicht abstreiten, dass an den Unis fähige Leute sitzen. 
Aber das ist nicht damit zu vergleichen, dass jemand, der 
Projekterfahrung hat die Kontrolle hat. Sich ein tolles Teil zu 
überlegen ist eine Sache, aber eine realistische Schätzung abzugeben und 
zu koordinieren ist eine andere!
 mit 100kE für ein Gerät mit 100 FPGAs hat jetzt natürlich null 
Aussagewert (welche FPGAs?), aber ich vermute mal, das sind die 
Geldsummen, mit denen man rechnen muss.

Man kann sich vieles überlegen, aber wer baut die Teile? Und wie sieht 
es aus, wenn in 3 Jahren weitere gebaut werden sollen? Das alles muss 
miteinbezogen werden, ansonsten ist es nach einem Defekt nur ein Haufen 
Elektronikschrott, wo sich keiner damit auskennt :-)

Ein Cyclone 5 hat einen/2 ARM-Core im FPGA selber (+Ethernet, +USB, 
+Speicherkontroller,...). Wenn ich soetwas bauen müsste, würde ich z.B. 
so vorgehen (wie gesagt, ohne Wissen, ob das Sinnvoll ist oder nicht):

A: Eine doppel-Eurokarte (Steckkarte) mit einem ARM-FPGA, welches über 
Ethernet an einem gemeinsamen Bus hängt. Dieses FPGA hat vielleicht 1/2 
Gbyte RAM. Da läuft Linux drauf. An diesem FPGA (auf dem gleichen Board) 
hängen 4-8 FPGAs, die keinen ARM haben (reine Rechenkerne).

B: Ein 3HE-Gehäuse, wo 16-32 Solche Karten drin sind. Vielleicht noch 
eine "Master" Karte, die die Kommunikation nach Außen herstellt (über 
Ethernet). Im Rack ist die Stromversorgung, Überwachung, ...


C: Ein Rack mit mehreren solchen Gehäusen.


Host
|
+----- Rack
|       |
|       +--- Master + 16-32 FPGAs (Cores)
|       |
|       +--- Master + 16-32 FPGAs (Cores)
|       |
|       +--- Master + 16-32 FPGAs (Cores)
|
+----- Rack
        |
        +--- Master + 16-32 FPGAs (Cores)
        |
        +--- Master + 16-32 FPGAs (Cores)
        |
        +--- Master + 16-32 FPGAs (Cores)


Soetwas könnte man beliebig erweitern, der Host verteilt die Aufgaben 
zwischen den Racks/Mastern. Ein Master verteilt die Aufgabe zwischen den 
einzelnen Karten. Und jede Steckkarte verteilt die Aufgabe zwischen den 
16-32 FPGAs.

Das mit der BAndbreite muss man sich genau überlegen -- da weiß ich 
nicht so recht, wieviele Daten da anfallen. Kann mir aber vorstellen, 
dass man alles "verschränkt" macht: solange die Daten an ein eine Karte 
übergeben werden, rechnen alle anderen.

Na ja, da könnte ich noch weiter spinnen, aber ich lasse es lieber ;-)

Grüße
Kest

von Kest (Gast)


Lesenswert?

Äh... da habe ich was durcheinander gebracht: also
Ein 3HE-Rack = Master + 16-32 Karten zu je Master + 1GB RAM + 8 FPGAs... 
Insgesamt also 128-256 FPGAs (Rechnenknechte) im Rack, die über Ethernet 
angebunden werden.

von dagfagr (Gast)


Lesenswert?

Naja, ein Algorithmus exponentieller Komplexität lässt sich nicht 
relevant mit FPGAs beschleunigen ;-)

Ihr müsstet die Komplexität reduzieren ...

von lalala (Gast)


Lesenswert?

Simon D. schrieb:

> Die bisherige Sequenzlängenverteilung zeigt eine Standardabweichung von
> ~300, also 5sigma sind 1500 Zeichen als Längenbeschränkung von
> Inputstrings für den FPGA.

Langsam fange ich an zu verstehen. Ich hab aber noch der Rechnung hier 
ein Problem. Ich dachte 5 Sigma Umgebung bedeutet 5 Sigma nach 'links' 
vom Mittelwert (natürlich nicht weniger als 0) und 5 Sigma nach 'rechts' 
vom Mittelwert.
D.h. ich komme auf denselben Wert falls die durchschnittliche 
Sequenzlänge 0 ist. Das kommt mir etwas kurz vor. Was ist der richtige 
Wert?

von Christoph Z. (christophz)


Lesenswert?

Simon D. schrieb:
> Kann man denn allgemein ein gutes Vorgehen nennen, wie man einen
> angemessenen FPGA raussucht? Ich habe z.B. gesehen, dass sich in MATLAB
> ganz angenehm FPGAs simulieren lassen und dabei auch Nutzungsstatistiken
> rauskommen. Oder "reicht" die Analyse von Hand, also zu untersuchen
> welche Ressourcen die Implementierung nutzen wird?

Für ein so umfangreiches Projekt kommst du nicht drum herum das im 
Detail zu untersuchen. Also Algorithmus für bestimmten FPGA optimieren 
und sehen wie schnell das läuft.
Läuft bei euren anderen Varianten ja auch so, ob ATI oder Nvidia weisst 
du auch erst nach dem du optimiert hast.

Simon D. schrieb:
> Das ist ein wichtiger Teil. Ich dachte mir auch schon, dass wir die
> Arbeitspakete irgendwo "queuen" müssen, ich dachte dabei aber an den
> Controller vor allen FPGAs. Wenn ich Dich richtig verstehe schlägst Du
> also vor, die Pakete vor jedem FPGA vorzuhalten, so dass er sie dann
> abarbeiten kann. Das Ergebnis wird dann anschließend zurückgeschickt
> (z.B. als Tupel (PaketID, Score)) und abgelegt.
>
> Vergrößert sich dadurch nicht der Aufwand für den FPGA?
Ja, dafür wird der Controller warscheinlich einfacher.

Auch dabei: Ein überschlagsmässige Abschätzung kann man machen. Für eine 
überschaubare Anzahl an Systemvarianten würde ich aber empfehlen eine 
Simulation des gesammten Datenflusses vom Input (Storage System, 
Steuerrechner, Netzwerk dazwischen etc.) bis zum Output (Datenbank). Du 
musst wissen wo dein Flaschenhals steckt und du musst wissen wie viel es 
kosten diesen zu beheben.

So kann dann entschieden werden, welche Systemvariante den grössten 
Durchsatz hat bei gegebenem Budget.

von Christoph Z. (christophz)


Lesenswert?

Simon D. schrieb:
> Um mal konkret zu werden: ich hatte an die Spartan-3A Reihe
> gedacht.

Denk in der Zukunft und nicht in der Vergangenheit.

Simon D. schrieb:
> Und weil Du die Anbindung an PCIe genannt hast:

Du brauchst ein paar Grundlagen zu PCI Express.
Finde aber gerade keinen Link, der das schön kurz beschreibt. Wer kann 
helfen?

von lalala (Gast)


Lesenswert?

Christoph Z. schrieb:

> Du brauchst ein paar Grundlagen zu PCI Express.
> Finde aber gerade keinen Link, der das schön kurz beschreibt. Wer kann
> helfen?

Wenn man was mit PCIe von Grund auf selber entwickeln will ist:
http://www.pcisig.com/home
m.M. die Anlaufstelle. Mitgliedbeitrag ist jedoch 3kUSD/a

Ansonsten sollte man sich überlegen, ob man einen IP-Core lizensiert.

von Grendel (Gast)


Lesenswert?

@lalala
Ich glaube Christoph meinte damit nur, dass PCIe Punkt zu Punkt ist und 
kein echter "Bus".

von lalala (Gast)


Lesenswert?

Grendel schrieb:
> @lalala
> Ich glaube Christoph meinte damit nur, dass PCIe Punkt zu Punkt ist und
> kein echter "Bus".

Hast schon Recht. Hab das etwas ausserhalb des Kontextes gelesen, und zu 
weit gedacht.

von Simon D. (simd)


Lesenswert?

Wow, ich bin beeindruckt. Danke schon jetzt für eure vielen Antworten.

Die Idee mit der Simulation finde ich ziemlich gut, daran hatte ich 
ehrlicherweise gar nicht gedacht. Tja, wenn einen der Tatendrang gepackt 
hat, dann übersieht man doch gerne mal die Basics ;-)

Auch den Vorschlag mit den integrierten ARMs finde ich ziemlich elegant. 
In diese Richtung werden wir sicherlich weiter denken und dann mit den 
Spezis diskutieren. Danke @ Kest.

@lalala
Es stimmt, die 5 Sigma sind nur rechtsseitig, die obere 
Längenabschätzung reicht uns ja aus.

@ Christoph Z.
Du hast wahrscheinlich recht, dass wir die Implementierung einfach mal 
ausprobieren müssen. Ich bin jetzt mal auf das Xilinx DevBoard gespannt, 
sollte bald kommen. Dann werden wir mal noch ein paar andere 
Modelle/Hersteller vergleichen.

Bis dahin sind dann auch sicher Benchmarks von GPGPU, bzw. der massive 
Multicores (Xeon Phi) da.

@ dagfagr
Das mit dem Komplexität reduzieren ist so eine Sache :-)
Da haben sich schon Generationen an Wissenschaftlern die Zähne 
ausgebissen. Wenn Du einen guten Vorschlag hast, immer her damit. Wobei 
ich Dir die Science Titelseite eigentlich nicht wegnehmen will ;)

Viele Grüße,
Simon

von lalala (Gast)


Lesenswert?

Simon D. schrieb:
> @lalala
> Es stimmt, die 5 Sigma sind nur rechtsseitig, die obere
> Längenabschätzung reicht uns ja aus.

Dann musst Du doch aber noch den Erwartungswert addieren. Wenn ein sigma 
bei 300 liegt, dann kann schätze ich jetzt mal wild mu>=600 (gibt mal 
den richtigen Wert raus). Und dann bist Du nur bei weniger als 3 sigma 
mit Deinen 1500 Zeichen.

von Simon D. (simd)


Lesenswert?

Hast schon recht, habe das nicht so ausführlich beschrieben, aber nicht 
vergessen in meiner Berechnung, da die Werte nur gerundet sind. Mean 
liegt bei irgendwas um die 200 und ein paar, sd bei 260 oder sowas, kann 
gerade nicht nachschlagen, bin unterwegs und muss was an ner SW für ne 
andere AG fixen..

von мальеикий тролл (Gast)


Lesenswert?

>dass wir uns die E-Techniker von der TU ins Boot holen wollen,

Vergiss die schnell mal wieder. Die haben ein paar Miniprojekte 
durchgezogen.

Fuer so ein Projekt muss erst mal eine Projektvereinfachung hin. 
Irgendein Kurzwert, der ausdrueckt, ob sich ein Vergleich ueberhaupt 
lohnen koennte.
Und dann geht es um Korrelation. also muss man die verschiedenen 
Sequenzen aneinander vorbeiziehen, multiplizieren und integrieren. Also 
muss man nur Schieberegister mit Laenge gegen Unendlich haben und die 
Daten mit zB 200MHz seriell durchclocken.
Nein?

von lalala (Gast)


Lesenswert?

мальеикий тролл schrieb:
> Und dann geht es um Korrelation.

Schlimmer.

von Ingenieur (Gast)


Lesenswert?

Christoph Z. schrieb:
> Je nach Problem/Algorithmus ist der Durchsatz höher, wenn z. B. mit 128
> bit Zahlen gerechnet wird (statt 64) dafür der Takt um z. B. 30% kleiner
> ist (da komplexeres Design).

Man braucht nicht unbedingt 30% mehr Takt, nur weil das Design breiter 
wird. Wenn es tiefer wird, steigt die Anforderung und man bekommt 
Probleme, diese lassen sich aber oft durch ein Übermass an FFs 
kontrollieren.

von snyder (Gast)


Lesenswert?

Implementierung einfach mal (eben) ausprobieren wenn die Boards da 
sind.... Der war gut :D
FPGA mit Arm Core kann man währenddessen beschnacken während ein 
mega-Projekt für einen ganzen Lehrstuhl mal eben in einem Forenthread 
gelöst wird. Da ist doch immens viel Detailwissen nötig - in ganz vielen 
Bereichen.

Möglicherweise bin ich auch zu wenig selbstbewusst, habe meine 
jugendliche Phantasie verloren, aber ist das alles Ernst? Wie viele 
Mannjahre siehst du in dem Projekt zu veranschlagen.

Exponentiell steigende Komplexität bleibt aber nun immer noch 
exponentiell und da du eingangs sagst ohne Ende in sicht ist das doch 
wenig ermutigend.

Du sagst auf mathematischer Ebene seht ihr keine Möglichkeit, aber bist 
du sicher daß die Dampfhammer Methode hier wirklich das Richtige ist? 
Ich meine wenn sich schon andere Gruppen die Zähne ausgebissen haben, 
warum haben die dann den viel hilft viel Weg nicht beschritten. Darunter 
mögen auch sehr wahrscheinlich welche sein, für die technologische 
Aspekte nciht von Null angegangen werden müssen.

Ich meine das jetzt übrigens gar nicht negativ, ich sehe nur wirklich 
wenig Chancen ohne einige mit erheblichem Fachwissen. Nicht nur beim 
vhdl Code schreiben. Die Leute braucht man am Lehrstuhl wenn der Prof 
schon nicht dazu gehört. Viel verrennen und neu angehen nach paar 
Monaten kann man sich ja zeitlich und finanziell nicht unbedingt 
erlauben.


Aber viel Glück und berichte mal zwischendurch wo die Reise hingeht

von Kest (Gast)


Lesenswert?

Genau, nur mit dem jugendlichen Leichtsinn ist es möglich sich solche 
Projekte zu überlegen. Das Gute dabei ist, dass diejenigen, die sich 
sowas zusammenspinnen (gut gemeint) keine Ahnung von der 
wirtschaftlichen Seite haben :-)
Und ja, da sind mehrere MannJahre drin und ein Paar hundert Tausend Euro 
wohl auch, da muss man nicht BWL studiert haben, um das zu sehen: 
Hardware-Entwicklung (100kE), Algorithmus-Portierung (10-50 kEuro), 
Übergeordnete Software entwickeln (Netzwerk,...) 20-50 kEuro, 
Prototypen-Bau (wohl 100kEuro für EIN solches Gerät), 
Testen/Verifikation (50kEuro), ein wirtschaftlich sinnvolle Produktion 
aufziehen (unbezahlbar).

Das soll aber nicht heißen, dass man soetwas nicht in Angriff nehmen 
sollte! Erstens, muss man ja an der Uni irgendwas machen und die 
Doktoranten beschäftigen. Die Studenten machen dann die winzigen 
Teilaufgaben im Rahmen der Projekte/Seminare/Diplomarbeiten.

Die Kunst besteht darin, damit schneller fertig zu werden, als die 
Hardware (z.B.GPUs) sich weiter entwickelt. In 5 Jahren, sind die 
Prozessoren und die GPUs so weit, dass die Entwicklung sich niemals 
lohnen würde.

Nicht destotrotz bin ich darauf gespannt, welche Wege der TO gehen wird 
-- ob FPGA überhaupt in Frage kommt und man nicht z.B. mit Tesla-GPUs 
besser fahren würde.

Grüße
Kest

von Grendel (Gast)


Lesenswert?

Kest schrieb:
> Die Kunst besteht darin, damit schneller fertig zu werden, als die
> Hardware (z.B.GPUs) sich weiter entwickelt. In 5 Jahren,


Also zumindest Die Hardwareentwicklung muss man sowieso jemandem 
überlassen der sich damit auskennt.
Währenddessen kann man an den FPGA Designs für den Algo arbeiten.

5 Jahre halte ich definitiv für übertrieben. Würde (mit passenden 
Leuten) eher 2 Jahre schätzen und da kann sich die FPGA Lösung dann doch 
lohnen.


> und man nicht z.B. mit Tesla-GPUs besser fahren würde.

In so ein paar Papern hatte ich gesehen das GPUs bei Smith Waterman wohl 
nicht ganz so toll sein sollen. Ob das immer noch so ist weiss ich 
natürlich nicht.

von J. S. (engineer) Benutzerseite


Lesenswert?

@Simon:

Du solltest vielleicht nochmal ganz genau in Dich gehen, was Du an 
funktionellen Absichten hast. "Beschleunigung" heisst für mich, einen 
vorhandenen Algo beizubehalten- ihn aber nicht mit langsamen (?) 
Prozessoren, sondern einer Vielzahl derselben in FPGAs rechnen zu 
lassen. Dies tut man für gewöhnlich, um den Algo unverändert zu 
verwenden, weil man ihn gerade nicht umentwickeln möchte. Dazu 
realisiert man genügend viele FPGAs, um auf das Tempo zu kommen, und gut 
ist. Vor allem tut man das aber dann, wenn es keine ausreichend 
schnellen DSPs mit der genügenden IO-Bandbreite gibt. Da bin ich nicht 
so sicher, ob das wirklich bei Dir der Fall ist und ob man nicht mit 
einer DSP-Farm ausreichende Echtzeit bekommt.

Der andere Ansatz wäre, wie angedeutet, einen Algo speziell für FPGAs zu 
erzeugen, womit man ganz andere Dimensionen der Bandbreite und der 
Latenz erreichen kann, was aber nach meinem Verständnis einem -> 
redesign entspräche und keiner "acceleration". Ob das Sinn macht, hängt 
davon ab, wie gut sich der Algo linearisieren und pipelinen lässt und 
wie gut er von der parallelen Verfügbarkeit von Daten und 
Zwischenergebnissen anderer Zeitpunkte im FPGA profitiert bzw. wie 
homogen dieses Gefüge wiederum ist. Nimmt man z.B. einen in der 
Rechentiefe sehr dynamischen Algo, wie den der Apfelmännchenberechung, 
sieht es nicht gut aus, was den Effizienzvorteil der FPGAs angeht, weil 
man entweder mit statischen Tiefen und damit ungenutzten Rechenzyklen 
arbeiten muss, um eine echte pipeline zu nutzen oder eben doch wieder 
einen virtuellen Ablauf mitsamt seiner Verwaltung einbauen muss. Für 
solche Systeme sind DSPs mit ihrer auf virtueller Rechentechnik 
ausgelegten Architektur finanziell erheblich effektiver - sofern, wie 
erwähnt, die Bandbreite passt und die Latenz akzeptabel ist.

Zu diesen Dingen hast du noch nicht viel geschrieben, daher ist es 
schwer zu urteilen, ob FPGAs hier nötig und/oder angezeigt sind.

Bei der Hardware selber kommt es darauf an, wie man die Datenströme 
lenken kann. Sobald da ein Master-Slave-System läuft, braucht es wieder 
Busse mit dynamischer Verwaltung. Je nach Isolationsgrad der Subrechner 
ist eine Stern- oder Linearbusverdrahtung sinnvoller, um den 
Datendurchsatz im Master zu maximieren. Bei linear verketteten Daten 
sind FPGAs definitiv von Interesse.

Vom Selbstbau würde ich generell abraten. Ich habe das mal mit Spartan 2 
FPGAs trainingsweise getan (Mini-Rack mit Einsteckplatinen) und stiess 
genau an das Beschaffungs- und Erhaltungsproblem. Die Sub-Einheiten 
müssen in gewisser Weise austark arbeiten und brauchen zumindest RAM als 
Puffer, da empfiehlt sich ein System aus käuflich erworbenen eval 
boards, deren Zahl man dynamisch ausbauen kann und die sich 
schlimmstenfalls auch mal durch andere Typen ersetzen lassen. Gerade 
beim Thema IB und Fehlersuche ist es nötigt, dass sich die Einheiten 
selber testen und booten können. Von daher kannst Du Dich mal bei den 
Systemen von Trenz oder Enclustra umschauen.

Und dann bliebe da noch das Thema Auslastung der FPGAs:

Das Runterbrechen des Algos führt zwangsweise zu einer Art Wolke von 
mehr oder weniger kompakten Rechenmodulen in 2- oder auch 
3-dimensionaler Anordnung, die erst noch funktionell in ein FPGA gemappt 
werden muss. Da die Grössen sehr wahrscheinlich kaum zueinander passen 
werden, entsteht z.B. die Anforderung, N (=x*y*z) Module auf C (= a*b) 
FPGAs verteilen zu müssen. Um das zu automatisieren und dynamisch zu 
halten, ist ein sript nötig, dass die Funktionen passend verteilt und 
die benötigten FPGA-Modul-Instanzen generiert, wenn Du nicht bei jder 
Algo-Änderung manuelle Anpassungen vornehmen willst. Ich habe dies 
seinerzeit mal für ein virtuelles Audio-DSP-Modul vorgezeichnet:

http://96khz.org/htm/scalable%20audiodsp.htm

Damit wird eine beliebige Anzahl von DSP-Elementen mitsamt der nötigen 
Busverdrahtung auf ein FPGA-Array gemappt, wodurch abhängig von der 
Bus-Latenz (Rechnen und Schieben sind in einander geschachtelt) im 
Prinzip jedes Element, jedes Ergebnis eines jeden anderen Elementes 
sehen und verwerten könnte, was dann real natürlich nicht passiert. In 
jedem Fall wäre das ein ein Beispiel eines "hochparallelen" FPGAs. Ob es 
aber auch "hocheffizient" für die jeweilige Aufgabe ist, stünde auf 
einem anderen Blatt.

von Martin S. (strubi)


Lesenswert?

Morgen,

was der Herr Schuhmacher sagt, kann man mehrfach unterschreiben.
Ich würde auch mal sagen: Simulieren. Das alleine gibt schon eine 
leckere Diplomarbeit ab. Nach aller vorliegender Information könnte ich 
nicht mal im Ansatz eine Aussage machen, ob der Algo auf dem FPGA 
'sinnvoll' umgesetzt werden könnte. Die Diskussion ist also nahezu 
hinfällig..

Bisher fallen mir so generell drei Sachen zur Evaluation ein:

1) Algo komplett "brute force" in HW umsetzen (klappt nur gut, wenn 
pipeline-bar)
2) Sich eine spezielle CPU eigens für die gängigen Operationen bauen und 
mit Microcode programmieren.
3) Ein DSP-Cluster und cleveres Interfacing.

(1) kann irgendwann aufwendig/komplex/schlecht debugbar werden, 
besonders bei dynamischem Wachstum.
(2) kann elegant sein und kompakt, aber es braucht etwas Erfahrung im 
GPU-Design. Die Lösung wird aber u.U. gut skalierbar, 8 Cores auf einem 
Spartan6-LX45 sind kein Problem, nur die Speicheranbindung an externes 
RAM ist ev. flaschenhalsbehaftet bis knifflig.
(3) Da gab es mal am MIT ein Projekt mit einem ganzen DSP-Rack. Die DSPs 
kommunizierten untereinander per I2S. Die Daten kamen parallel per 
Glasfaser rein. Siehe auch hier 
(Beitrag "Multi-DSP-System Infoquellen")

Zum Thema Simulation: Mit dem freien GHDL-Simulator kann man unter Linux 
(also nicht mit der mcode-Version unter Windows) einige nette Sachen 
betr. Co-Simulation mit Software machen. Z.B. kann man eine 
qemu-Simulation (C-Programm) über ein virtuelles Interface mit dem 
virtuellen FPGA quatschen lassen. Das geht gut auf verteilten Systeme 
(also per Netzwerk im Cluster), wenn die Simulation auf dem eigenen PC 
zu langsam läuft.
Für solche Features latzt man im kommerziellen Pool richtig viel Geld 
(ich glaube, die volle Simulations-Suite von Cadence ging bei einigen 
10k€ los)

Für so ein ambitioniertes Vorhaben könnte man sicher gut ein paar 
Studenten ankokeln (aber nicht verheizen!).

Grüsse,

- Strubi

von Michael W. (Gast)


Lesenswert?

Ui, hier sind ja die richtigen FPGA-Super-Cracks versammelt. Da hätte 
ich doch gleich ein paar Fragen zum Thema paralles Rechen mit FPGAs:

Jürgen Schuhmacher schrieb:
> Damit wird eine beliebige Anzahl von DSP-Elementen mitsamt der nötigen
> Busverdrahtung auf ein FPGA-Array gemappt, wodurch abhängig von der
> Bus-Latenz (Rechnen und Schieben sind in einander geschachtelt) im
> Prinzip jedes Element, jedes Ergebnis eines jeden anderen Elementes
> sehen und verwerten könnte,
Schaut sehr interessant aus. Hast Du diese DSPs selbst entworfen? Was 
können die?

Martin S. schrieb:
> Co-Simulation mit Software machen. Z.B. kann man eine
> qemu-Simulation (C-Programm) über ein virtuelles Interface mit dem
> virtuellen FPGA quatschen lassen. Das geht gut auf verteilten Systeme
> (also per Netzwerk im Cluster), wenn die Simulation auf dem eigenen PC
> zu langsam läuft.
Auch das interessiert mich. Hättest Du so eine Art "Anleitung", wie man 
das mit der Co-Simulation hinbekommt? Ich habe das auf einer 
Demonstrationsveranstaltung von MATHWORKS gesehen wie sie es mit MATLAB 
und Modelsim machen. Das war richtig prima: FPGA-Design schnappen, im 
Simulink instanziieren und auf den Knopf drücken. Dann rennt die 
Simulation wie ein D-Zug.

>MircoProgrammierung
Da steige ich immer noch nicht so ganz dahinter, wie das so genau gehen 
soll. Ich hatte hier schon mal dazu was gefragt, was das Thema von Georg 
aufgeworfen wurde:

Beitrag "Re: FPGA grafisch programmieren"

von Strubi (Gast)


Lesenswert?

Markus Wagner schrieb:
> Auch das interessiert mich. Hättest Du so eine Art "Anleitung", wie man
> das mit der Co-Simulation hinbekommt? Ich habe das auf einer
> Demonstrationsveranstaltung von MATHWORKS gesehen wie sie es mit MATLAB
> und Modelsim machen. Das war richtig prima: FPGA-Design schnappen, im
> Simulink instanziieren und auf den Knopf drücken. Dann rennt die
> Simulation wie ein D-Zug.

Hi Markus,

so simpel läuft es leider nicht, es braucht etwas Programmierarbeit, 
bzw. Scripting. Anleitung per se gibt es auch nicht, nur etwas 
Doxygen-Dokumentation und div. Präsentationen. Sind ansich zwei 
Libraries:
1) ghdlex: virtuelle I/O-Interfaces für GHDL Simulator (nicht mcode)
2) netpp: Ansprechen der virtuellen HW per Netzwerk

Etwas Intro hats hier: http://www.fpgarelated.com/showarticle/20.php

Die einfachste Variante ist die mit dem virtuellen FIFO: Software 
schiebt Daten ins virtuelle FPGA, und liest verarbeitete Daten wieder 
aus. Eine Anwendung z.B.: Co-Simulation eines Hardware-JPEG-Encoders. 
Siehe auch http://tech.section5.ch/news/?p=181.

Die qemu-Sache habe ich gar nicht dokumentiert, das geht ansich am 
simpelsten über named Pipes/virtuelle COM-Ports.


Grüsse!

- Strubi

von Georg A. (georga)


Lesenswert?

Eine Idee, die ich mit unserem Biologen dazu damals besprochen habe, war 
ein zweistufiges Konzept. Zuerst sehr grob und einfach "Kandidaten" im 
FPGA finden (da kann man recht schludrig vorgehen, vereinfacht die HW 
deutlich) und danach mit dem PC nochmal fein bearbeiten. Aus Zeit- und 
Studentenmangel konnte das aber nicht konkret simuliert werden. Kann 
also auch eine Schnappsidee sein...

Wie gesagt, ich halte es aber bei der Anwendung auf keinen Fall 
sinnvoll, den vorhandenen Algoritmus 1:1 aufs FPGA umzusetzen. Macht nur 
Arbeit und bringt effektiv nix. Man muss das FPGA für Sachen nutzen, die 
es am besten kann. Und das ist hier massiv paralleles Bitgefummel mit 
kleinen Lookuptabellen.

von Christoph Z. (christophz)


Lesenswert?

Wer in seinem Anwendungsgebiet am Anschlag ist mit der Bandbreite zum 
Speicher wird sich über diese Nachricht freuen:

http://www.eetimes.com/document.asp?doc_id=1320156&itc=eetimes_node_193&cid=NL_EET_ProgrammableLogicDL_20131121&elq=85368f54a52742eb9a4e8307af0b4114&elqCampaignId=2661

Ein massives FPGA Board mit einem hybrid memory cube (HMC) von Micron 
(160 GB/s Bandbreite).

von J. S. (engineer) Benutzerseite


Lesenswert?

lecker :-)

von Grendel (Gast)


Lesenswert?

Mmmmh kostet nur leider sicher gut 5 stellig  ;-)

von Michael W. (Gast)


Lesenswert?

Strubi schrieb:
> Hi Markus,
>
> so simpel läuft es leider nicht, es braucht etwas Programmierarbeit,
> bzw. Scripting. Anleitung per se gibt es auch nicht, nur etwas
Danke für Deine Hilfe. Schaue ich mir mal an.

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.