Intel hat gerade eine neue 48-Kern-CPU vorgestellt. Was bedeutet dies für viele Programmierer? [geschlossen]

7

Intel hat gerade einen neuen 48 Kern-CPUs (" Intel zeigt 48-Core-x86-Prozessor als Single-Chip-Cloud-Computer ", Autor Ryan Shrout, 2. Dezember 2009; Chip war "Single-chip Cloud Computer " auch bekannt als Bangalore ). Mehr als nur die Anzahl der Kerne, diese neue Architektur scheint eine Menge interessanter Funktionen einzuführen, wie diese:

  

Die Dinge werden hier interessant - Intel sagt, dass sie die Hardware-Cache-Kohärenz entfernt haben, was bedeutet, dass jede "Kachel" in dem, was sie im lokalen L2-Cache speichert, vollständig getrennt ist. Die gesamte Cache-Kommunikation zwischen Kernen und Kacheln wird somit von dem Maschendatenkommunikationssystem und dem dedizierten "Nachrichtenpuffer" auf jeder Kachel gehandhabt.

Was werden diese neuen Architekturen für uns Programmierer bedeuten? Wie werden wir die Komplexität der CPUs von morgen angehen?

    
static_rtti 25.05.2014, 21:32
quelle

10 Antworten

8
  

hat die Hardware-Cache-Kohärenz entfernt   was effektiv jede "Kachel" bedeutet   wird völlig getrennt in was es ist   speichert im lokalen L2-Cache.

Das ist gut, es wird wahrscheinlich bedeuten, dass Programme, die Low-Coupling-Systeme haben, die meistens selbstständig arbeiten, jeweils einen eigenen Prozessor und Cache haben, was zu einer höheren Rate von Cache-Hits und besserer individueller Performance führt. Der Engpass wird sich auf die Kommunikation zwischen diesen Modulen verschieben, so dass wahrscheinlich effiziente Low-Level-Tools speziell dafür geschrieben werden müssen, um dies zu optimieren, damit die meisten Programmierer von der Architektur wirklich profitieren.

Die Programmierung muss sich darauf konzentrieren, Module mit einer sehr geringen Kopplung zu schreiben, was ihre Funktionalität offenlegt und sie als Service anbietet. Wenn Compiler auf skalierbare Prozessorarchitekturen aufmerksam werden, "wissen" sie, dass sie diese Module jeweils ihrem eigenen Prozessor zuweisen, mit der Möglichkeit, Modulredundanz über die Prozessoren hinweg zu haben, indem sie mehrere Kopien desselben Moduls jeweils auf ihrem eigenen Prozessor laufen lassen dynamische Anzahl solcher Duplikationen, um die Anzahl der Anfragen pro Zeiteinheit, die jedes Modul hat, zu skalieren.

Grundsätzlich wird Load-Balancing auch für den Desktop eine Option, insbesondere für die Kern-OS-Funktionalität, die von einer Vielzahl von Prozessen gleichzeitig aufgerufen werden muss - redundante Kopien des Kernels sorgen dafür dass mehr Prozesse in derselben Zeit mehr Arbeit leisten, ohne auf das Betriebssystem warten zu müssen.

Außerdem wird die Virtualisierung mehr zu einem Werkzeug des Handels werden, da sie in den Compiler integriert wird. Code, der nativ für verschiedene Plattformen geschrieben wird, kann innerhalb derselben Programmeinheit zusammenarbeiten, da verschiedene Bits auf verschiedenen Prozessoren laufen und die Kommunikationsarchitektur diese nahtlos integrieren wird. Verschiedene Teile derselben Anwendung werden in verschiedenen Programmiersprachen geschrieben, da sie separat kompiliert und als Dienste bereitgestellt werden.

    
luvieere 03.12.2009, 09:15
quelle
5

Es bedeutet, dass wir alle Erlang oder eine andere funktionale Sprache lernen sollten, die für Nebenläufigkeit entwickelt wurde.

