Warum werden Computer nicht mit spezieller Hardware wie Sortiernetzwerken geliefert?

10

Warum programmieren wir nicht die üblichen Aufgaben wie "Sortieren", anstatt sie so zu programmieren, und lassen sie dann von der Umgebung kompilieren, um die Hardware optimal zu nutzen? Auf diese Weise könnten wir Computer mit neuer spezialisierter Hardware wie Sortiernetzwerken ausliefern und es würde automatisch mit vorhandenem Code funktionieren.

MaiaVictor
quelle
2
Kaufen Sie eine PCI-FPGA-Karte und implementieren Sie die gewünschten Erweiterungen.
SK-Logik
Hardware ist keine Magie. Viele Dinge können durch spezielle Hardware nicht viel (oder überhaupt nicht) beschleunigt werden, und selbst wenn dies möglich ist, muss vorhandene Hardware häufig angepasst (oder zumindest neu kompiliert) werden. Siehe yosefk.com/blog/its-done-in-hardware-so-its-cheap.html
Siehe auch
3
@WorldEngineer Ich sehe nicht, wie das ins Bild kommt. Ein durchschnittlicher Benutzer weiß nicht, wofür 80% der Dinge in einer modernen CPU bestimmt sind. Er ist glücklich, weil ihm gesagt wird, dass dies seine Programme schneller macht (und dies hat einen Kern der Wahrheit). Wenn das Sortieren tatsächlich so häufig war, wie OP annimmt, und durch dedizierte Hardware optimiert werden könnte, würden sie es neben den Zweigprädiktor stellen ("Was ist das, Gartenarbeit?") Und eine Pressemitteilung herausgeben, in der sie sagten, sie hätten Anwendungen X und Y 5% gemacht. schneller und verkaufen es.
1
Dies erinnert mich an die Idee von Conservation Cores , die eher auf Energieeffizienz als auf Spitzenleistung abzielen.
Paul A. Clayton

Antworten:

19

Zunächst einmal kommen Computer mit spezieller Hardware . Jeder Laptop und Desktop-Computer, der seit einigen Jahren verkauft wird, verfügt über einen speziellen Co-Prozessor, eine Grafikverarbeitungseinheit, die visuelle Verarbeitungsalgorithmen verarbeitet, wie sie für Video- und Spieleanwendungen erforderlich sind. Sehr großer Computer ( zB „Supercomputer“, IBM System Z - Familie) hat eine Vielzahl von spezialisierten Prozessoren numerische Verarbeitung ( „Vektorverarbeitung“), zu handhaben etc .

Zweitens ist das Sortieren einer der am besten erforschten Aspekte des Rechnens und erweist sich als viel zu komplex, um in mehr als den einfachsten Fällen in Hardware eingebaut zu werden. Beim Sortieren dreht sich alles um Geschwindigkeit und Korrektheit. Die Geschwindigkeit hängt von der Wahl des Algorithmus, der Art und Variation der Daten sowie dem Datenvolumen ab. Die Richtigkeit hängt von der Art und dem Kontext der Daten ab. Es ist absolut trivial, ein mittelgroßes Array von Ganzzahlen zu sortieren, die in die native Wortgröße der CPU passen ( z31 oder 63 Bit plus Vorzeichen). Das Sortieren von Zeichenketten, die mehr als nur ASCII-Werte enthalten, ist äußerst komplex. IBM hat vor 20 Jahren ein Buch mit mehr als 500 Seiten veröffentlicht, in dem die Probleme von Zeichensätzen im Kontext nationaler Grenzen und allgemeiner Verwendung erörtert wurden. Und dann ist da noch die Frage nach nicht zusammenhängenden Daten: Beim Sortieren einer verknüpften Liste werden Zeiger im gesamten Speicher verfolgt.

Ross Patterson
quelle
10

Das Hauptproblem ist, dass Sortieralgorithmen (1) viel Flexibilität benötigen und (2) mit Hardware ohnehin nur sehr schwer zu beschleunigen sind.

Eine Sache ist, dass Sortieralgorithmen bereits schnell genug sind, um die Speicherbandbreite des Prozessors zu überschreiten - der Prozessor verbringt bereits einen großen Teil seiner Zeit damit, darauf zu warten, dass Daten hin und her in den Hauptspeicher verschoben werden. Ein hardwarebeschleunigter Sortier-Co-Prozessor oder eine spezielle Sortieranweisung hätte das gleiche Problem.

