Nun, die neueste Generation der Xilinx-Teile, die gerade mit 4.7TMACS und Allzwecklogik bei 600MHz angepriesen werden. (Dies sind im Grunde Virtex 6s fabbed in einem kleineren Prozess.) Auf einem Tier wie diesem, wenn Sie Ihre Algorithmen in Festkommaoperationen implementieren können, hauptsächlich multiplizieren, addieren und subtrahieren, und profitieren Sie sowohl von Wide-Parallelismus und Pipeline-Parallelität Sie können die meisten PCs lebend essen, sowohl in Bezug auf die Leistung als auch auf die Verarbeitung.
Sie können auf diesen schweben, aber es wird einen Leistungseinbruch geben. Die DSP-Blöcke enthalten einen 25x18-Bit-MACC mit einer 48-Bit-Summe. Wenn Sie mit Oddball-Formaten durchkommen und einen Teil der Gleitkomma-Normalisierung, die normalerweise auftritt, umgehen, können Sie trotzdem eine Lastwagenleistung aus diesen herausholen. (d. h. Verwenden Sie den 18Bit-Eingang als Strait-Fixpunkt oder Float mit einer 17-Bit-Mantisie anstelle des normalen 24-Bit.) Doubles Floats werden eine Menge Ressourcen verbrauchen. Wenn Sie das brauchen, werden Sie wahrscheinlich besser auf einem PC arbeiten.
Wenn Ihre Algorithmen als Add-und Subtract-Operationen ausgedrückt werden können, dann kann die allgemeine Logik in diesen verwendet werden, um Gazillion Addierer zu implementieren. Dinge wie Bresenhams Linie/Kreis/Yadda/Yadda/Yadda-Algorithmen sind sehr gute Anpassungen für FPGA-Designs.
Wenn Sie Division ... EH ... es ist schmerzhaft, und wahrscheinlich wird relativ langsam, es sei denn, Sie können Ihre Divisionen als Multiplikationen implementieren.
Wenn Sie viele hohe Percision-Trigger-Funktionen brauchen, nicht so viel ... Wieder kann es getan werden, aber es wird nicht schön oder schnell sein. (So wie es bei einem 6502 möglich ist.) Wenn Sie nur mit einer Nachschlagetabelle über einen begrenzten Bereich umgehen können, dann ist Ihr golden!
Apropos 6502, ein 6502 Demo Coder könnte eines dieser Dinge zum Singen bringen. Jeder, der mit all den alten mathematischen Tricks vertraut ist, die Programmierer auf der alten Schulmaschine benutzten, wird immer noch gelten. Alle Tricks, die der moderne Programmierer Ihnen sagt, "lassen Sie die Bibliothek für Sie tun" sind die Arten von Dingen, die Sie wissen müssen, um Mathematik auf diesen zu implementieren. Wenn Sie ein Buch finden, in dem es darum geht, 3d auf einem 68000 basierten Atari oder Amiga zu schreiben, werden Sie viel darüber diskutieren, wie man Zeug nur in ganzen Zahlen implementiert.
TATSÄCHLICH sind alle Algorithmen, die mit Hilfe von Nachschlagetabellen implementiert werden können, SEHR gut geeignet für FPGAs. Sie haben nicht nur Blockrams, die durch das Teil verteilt sind, sondern die Logikzellen selbst können auch als verschieden große LUTS und Mini-Rams konfiguriert werden.
Sie können Dinge wie feste Bitmanipulationen als GRATIS anzeigen! Es ist einfach zu handhaben durch Routing. Fixed Shifts oder Bit Reversals kosten nichts. Dynamische Bitoperationen, wie die Verschiebung um einen variablen Betrag, kosten eine minimale Menge an Logik und können ausgeführt werden, bis die Kühe nach Hause kommen!
Der größte Teil hat 3960 Multiplikatoren! Und 142.200 Scheiben, JEDER kann ein 8-Bit-Addierer sein. (4 6Bit Luts pro Scheibe oder 8 5Bit Luts pro Scheibe je nach Konfiguration.)
Gute Frage - ein Beispiel sind dedizierte DSP-Anwendungen wie Filter, bei denen Sie so viele Multiplikationen/Additionen und so viele Bits wie nötig bei einem bestimmten Problem werfen können, anstatt durch die feste Anzahl von Ausführungseinheiten und Wortgröße einer herkömmlichen CPU. –
Wenn wir über die Big-Oh-Notation sprechen, beschäftigen wir uns im Allgemeinen nicht mit der Parallelisierung. Die meiste Zeitersparnis, die Sie in einem FPGA gegenüber einer CPU erzielen, besteht darin, Ihren Algorithmus so zu verschachteln, dass Sie jeden Takt eingeben und eine Ausgabe erhalten (obwohl die Ausgabe nicht dem Eingang dieses Taktzyklus entspricht). Die ganze Idee der Parallelisierung ist immer noch ein offene Frage. Wenn unsere CPUs intelligent genug wären, um zu erkennen, dass etwas parrallelisiert werden kann, ohne es zu sagen, könnten wir möglicherweise Leistungsverbesserungen in Größenordnungen haben. – ldog
Nehmen Sie zum Beispiel das Problem der Sortierung. Normalerweise nähern wir uns dem sequenziellen Gesichtspunkt und behaupten, dass es eine O (n log n) untere Grenze für die Laufzeit gibt. Jedoch auf einem FPGA mit n Prozessoren (die nicht so ausgefallen ist) können Sie Odd-Even-Sort (http://en.wikipedia.org/wiki/Odd-even_sort eine tot einfache Erweiterung zu Bubble-Sort) und Sortierung implementieren treten in O (n) Zeit auf! – ldog