2009-05-29 15 views
0

Ich möchte Programmiercode für zukünftige Hardware üben. Was ist das? Die zwei wichtigsten Dinge, die einem einfallen, sind 64Bits und Multicore. Ich merke auch, dass Cache wichtig ist und GPU ihre eigene Technologie haben, aber im Moment bin ich nicht an irgendeiner Grafikprogrammierung interessiert.Programmierung auf zukünftige Hardware?

Was sollte ich sonst noch wissen?

-edit- ich weiß, viele davon sind in der Gegenwart, aber ziemlich bald alle cpus Multicore und Threading wird wichtiger sein. Ich betrachte Endiane (groß gegen klein), fand aber, dass das nicht wichtig ist und habe bereits eine große Endian-CPU zum Testen.

+0

welche sprache? Assembler Multithread? oder PHP? es macht einen großen Unterschied –

+6

Wie ist das * Zukunft * Hardware? Ich habe es heute. Wenn Sie zukünftige Hardware benötigen, bauen Sie Algorithmen auf, die auf einem DNA-Molekül in massiv parallelen nasschemischen Strukturen ausgeführt werden. Das ist die Zukunft. –

+2

Ich möchte üben, ein zukünftiges Mittagessen zu essen ... – Shog9

Antwort

2

64 Bits und Multicore sind die Gegenwart nicht die Zukunft.

Über die Zukunft: Quantencomputer oder etwas ähnliches?

+0

Wie programmierst du etwas, das noch nicht wirklich existiert? – TheTXI

+0

Sie können zumindest einen Blick auf die Theorie werfen, zum Beispiel http://en.wikipedia.org/wiki/BQP – schnaader

+0

Es gibt Simulatoren von Quantencomputern. Es ist möglich, diese Prinzipien zu erlernen, damit Sie in Zukunft Assembler dafür programmieren können. – Victor

0

Natürlich ist diese Frage schwer zu beantworten, weil niemand weiß, wie die Hardware aussehen wird (zumindest langfristig), aber Multi-Threading/Parallel-Programmierung ist wichtig und wird sicherlich noch einige Jahre wichtiger sein.

Ich würde auch vorschlagen, mit GPU-Computing wie CUDA/Stream zu arbeiten, aber das könnte ein Problem sein, weil es sehr wahrscheinlich ist, dass dies die nächsten Jahre viel ändern wird.

6

Wenn Sie in ein "Mainstream" -OS tauchen möchten, das volle 64-Bit-Unterstützung bietet, empfehle ich Ihnen, mit der Beta von Mac OS X "Snow Leopard" (Codename für 10.6) zu programmieren. Eine der großen Verbesserungen ist Grand Central, eine "Möglichkeit" für Entwickler, Multicore-Systeme zu programmieren. Grand Central sollte die Arbeitslast nicht nur zwischen dem Kern, sondern auch der GPU verteilen.

Auch sehr wichtig ist die Explosion von intelligenten Geräten wie dem iPhone, Android, etc. Ich glaube fest daran, dass einige kommende sogenannte "Netbooks" auf OS wie Android und iPhone OS beruhen und als solche wissen wie Es ist sehr wichtig zu wissen, wie Code für mobile Geräte optimiert werden kann (z. B. Optimierung der Grafikleistung oder anderer Faktoren, Akkuverbrauch).

6

Meine Empfehlung für die zukünftige :)

Oder Sie können auf Raytracing konzentrieren.

+0

+1 für CUDA. Auf jeden Fall einen Besuch wert. 100+ Prozessorkerne schlägt 4. :) –

1

Ich stimme mit Olis Antwort (+1) überein und würde hinzufügen, dass Sie zusätzlich zu 64-Bit-Umgebungen Multicore-Umgebungen betrachten. Die Branche nähert sich dem Ende des Zyklus der Verbesserungen der Rohgeschwindigkeit. Aber wir sehen immer mehr Multi-Core-CPUs. So wird die parallele oder gleichzeitige Programmierung - die sehr rillig ist - schnell sehr gefragt.

Wie können Sie sich darauf vorbereiten und es üben? Ich habe mir dieselbe Frage gestellt. Also, es scheint mir wie funktionale Sprachen wie ML, Haskell, LISP, Arc, Scheme, usw. sind ein guter Ort, um zu beginnen, da wirklich funktionale Sprachen sind im Allgemeinen frei von Nebenwirkungen und daher sehr "parallelisierbar". Erlang ist eine andere interessante Sprache.

Weitere interessante Entwicklungen, die ich gefunden habe, sind

  • Die Singularity Forschung OS
  • Transactional Memory und Software Isolated Processes
  • Die vielen Software Engineering Podcast-Episoden auf Gleichzeitigkeit. (Hier ist the first one.)
  • Dieser Artikel von ACM Queue auf "Real World Concurrency"
2

Wie wäre es OpenCL Lernen? Es ist eine massiv parallele Verarbeitungssprache basierend auf C. Es ist ähnlich wie CUDA von nVidia, ist aber herstellerunabhängig. Es gibt noch keine großen Implementierungen, aber erwarten Sie bald einige.

Wie für 64-Bit, mach dir keine Sorgen. Die Programmierung wird nicht wirklich anders sein, es sei denn du machst wirklich Low-Level-Sachen (Kernel). Übergeordnete Frameworks wie Java und .NET ermöglichen die Ausführung von Code auf 32-Bit- und 64-Bit-Maschinen. Sogar C/C++ erlaubt dies (aber nicht ganz so transparent).

3

Ich kann nicht die Zukunft vorhersagen, aber ein Aspekt zu untersuchen ist etwas wie die CELL processor in der PS3, wo anstelle von vielen identischen Allzweckkernen gibt es nur eine (obwohl in der Lage zu symmetrischen Multithreading) plus viele Kerne, die einen bestimmten Zweck haben.

In einer einfachen Analyse kann der Zellenprozessor in vier Komponenten unterteilt werden: externe Eingabe- und Ausgabestrukturen, die das Hauptenergieverarbeitungselement (PPE) genannte Prozessor (ein Zwei-Wege gleichzeitigen v.2.03 multithreaded Strom ISA kompakter Kern), acht voll funktionsfähige Coprozessoren, die Synergistic Processing Elements (SPEs) genannt werden, und ein spezieller kreisförmiger Datenbus mit hoher Bandbreite, der die PPE, Eingabe-/Ausgabeelemente und die SPEs verbindet und als Element Interconnect Bus oder EIB bezeichnet wird.

CUDA und OpenCL sind ähnlich, dass Sie Ihren Allzweck-Code und Hochleistungsberechnungen in einzelne Teile zu trennen, die auf unterschiedliche Hardware und Sprache/api laufen.