Ist es sinnvoll, Berechnungen auf der Kernel-Ebene des Betriebssystems auf einer GPU auszuführen?

8

Ich habe bemerkt, dass eine GPU Hunderte von Kernen haben kann, so dass eine parallele Berechnung mit ihnen wesentlich beschleunigt werden kann. Es scheint, dass in einem OS-Kernel keine parallelen Algorithmen zur Beschleunigung verwendet werden.

Menschen machen parallel Computing in Benutzer-Tempo mit OpenMP, aber warum nicht im Kernel-Space? Ich denke, es gibt viele Aufgaben innerhalb des Betriebssystems, die eine parallele Verarbeitung erfordern, wie die Verarbeitung mehrerer Netzwerkverbindungen und Pakete, Kryptografieoperationen, Speicherverwaltung, Suche? Einige Firewalls filtern und überwachen Netzwerkflüsse durch Mustervergleiche, forschungsorientierte Betriebssysteme kann auch das Programm analysieren, bevor es ausgeführt wird, was zeitaufwendig und möglicherweise parallelisierbar ist.

Warum verwenden Betriebssysteme keine GPUs, um ihre Leistung und ihren Durchsatz zu verbessern? Ist es sinnvoll, OS-Berechnungen auf der GPU auszuführen?

    
W.Sun 09.03.2011, 06:26
quelle

4 Antworten

17

GPU-Anwendungen für die parallele Verarbeitung erfordern, dass Sie die exakt gleiche Operation hunderte Male ausführen. Darüber hinaus sind Sie eingeschränkt, welche Operationen Sie ausführen können - Verzweigungen sind im Allgemeinen keine Option und auch keine Zeigerketten.

Die meisten Kernel-Operationen passen nicht in dieses Modell; Vieles, was der Kernel tut, ist die Verwaltung von Ressourcen über Zeiger, einschließlich Sperren. Dies passt nicht in das GPU-Modell. Wie für die anderen Operationen zitieren Sie:

  • Kryptographie: GPUs eignen sich hervorragend, um kryptografische Verschlüsselungen knacken einmal ausgeführt . In diesem Fall ist die CPU viel schneller, da sie nur einmal ausgeführt werden muss.
  • Verarbeitung des Netzwerkverkehrs: Pakete kommen zu unterschiedlichen Zeiten an und müssen mit geringer Latenz verarbeitet werden. Die GPU kann in der Lage sein, statusfreie Firewall-Verarbeitung durchzuführen, aber Sie müssten Pakete bündeln und sie auf ein paar hundert gleichzeitig ausführen lassen, um einen Vorteil zu haben - das lindert Latenz und Jitter und so bleibt der Job der CPU überlassen. Außerdem erfordert die zustandsgesteuerte Verfolgung einen gemeinsamen, gesperrten Zugriff auf Verbindungsverfolgungstabellen, etwas, zu dem eine GPU nicht in der Lage ist.
  • Speicherverwaltung: Dies ist eine zeigerlastige Operation mit vielen Sperren, und daher ist eine GPU auch nicht annähernd so gut geeignet. Darüber hinaus ist die Latenz entscheidend, und das Senden eines Jobs an eine GPU erfordert viel Latenz.
  • Suchen: Moderne OS-Kernel suchen nicht. Das ist ein Job für Userspace - und wieder ist es ein sehr zeigerschwerer Job.

GPUs eignen sich gut für mathematische Kernel, bei denen der Durchsatz von größter Bedeutung ist und die Latenz ein kleines Problem darstellt - numerische Simulationen, so etwas. Sie sind im Allgemeinen nicht gut für die Datenverwaltung geeignet oder dort, wo die Latenz kritisch ist - genau das, was OS-Kernel tun. Aus diesem Grund nutzen Betriebssysteme die GPU-Beschleunigung normalerweise nicht.

Es gibt andere Arten der Hardwarebeschleunigung, die OS-Kernel nutzen können und müssen - manche Maschinen haben spezielle kryptografische Hardware-Cores, die speziell für die schnelle Durchführung von einmaligen Krypto-Berechnungen entwickelt wurden. Diese können vom Kernel gut genutzt werden, da sie besser für die spezifischen Probleme des Kernels geeignet sind.

    
bdonlan 09.03.2011, 06:38
quelle
4