Das Programmieren der Parallelität durch manuelles Koordinieren der Erstellung und Interaktion mehrerer Threads mithilfe von Mutexes und anderen Techniken ist ebenso umständlich und fehleranfällig wie der Versuch, OO-Entwurf in einer Sprache zu erstellen, die OO nicht standardmäßig unterstützt. Unveränderliche Daten und ein funktionaler Programmierstil sind natürlich für die Parallelität geeignet (wie die zahlreichen funktionalen Sprachen zeigen, die speziell für Nebenläufigkeit entwickelt wurden). Ich vermute, dass Entwickler, wenn sie die Prozessorleistung durch Parallelitätsverbesserungen über die Taktgeschwindigkeit hinaus erweitern, zunehmend auf funktionale Sprachen schauen werden, um diese Verarbeitungsleistung zu nutzen, bis schließlich funktionale Sprachen vorherrschen.

    
Wedge 03.12.2009 08:55
quelle
3

48 Kern-CPU muss Messaging-Hardware und Mutex-Hardware haben.

    
Shuriken 03.01.2014 15:45
quelle
2

Herb Sutter gab mehrere Artikel über effektive Nebenläufigkeit .

Als Einleitung können Sie seinen ausgezeichneten Artikel "Eine grundlegende Wende in Richtung Parallelität in Software" lesen.

    
Marcin Gil 03.12.2009 08:31
quelle
2

Die ideale Situation wäre, dass es für die 90% der Programmierer gar nichts bedeutet.

Wie bei fast allem sollten wir ein Programmierparadigma haben, das mit einer oder mehreren Programmiersprachen unterstützt wird, die die Komplexität von Multitasking vor dem üblichen Programmierer verbergen. Es ist ziemlich schwierig, irgendetwas mit Threads zu programmieren, mehr, wenn Sie 20 oder 30 verwenden müssen, damit das Programm die CPU wirklich verbraucht.

Es gibt mehrere Vorschläge wie Parallels Extensions, Microsoft Axum oder Erlang zu Beginn, speziell Erlang hat eine lange Erfolgsgeschichte über die Jahre.

    
Jorge Córdoba 03.12.2009 08:48
quelle
1

Wir werden wahrscheinlich unseren utopischen Traum von einem magischen Compiler aufschieben müssen, der Code für Sie parallelisiert, ohne dass Sie darüber nachdenken müssen.

    
Crashworks 03.12.2009 08:57
quelle
1

Das Zitat klingt, als würden Sie über Larrabee sprechen? Auf dieser Art von Architektur kann Multicore nicht einfach ignoriert werden, da die Verarbeitungskerne einfacher sind und den Code, den Compiler derzeit erzeugen, langsamer laufen würden - vor allem, weil sie Befehle in der richtigen Reihenfolge ausführen (wodurch die Chipgröße eingespart wird) einfacherer Kern).

Im Allgemeinen ist Multicore hervorragend für Server geeignet, und typischer Servercode kann problemlos ohne Änderungen skaliert werden.

Auf dem Desktop ist der meiste single-threaded Code für aktuelle Generationen in Ordnung. Wenn das Programm hohe Kosten verursacht, können Entwickler die Arbeit einfach auf mehrere Kerne verlagern.

Aber ich denke, viele Core-Systeme sind nicht für die Desktop-Nutzung geeignet. Wenn Anwendungen dafür optimiert werden, wird eine neue Art von Verzögerung eingeführt, die in der Summe merkliche UI-Verzögerungen in Anwendungen einführen kann. Für den Benutzer fühlt es sich möglicherweise weniger ansprechend, was wiederum als "langsam" empfunden wird! Die Ursache dafür ist viel mehr Planungsarbeit, wenn Entwickler die Arbeitslast in kleinere Pakete aufteilen und sie in Arbeitswarteschlangen anordnen und Signale senden, um sie zu verarbeiten usw.

Diese IMHO gilt sogar für auf Nachrichtenübertragung basierende Codes (erlang & amp; co.) - obwohl dort die Verzögerungen kürzer sein werden als bei Locks & amp; signalbasierten Code, aber sie summieren sich auch.