Die Art und Weise, wie diese Speicherbandbreite angesprochen wird, besteht darin, bessere Algorithmen und Datenstrukturen zu verwenden, die eine bessere "Lokalität" aufweisen, und auf diesem Gebiet wird noch erhebliche Arbeit geleistet, insbesondere "Cache-ahnungslose Algorithmen" (sie sind in dem Sinne, dass sie funktionieren, ahnungslos unabhängig von den Details des Caching, während "Cache-fähige" Algorithmen auf eine bestimmte Cache-Seitengröße usw. abgestimmt sind.

Im Gegensatz dazu verwenden Medienanwendungen (Audio und Grafik, insbesondere 3D-Grafik) einige sich sehr wiederholende Strukturen - natürlich gibt es Flexibilität, aber sie bauen auf einer großen und sehr gut strukturierten Grundlage auf. Dadurch konnte die Grafikbeschleunigung einfach mit Blitting (einer konfigurierbaren, aber immer noch sehr strukturierten Blockkopieroperation) und dem Zeichnen von Linien / Polygonen beginnen. Mit zunehmender Komplexität der Grafik- und Tonverarbeitung wurden Vektoroperationen zu einem offensichtlichen Ziel für die Optimierung - zuerst MMX (Vektoren von ganzen Zahlen), dann SSE (Vektoren von Floats). Dies bedeutete, dass es eine ziemlich genau definierte Struktur für die Funktionsweise einer 3D-Grafik-Engine gab, als die alte 3D-Grafik-Pipeline mit fester Funktion auf 3D-Grafikhardware verschoben wurde.

Bei 3D-Grafiken wird das, was früher in Hardware gemacht wurde, jetzt in Software aus Gründen der Flexibilität ausgeführt. Shader sind beispielsweise Software. Auf diese Weise erhalten wir eine große Auswahl an verschiedenen Shadern, die das Erscheinungsbild verschiedener Materialien verleihen. Diese Software funktioniert jedoch immer noch viel strukturierter als allgemeine Software und kann daher immer noch eine viel spezialisiertere Hardwareplattform verwenden. Aus diesem Grund kann Ihre Grafikkarte jetzt alles von der Physik bis zum Knacken von Passwörtern beschleunigen - Anwendungen, die ebenfalls zu demselben Modell passen und mithilfe der Befehlssätze moderner Grafikprozessoren effizient implementiert werden können.

Grafikprozessoren sind heute die geistigen oder tatsächlichen Nachkommen digitaler Signalprozessoren, die eine Art spezialisierter Prozessor für den Umgang mit digitalen Signalen (z. B. Audio) waren (und wahrscheinlich immer noch sind).

Was zu einem letzten Punkt führt - Sortieralgorithmen können durch Hardware beschleunigt werden. Abhängig von Ihren Daten kann die Sortierung mithilfe von MMX- oder SSE-Anweisungen (Single-Instruction-Multiple-Data) auf Ihrem Prozessor durchgeführt werden, aber aufgrund des Problems mit der Speicherbandbreite macht es wahrscheinlich nicht viel Sinn - vielleicht können Sie etwas energieeffizienter sein auf diese Weise jedoch. Sie können jedoch auch Ihre Grafikhardware verwenden. Auf diese Weise können Sie von der oft viel besseren Speicherbandbreite für Grafikkarten profitieren. Sie werden nicht in der Lage sein, alle Arten auf diese Weise zu ersetzen, aber es ist sicherlich möglich und wird wahrscheinlich gegebenenfalls durchgeführt.

IOW ist aufgrund der verschiedenen wirtschaftlichen und praktischen Probleme nicht wirklich sinnvoll , Hardware speziell zu entwickeln, um eine relativ enge Aufgabe wie das Sortieren zu beschleunigen. Eine Funktion, die einen größeren Aufgabenbereich beschleunigt oder vorhandene Beschleunigungshardware auf einen größeren Aufgabenbereich anwendbar macht, ist häufig viel sinnvoller.

Steve314
quelle
3

Aber sie tun es! Sie werden Befehlssatzerweiterungen genannt. (Sachen wie SSE und dergleichen)

Bestimmte Aufgaben haben sehr schöne Implementierungen in Software. Normalerweise sind diese Implementierungen gut genug, um die Aufgabe zu erledigen, sodass keine spezielle Hardware erforderlich ist. Wenn Sie eine spezielle Hardware herstellen möchten, benötigen Sie eine Vielzahl von Anwendungen, damit sich diese lohnt.

Wenn Sie sich Hardware ansehen, mit der dies funktionieren könnte, würde ich davon ausgehen, dass Sie sich so etwas wie FPGAs ansehen. Wie Sie bei FPGAs sehen können, würde der Chip viel teurer werden, während er für viele Anwendungen nicht anwendbar wäre.

Onno
quelle
Ich muss nach SSE googeln, aber im Voraus ist das Sortieren wahrscheinlich universell. Ist es auf Hardwareebene implementiert?
MaiaVictor
Würden Sie, da wir dort sind, Bücher empfehlen?
MaiaVictor
Ich habe gerade über auftragsspezifische Optimierungen gesprochen, die generell auf Prozessoren im CPU-Stil implementiert werden, da die Sortiernetzwerke als Beispiel dienen. Ich weiß nicht, ob SSE oder ein anderer Befehlssatz das Sortieren bestimmter Optimierungen enthält. Ich habe Google Sorting Networks durchgeführt, und da es optimierte allgemeine Implementierungen gibt, denke ich, dass Software-Implementierungen die Aufgabe genauso gut erfüllen können, wenn die Implementierung richtig durchgeführt wird.
Onno
Ich muss darauf hinweisen, dass die meisten Befehlssatzerweiterungen auf einer niedrigeren Ebene arbeiten als das Sortiernetzwerk, das Sie als Beispiel verwendet haben, aber es ist nicht unmöglich, eine Mehrregisteroptimierung zu entwickeln, die das Sortieren auf diese Weise ermöglicht. Die Frage für CPU-Hersteller wäre jedoch: "Würde es sich auszahlen, um die Kosten zu rechtfertigen?".
Onno