Ihr Eindruck, dass Kernel nicht parallelisiert werden, ist falsch. Moderne Kernel haben sich ziemlich gut an Multi-Core- / Multi-Thread-CPUs angepasst und gehen in dieser Hinsicht quasi "parallel" mit allem um.

Was die GPUs betrifft, unterscheiden sie sich sehr in Bezug auf Anweisungen, die sie von CPUs verarbeiten können. Speziell angepasst an Vektor-Gleitkommaberechnungen. Der Linux-Kernel verwendet diese Art von Operation im Wesentlichen nie. Ausnahmen sind crypto und ein Raid-Code, der gut an Vektoroperatoren angepasst werden kann (und wahrscheinlich auch andere, aber immer noch sehr begrenzt).

Im Allgemeinen benötigt der Kernel selbst nicht die Art von Operationen, die GPUs bereitstellen. Für die Zeiten, in denen sie benötigt werden, finden Sie moderne CPU-Kerne mit spezifischen Befehlssätzen (wie SSE, AES-NI usw.) oder dedizierten Co-Prozessoren / Offload-Engines (wiederum für Krypto- und Raid-Berechnungen, Netzwerk-Paket-Checks usw.) ...).

    
Mat 09.03.2011 06:37
quelle
0
  

Moderne GPUs können für mehr als nur Grafikverarbeitung verwendet werden; Sie können auch allgemeine Programme ausführen. Obwohl sie nicht für alle Arten von Programmen geeignet sind, zeichnen sie sich durch Code aus, der ihren hohen Grad an Parallelität ausnutzen kann. Die meisten Anwendungen der sogenannten GPU-Berechnung (General Purpose GPU) liegen außerhalb der Systemsoftware. Jüngste Arbeiten zu Software-Routern und verschlüsselten Netzwerkverbindungen haben jedoch Beispiele dafür geliefert, wie GPGPUs auf Aufgaben angewendet werden können, die im Bereich der Betriebssysteme traditioneller sind. Diese Anwendungen kratzen nur an der Oberfläche. Andere Beispiele für Aufgaben auf Systemebene, die GPUs nutzen können, sind allgemeine Kryptografie, Mustererkennung, Programmanalyse und Beschleunigung von häufig verwendeten Standardalgorithmen.

Aus Ссылка

zitiert     
Ale 17.03.2015 13:22
quelle
-1

Ja, ich stimme Mat zu. Der Engpass der heutigen Rechenwelt ist das Betriebssystem, das auf virtuellen Threads läuft. Dies schafft einen Bedarf im Benutzerbereich, um Anwendungen zu erstellen, die GPU verwenden. Trotzdem läuft der Kernel immer noch sequenziell. Zum Beispiel ist das Durchsuchen von Operationen als OS-Funktion integriert, die die Dateisystemtabelle sequenziell oder durch Indexieren und dann Suchen unter Verwendung von binären Suchalgorithmen prüft. Beide Vorgänge sind zeitaufwendig. Warum senden Sie die partielle Dateisystemtabelle nicht an GPUs und verzweigen Sie die Suchoperation. Auf Verarbeitungsebene sind die meisten OS-Operationen nichts anderes als arithmetische und logische Berechnungen und dennoch warten diese Operationen auf die CPU. Das Problem, das hier besteht, ist die Latenz, die beim Senden und Empfangen der Operation / des Speichers von der CPU zur GPU und zurück zur CPU involviert ist. Viel Forschung ist notwendig, um diese Latenz zu verringern. Aber das Problem ist hier nicht die Hardware-Latenz (zwischen CPU und GPU), sondern die Latenz des Betriebssystems. Das Betriebssystem muss die Latenz schätzen und entscheiden, ob die Verarbeitung in der CPU besser oder die GPU besser ist. Dies ist wiederum Hardware-abhängig. Diese Probleme könnten angegangen und erforscht werden. Es braucht nur große Investitionen für die Forschung von OS-Unternehmen.

    
user3473589 28.03.2014 17:27
quelle