Wahrscheinlich wird dies nach einigen Generationen vieler Core-Desktop-Architekturen gelöst werden. Aber gut, der Start wird nacheilen, die Systeme werden sich die meiste Zeit langsam anfühlen (und nur schnell für lange Zeit, wenn man Verarbeitungsjobs nimmt).

    
Frunsi 03.12.2009 09:13
quelle
0

Wir werden viele kleine Aufgaben machen müssen, die kleine Probleme lösen, aber aneinandergekettet sind. Klingt sehr unix-ish

Großer monolithischer sequentieller Code wird immer mehr verschmäht.

    
Simeon Pilgrim 03.12.2009 08:32
quelle
0

"Unveiled" bedeutet "zeigte einen Prototyp": In der Pressemitteilung heißt es, dass Intel 2010 mit 6- und 8-Kern-CPUs auskommen wird. 48-Core-Chips werden die Produktion wahrscheinlich erst in den kommenden Jahren treffen.

Wie auch immer, ich habe dieses "oh nein Dutzende von Kernen" seit Jahren gehört. Als Branche haben wir genug Probleme, single-threaded sequentiellen Code richtig zu machen. Wenn Firefox abstürzt oder IE nicht richtig rendern kann, merkt man, dass das Hinzufügen von mehr Kernen zu der Situation nicht ein bisschen helfen würde. Bei der Arbeit habe ich eine 4-Kern-Box und es sind bereits mehr Kerne als alle meine Software verwenden können. Außer wenn Sie ein Spieler sind oder HPC oder Cloud-Hosting betreiben, sind Sie wahrscheinlich, wenn überhaupt, nicht sehr CPU-gebunden.

Wenn Sie sich ein typisches System ansehen, liegt der Engpass in der Benutzerinteraktion. Warum investieren sie nicht all ihre Energie in die Optimierung? Ich schätze, weil sie eine Chip-Firma sind und schnellere CPUs machen, ist der Hammer, den sie benutzen, um alles zu treffen, egal wie nicht-nagelartig sie sind.

Es ist eine Pressemitteilung über ein experimentelles Design. Es ist wie Ferrari mit einem neuen 10-Liter-18-Zylinder-Motor: es klingt cool, und es könnte mehr Straße Ferraris verkaufen, aber 99,999% von uns werden sich nicht wirklich Sorgen um Fahren bei 130 Stundenmeilen machen müssen.

    
Ken 03.12.2009 15:35
quelle
0
  

Es sei denn, Sie sind ein Spieler oder machen HPC oder Cloud-Hosting ...

Aber ziemlich viele Leute sind Gamer, und die meiste Rechenleistung der Welt liegt in Mainframes, Transaktionen, Datenbanken und ja, Cloud-Hosting ... HPC-Supercomputer sind auch mit Clustern von parallelen Prozessoren für massiv parallel aufgebaut rechnen.

Niemand erwartet, dass Hersteller von Heimcomputern diese auf ihren Home-Desktops installieren. Angesichts der notwendigen Software wird es Administratoren, Wissenschaftlern und CGI-Künstlern jedoch das Leben erleichtern, indem sie eine Annäherung / Vorschau ihrer Arbeit (oder sogar alles) auf ihrer lokalen Workstation sehen können, anstatt Zeit zu verlangen in der Universität Comp Center oder Render Farm. Und Admins haben weniger Boxen, um die sie sich kümmern müssen.

Ich wünschte, ich könnte einen Einblick geben, was es für die Programmierer bedeuten würde, aber ich muss immer noch Multithreading in Java beherrschen, nur kann ich sagen, dass es ein Kopfzerbrechen wäre, es manuell zu tun 48 Kerne. Rekursive Algorithmen könnten es effektiv verwenden, wenn der Compiler intelligent genug ist. Nicht sicher über Java, aber das letzte Mal, als ich einen rekursiven Algorithmus in Python ausprobierte, lief es nur auf einem Kern.

    
Jostikas 27.02.2011 11:10
quelle