Die x86 Kerne sind, das hat Intel afaik offiziell bekanntgegeben, Pentium1-Ableitungen. Ergänzt allerdings um sehr mächtige SIMD (oder war es sogar MIMD?) Einheiten - die die eigentliche Rechenleistung aufbringen. Deswegen ist die "x86-Kompatibilität" imho auch kein so großer Vorteil, wie es auf den ersten Blick erscheint: Zwar läuft deine bestehende Software - aber um von dem zusätzlichen Potential zu profitieren, muss das ganze trotzdem massiv an die andere Ausführungsstruktur (vom Caching ganz zu schweigen) angepasst werden. Mit einer normalen CPU hat das in etwa soviel zu tun, wie eine AES2-Einheit mit einem 80286. Nur mit dem Unterschied, das erstere wenigstens in CPUs zu finden ist, die auch basalen IA16-Code schneller ausführen können. Larrabees Erben dagegen dürften in Sachen IA64-Leistung spürbar langsamer (sowohl pro Watt, vor allem aber pro Thread) sein, als z.B. ein Xeon.
Es ist trotzdem ein gewichtiger Grund, denn du kannst damit eben ganz banalen x86 Code ausführen. Das geht im einen extrem in die Richtung von Atom-Mini-Clustern, wenn du einfach die Kerne nutzt, und bei Kernen + SIMD (MIMD ist es meines Wissens nach nicht pro Kern, aber jeder Kern kann anderen Code ausführen) kannste dann halt den CPU-SSE/AVX-Style verwenden. Ich empfinde die Dinger schon ähnlicher einer normalen CPU als du das einschätzt. Zudem soll Intels Compiler wirklich gut funktionieren. Man hat ja auch sehr viel Erfahrung im Compilerbau.
Es bleibt abzuwarten, wie gut Intels Entwicklerwerkzeuge ansprechen, sprich wieviel der Compiler selbsständig auf die SIMDs auslagern kann. Aber imho dürfte es bei heutiger, gut optimierter Software (und wen interessiert Software, die man schon heute nicht optimieren muss?) schon allein an der Parallelität scheitern. Wer längt sein Programm schon auf 80 Kerne aus, wenn eh nur 16 in einer Workstation verfügbar sind? Und das ist nur eine Karte. Idealerweise sollte es "morgen" auf 4 mal 80 Kernen (angebunden via lahmen PCIe und mit vergleichsweise kleinem, nicht aufrüstbaren lokalen, schnellen Speicher) laufen? Unter Nutzung eines neuen Befehlssatzes?
Ich bin kein Experte, aber für mich klingt das nach Arbeit und der Hauptunterschied zu CUDA besteht nur noch darin, dass sie in gewohnten Entwicklungsumgebungen ablaufen kann.
Besser als das was man von CUDA her kennt wohl recht sicher, und auch besser als das OpenCL Zeugs. Allein, das man die normale Entwicklungsumgebung und die normalen seit langem getesteten und entwickelten Tools nutzen kann ist halt WIRKLICH ein Segen. Geh dabei auch weg vom Workstation-Denken. Bei "MIC" sollte man eher direkt an Cluster denken, also MPI-Umgebungen. Da ist die Parallelität eh schon da und wird auch genutzt. Allgemein sollte man wenn man über GPU/"MIC" Einsätz spricht immer davon ausgehen, das man hochgrad parallelisierbaren Code hat, und der nicht nur auf 10 oder 20 Cores vernünftig performt, sondenr auch auf 500, tausenden oder hundertausenden von Cores läuft.
Jetzt noch was aus Entwicklersicht bzgl. den Tools und dem Vorteil von x86:
Ich hab jetzt erst neulich mit jemanden ca. 20h zusammen vor nem Problem gesessen, um eine GPU-Anwendung zu debuggen. Ich sags dir, die Debugging-Möglichkeiten einer CPU sind gewaltig besser als das was man mit CUDA oder OpenCL hat. Das ist absolut nicht zu vergleichen. Wäre das reiner CPU-Code gewesen, wären wir sicherlich in 5h fertig gewesen, wenn überhaupt, da wahrscheinlich die Probleme nie aufgetaucht wären. GPU-Programme debuggen ist ein GRAUSS!
Ich sag daher immer, wenns um GPU-Programme geht, und ein Fehler auftaucht der debugt werden muss und wie lange das dauert:"Kann in ner Stunde behoben sein, kann aber auch sein dass ich in 3 Tagen noch dran sitze und den Fehler nicht gefunden habe, das Debuggen ist halt einfach hässlich, weil man nicht direkt an die Daten ran kommt, und die APIs teilweise halt extrem hinderlich sind bzgl der Fehlersuche sind, so Marke: "Es ist ein Fehler aufgetaucht"", tja... irgndwann, irgendwo, geh mal suchen..."
Ich seh daher diesen x86 Ansatz als unglaublich schwergewichtigen Vorteil. Was bringts dir, wenn du 20% mehr Performence/Watt rauskitzeln kannst aus den GPUs von AMD und nVidia, du aber 4 mal so lange dran entwickeln musst, und dich dann noch um die Leute, die das gut können, schlagen musst, und auf der anderen Seite halt nahezu jeder Wald und Wiesen Programmierer (ja ich weiß überspitzt) zumindest lauffähigen Code generieren kann, der dann auch noch relativ einfach zu optimieren ist.
AMD zumindest schon sehr früh (genauer: Seit der ATI-Übernahme) darüber spekuliert. Aber imho ist das in der Praxis auch egal. Wenn man sich die Energie- und Platzeffizienz von immer mächtigeren gpGPUs anguckt (die ersten Firestreams > die ersten Teslas > GCN > Knights Corner) und im Gegenzug die von immer paralleleren CPU-Konzepten (Netburst > Sledgehammer > Core i -EX > Bulldozer > Atom-Cluster > hypothetischer Larrabee-Co-Prozessor), dann wird für mich eines klar:
Es geht nicht um die Vereinigung zweier verschiedener Ansätze zu einer Einheit, sondern um den Ersatz beider durch eine Zwischenstufe. Es ist nunmal weder die eine noch die andere Technik prinzipiell besser, sondern sie waren traditionell für zwei grundverschiedene Aufgabenstellungen optimiert - und mittlerweile schwindet dieser Unterschied auf Softwareebene ("CPU"-Code wird paralleler, "GPU"-Code komplexer) und das spiegelt sich in den Architekturen wieder.
Naja, da muss man sehr aufpassen, wie das ausgelegt wird. Du sprichst es ja schon absolut richtig an. CPUs können Dinge effizient! erledigen, die GPUs nicht effizient können und umgekehrt. Daher will/muss man leider beides nutzen, um die Effizienz zu steigern. Das Problem dabei ist halt, dass das Einbinden der GPU imo noch sehr viel Overhead produziert, und daher viele Aufgaben gar nicht auf GPUs laufen können, weil einfach der Overhead schon alles kaputt macht. Wenn halt allein der Overhead der GPU mehr Energie verbraucht, oder länger dauert, als es einfach auf der CPU laufen zu lassen, ist es halt einfach sinnfrei, da die GPU zu verwenden. Daher muss man schon beides zu "einer" Einheit verbinden. Halt Contextswitch ermöglichen, damit die CPU und iGPU/GPU eben so zusammen arbeiten können, wie das heutzutage eben Int-Cores und FPU in der CPU tun.
Daher ist es schon die "vereinigung zweier Ansätze in einer Einheit" nur bleiben eben gewisse Differenzierungen erhalten, wie bei den Int-Cores und den FPUs. Heute würde aber auch keiner mehr sagen, Int-Core und FPU wären zwei getrennte Einheiten. Weißte was ich meine?
Ich hab das Video zwar stellenweise übersprungen - aber zu HMC konnte ich nur die eine allgemein Vorstellung ~Anfang letztes Drittel finden. Da wird gar nichts zur Ansteuerungslogik gesagt, sondern stattdessen das Interposter-Konzept vorgestellt (das mit Haswell wohl ziemlich sicher nicht als RAM kommt - und imho auch danach so schnell nicht, weil es einfach zu unflexibel ist).
Zur Ansteurungslogik wird kein Wort verloren.
Ja, schau mal noch hier rein:
Hybrid Memory Cube Consortium - The Technology Ab 2:20.
Ist aber trotzdem gut, wenn du dir das andere Video großteils angeschaut hast, dann verstehst du, was so toll an HMC ist.
Ich versteh allerdings auch nicht, was du mit "einfach zu unflexibel" meinst. Interposer kannst du nehmen, musst du aber nicht. Du hast halt nur immer den Logic-Layer und drüber den Speicher, die Anbindung steht dir apriori erstmal frei, wobei man eben eine differenzielle Punkt zu Punkt Verbindung setzt wie bei PCI-E, wenn ich das richtig verstanden habe. DDRx ist halt noch ein Bus. Das ist eine signifikante Änderung. Ganz abgesehen davon, das man eben mit HMC ein zichfaches der Bandbreite je "Channel" bekommt als bei DDR3/4.