Die anderen Antworten hier sind ziemlich gut. Ich werfe auch meine 2 Cent ein.
Ein Grund für die Verbreitung von CPUs ist ihre Flexibilität. Sie können sie für eine unendliche Vielzahl von Aufgaben neu programmieren. Heutzutage ist es für Unternehmen, die Produkte herstellen, billiger und schneller, eine kleine CPU oder einen kleinen Mikrocontroller in etwas zu stecken und dessen Funktionalität zu programmieren, als benutzerdefinierte Schaltkreise zu entwickeln, um die gleiche Aufgabe zu erfüllen.
Wenn Sie dasselbe Gerät wie andere verwenden, können Sie die bekannten Lösungen für Probleme nutzen, die bei Verwendung desselben Geräts (oder eines ähnlichen Geräts) auftreten. Und während die Plattform reift, entwickeln sich Ihre Lösungen weiter und werden sehr ausgereift und optimiert. Die Personen, die auf diesen Geräten codieren, erwerben auch Fachwissen und beherrschen ihr Handwerk sehr gut.
Wenn Sie einen neuen Gerätetyp von Grund auf neu erstellen, eine Alternative zu einer GPU, würde es Jahre dauern, bis selbst die ersten Anwender tatsächlich wissen, wie man ihn verwendet. Wie optimieren Sie das Auslagern von Berechnungen auf dieses Gerät, wenn Sie einen ASIC an Ihre CPU anschließen?
Die Computerarchitektur-Community ist seit mehreren Jahren begeistert von dieser Idee (offensichtlich war sie schon früher beliebt, erlebte aber vor kurzem eine Renaissance). Diese "Beschleuniger" (ihre Bezeichnung) weisen einen unterschiedlichen Grad an Umprogrammierbarkeit auf. Das Problem ist, wie eng definieren Sie den Umfang des Problems, das Ihr Beschleuniger angehen kann? Ich habe sogar mit einigen Leuten gesprochen, die an der Erstellung eines Beschleunigers arbeiteten, indem sie analoge Schaltkreise mit Operationsverstärkern verwendeten, um Differentialgleichungen zu berechnen. Tolle Idee, aber extrem enger Spielraum.
Nachdem Sie einen funktionierenden Beschleuniger haben, werden die wirtschaftlichen Kräfte über Ihr Schicksal entscheiden. Marktträgheit ist eine unglaubliche Kraft. Auch wenn etwas eine großartige Idee ist, ist es wirtschaftlich machbar, Ihre Arbeitslösungen für die Verwendung dieses neuen Geräts umzugestalten? Vielleicht, vielleicht nicht.
GPUs sind für bestimmte Arten von Problemen furchtbar, daher arbeiten viele Leute / Firmen an anderen Arten von Geräten. Aber GPUs sind bereits so verwurzelt, werden ihre Geräte jemals wirtschaftlich sein? Ich denke wir werden sehen.
Bearbeiten: Erweitern Sie meine Antwort ein wenig, jetzt, da ich aus dem Bus bin.
Eine vorsichtige Fallstudie ist das Intel Larrabee-Projekt. Es begann als Parallelverarbeitungsgerät, das Grafiken in Software erstellen konnte. Es gab keine spezielle Grafikhardware. Ich habe mit jemandem gesprochen, der an dem Projekt gearbeitet hat, und ein Hauptgrund, warum er sagte, es sei fehlgeschlagen und abgebrochen worden (abgesehen von schrecklicher interner Politik), war, dass er den Compiler einfach nicht dazu bringen konnte, guten Code dafür zu produzieren. Natürlich hat es funktionierenden Code erzeugt, aber wenn der gesamte Punkt Ihres Produkts die maximale Leistung ist, ist es besser, einen Compiler zu haben, der ziemlich optimalen Code erzeugt. Dies lässt sich auf meinen früheren Kommentar zurückführen, dass ein Mangel an fundiertem Fachwissen in Bezug auf Hardware und Software für Ihr neues Gerät ein großes Problem darstellt.
Einige Elemente des Larrabee-Designs haben es in das Xeon Phi / Intel MIC geschafft. Dieses Produkt hat es tatsächlich auf den Markt gebracht. Es konzentrierte sich ausschließlich auf die Parallelisierung wissenschaftlicher und anderer HPC-Berechnungen. Es sieht so aus, als wäre es jetzt ein kommerzieller Misserfolg. Eine andere Person, mit der ich bei Intel gesprochen habe, hat angedeutet, dass das Preis-Leistungs-Verhältnis nicht mit denen von GPUs konkurriert.
Die Leute haben versucht, die Logiksynthese für FPGAs in Compiler zu integrieren, damit Sie automatisch Code für Ihre FPGA-Beschleuniger generieren können. Sie funktionieren nicht so gut.
Ein Ort, der wirklich fruchtbarer Boden für Beschleuniger oder andere Alternativen zu GPUs zu sein scheint, ist die Wolke. Aufgrund der Skaleneffekte, die bei diesen großen Unternehmen wie Google, Amazon und Microsoft bestehen, lohnt es sich, in alternative Berechnungsschemata zu investieren. Jemand hat bereits die Tensor-Verarbeitungseinheiten von Google erwähnt. Microsoft verfügt über FPGAs und andere Komponenten in seiner Bing- und Azure-Infrastruktur. Gleiche Geschichte mit Amazon. Es ist absolut sinnvoll, wenn die Waage Ihre Investition in Zeit, Geld und Ingenieurstränen ausgleichen kann.
Zusammenfassend lässt sich sagen, dass die Spezialisierung mit vielen anderen Dingen im Widerspruch steht (Wirtschaftlichkeit, Reifegrad der Plattform, technische Fachkenntnisse usw.). Eine Spezialisierung kann Ihre Leistung erheblich verbessern, schränkt jedoch den Anwendungsbereich Ihres Geräts ein. Meine Antwort konzentrierte sich auf viele negative Aspekte, aber Spezialisierung hat auch eine Menge Vorteile. Es sollte unbedingt verfolgt und untersucht werden, und wie ich bereits erwähnte, verfolgen viele Gruppen es ziemlich aggressiv.
Entschuldigung, bitte nochmal bearbeiten: Ich denke, Ihre ursprüngliche Prämisse ist falsch. Ich glaube, es ging weniger darum, nach zusätzlichen Quellen für Rechenleistung zu suchen, als vielmehr darum, dass Menschen eine Chance erkennen. Grafikprogrammierung ist sehr algebralastig und die GPU wurde entwickelt, um allgemeine Operationen wie Matrix-Multiplikation, Vektoroperationen usw. effizient auszuführen. Operationen, die auch im wissenschaftlichen Rechnen häufig vorkommen.
Das Interesse an GPUs begann, als die Leute erkannten, dass die Versprechungen des Intel / HP EPIC-Projekts (Ende der 90er Jahre, Anfang der 2000er Jahre) stark übertrieben waren. Es gab keine generelle Lösung für die Compiler-Parallelisierung. Anstatt also zu sagen "Wo finden wir mehr Rechenleistung, oh wir könnten die GPU ausprobieren", war es meiner Meinung nach eher "Wir haben etwas, das sich gut für parallele Berechnungen eignet, können wir dies allgemeiner programmierbar machen". Viele der beteiligten Personen waren Mitglieder der Scientific Computing-Community, die bereits parallelen Fortran-Code hatten, den sie auf Cray- oder Tera-Computern ausführen konnten (Tera MTA hatte 128 Hardware-Threads). Vielleicht gab es Bewegung aus beiden Richtungen, aber ich habe nur von den Ursprüngen von GPGPU aus dieser Richtung gehört.