Ist die Einführung von Multicore-Architekturen betrifft mich als Software-Entwickler?

StackOverflow https://stackoverflow.com/questions/567528

  •  05-09-2019
  •  | 
  •  

Frage

Als Software-Entwickler hauptsächlich den Umgang mit High-Level-Programmiersprachen bin ich nicht sicher, was ich tun kann, in geeigneter Weise der Aufmerksamkeit auf die kommende Allgegenwart von Multi-Core-Computer zu zahlen. Ich schreibe meistens ordentliche und nicht-anspruchsvolle Anwendungen, doch ich denke, es ist wichtig zu wissen, ob ich irgendwelche Programmierparadigmen ändern müssen oder sogar die Sprache der Zukunft zu meistern.

Meine Frage daher:
How to deal with increasing multicore presence in day-by-day hacking?

War es hilfreich?

Andere Tipps

Die meisten Probleme erfordern nicht viel CPU-Zeit. Wirklich, sind einzelne Kerne recht schnell genug für viele Zwecke. Wenn Sie Ihr Programm tun finden zu langsam ist, das Profil zu ersten und schauen Sie sich Ihre Wahl von Algorithmen, Architektur und Caching. Wenn, dass Sie nicht genug bekommen, versuchen, das Problem zu unterteilen in getrennte Prozesse. Oft ist dies lohnt einfach zur Fehlerisolierung zu tun und so, dass Sie die CPU- und Speichernutzung jeden Prozesses verstehen. Auch normalerweise jeder Prozess auf einem bestimmten Kern läuft und gute Nutzung des Prozessor-Caches machen, so dass Sie das wesentliche Leistung zu leiden haben Overhead zu halten Cachezeilen nicht konsistent. Wenn Sie ein Multi-Prozess-Design gehen und finden immer noch Problem mehr CPU-Zeit benötigt, als Sie mit dem Gerät erhalten Sie haben, sind Sie gut zu verlängern platziert es einen Cluster laufen.

Es gibt Situationen, in denen Sie mehrere Threads innerhalb des gleichen Adressraum benötigen, aber Vorsicht, dass Threads wirklich schwer richtig zu machen. Rennbedingungen, vor allem in nicht-sicheren Sprachen, manchmal Wochen zu debuggen nehmen; oft, einfaches Hinzufügen von Tracing oder unter einem Debugger ausgeführt wird die Timings genug ändern, das Problem zu verstecken. Einfach Schlösser überall bedeutet oft setzen Sie viele Sperren-Overhead und manchmal so viel Sperrenkonflikte bekommen, dass Sie nicht wirklich die Gleichzeitigkeit Vorteil erhalten Sie für Sie erhofften. Auch wenn Sie die Verriegelung richtig gemacht haben, müssen Sie dann stimmen für die Cache-Kohärenz profilieren. Letztlich wollen, wenn Sie einig sehr gleichzeitiger Code wirklich stimmen zu, werden Sie wahrscheinlich bei Lock-Free-Konstrukten am Ende der Suche und komplexere Sperrschemata als die in aktuellen Multi-Threading-Bibliotheken.

Lernen

die Vorteile der Parallelität und die Grenzen (z Amdahl Gesetz).

So können Sie, wenn möglich, nutzen den einzigen Weg für eine höhere Leistung, die offen sein wird. Es gibt viele innovative Arbeit auf einfache Ansätzen geschieht (Futures und Task-Bibliotheken) und alte Arbeit wieder entdeckt (funktionale Sprachen und unveränderliche Daten).

Das kostenlose Mittagessen ist vorbei, aber das bedeutet nicht, dass es nichts zu nutzen.

In der Regel wurde sehr freundlich mit Gewinden. Es ist ein schrecklicher Mechanismus für Parallelisierung, aber es ist das, was wir haben.

Wenn Sie mit .NET arbeiten, Blick auf den Parallel Extensions. Sie ermöglichen es, einfach zu viele parallele Programmieraufgaben zu erreichen.

von mehr profitieren, die nur einen Kern sollten Sie Parallelisierung Code betrachten. Mehrere Threads, unveränderliche Typen und ein Minimum an Synchronisation sind Ihre neuen Freunde.

Ich denke, es hängt davon ab, welche Art von Anwendungen, die Sie gerade schreiben.

Eine Art von Anwendungen profitiert mehr von der Tatsache, dass sie auf einem Mutli-Core-CPU laufen sind als andere. Wenn Ihre Anwendung aus dem Multi-Core davon profitieren kann, dann sollten Sie bereit sein, parallel zu gehen. Das kostenlose Mittagessen ist vorbei; das heißt: in der Vergangenheit Ihre Anwendung schneller wurde, als eine neue CPU freigegeben wurde und Sie haben nicht jede Anstrengung in Ihrer Anwendung zu setzen, um diese zusätzliche Geschwindigkeit zu bekommen. Nun, um die Vorteile der Fähigkeiten ein Multi-Core-CPU bietet, haben Sie sicherstellen, dass Ihre Anwendung nutzt es kann. Das heißt: Sie haben, um zu sehen, welche Aufgaben multithreaded / gleichzeitig ausgeführt werden können, und das bringt einige Probleme auf den Tisch ...

Erfahren Sie Erlang / F # (je nach Plattform)

  • unveränderliche Datenstrukturen bevorzugen, ihre Verwendung macht Software einfacher zu verstehen, nicht nur in Programmen gleichzeitig.

  • Lernen Sie die Werkzeuge für die Parallelität in Ihrer Sprache (zB java.util.concurrent, JCIP ).

  • Lernen Sie eine funktionale Sprache (zum Beispiel Haskell ).

Ich habe die gleiche Frage gestellt, und die Antwort ist, „es kommt“. Wenn Ihr Joe WinForms, vielleicht nicht so sehr. Wenn Ihr Schreiben von Code, die performant sein muss, ja. Eines der größten Problem, das ich mit der parallelen Programmierung zu sehen ist dies: wenn etwas nicht parallized werden kann, und Sie liegen und die Laufzeit sagen sowieso parallel zu tun, ist es nicht gehen zum Absturz zu bringen ist, es wird nur die Dinge zu tun, falsch und Sie werden Mist Ergebnisse und den Rahmen schuld.

Erfahren Sie OpenMP und MPI für C und C ++ Code.

OpenMP gilt auch für andere Sprachen als auch wie Fortran nehme ich an.

Schreiben Sie kleinere Programme.

Weitere Codesprachen / styles lassen Sie besser Multithreading (obwohl Multithreading noch richtig hart in jeder Sprache ist), aber der große Vorteil für die regelmäßige Entwickler, IMHO, ist die Fähigkeit, gleichzeitig viele kleinere Programme auszuführen einige viel größer zu erreichen Aufgabe.

So erhält die Gewohnheit Ihre Probleme des Abbaus in unabhängige Komponenten, die ausgeführt werden können, wann immer Sie wollen.

Sie werden mehr wartbare Software bauen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top