Frage

Ich arbeite an einem Projekt wurden wir benötigen Sie mehr Leistung.Im Laufe der Zeit haben wir weiterhin zu entwickeln die design arbeiten mehr parallel(beide Gewinde und verteilt).Dann Letzte Schritt war die Bewegung ein Teil davon auf eine neue Maschine mit 16 Kernen.Ich finde, wir müssen überdenken, wie wir Dinge tun, zu skalieren, zu viele Kerne, die in einem shared-memory-Modell.Zum Beispiel die standard-Speicher-Zuweisung ist nicht gut genug.

Welche Ressourcen würden die Leute empfehlen?

So weit ich gefunden habe, Sutter Dr. SpalteDobbs, ein guter start.Ich habe gerade Die Kunst des Multiprozessor-Programmierung und Des O ' Reilly-Buch über die Intel Threading Building Blocks

War es hilfreich?

Lösung

Ein paar andere Bücher, die hilfreich sind:

Bedenken Sie auch, verlassen sich weniger auf die Freigabe des Zustands zwischen gleichzeitigen Prozessen.Du wirst scale viel, viel besser, wenn Sie es vermeiden können, weil Sie in der Lage sein Paket aus unabhängigen Einheiten arbeiten, ohne so viel zu tun, die Synchronisierung zwischen Ihnen.

Auch wenn Sie brauchen, um zu teilen einige Zustand, sehen Sie, wenn Sie können-partition des gemeinsamen Staates von der tatsächlichen Bearbeitung., Dass wird lassen Sie Sie tun, so viel von der Verarbeitung parallel, unabhängig von der integration der abgeschlossene Teile des Werkes wieder in den Freigabezustand.Offensichtlich ist dies nicht funktionieren, wenn Sie Abhängigkeiten zwischen den Einheiten der Arbeit, aber es lohnt sich zu untersuchen, statt nur unter der Annahme, dass der Staat immer geteilt werden.

Andere Tipps

Sie möchten möglicherweise überprüfen Sie heraus Google Performance-Tools.Sie veröffentlicht haben, Ihre version von malloc verwenden Sie für multi-threaded-Anwendungen.Es enthält auch ein schöner Satz von profiling tools.

Jeffrey Richter ist in threading viel.Er hat ein paar Kapitel auf dem Durchzug in seinen Büchern und schauen Sie sich sein blog:

http://www.wintellect.com/cs/blogs/jeffreyr/default.aspx.

Wie monty python sagen würde, "und nun zu etwas völlig anderem" - Sie könnten versuchen, eine Sprache/Umwelt, der keine threads, sondern Prozesse und messaging (kein shared state).Eine der am weitesten ausgereiften Programme ist erlang (und das ausgezeichnete und Spaß Buch: http://www.pragprog.com/titles/jaerlang/programming-erlang).Möglicherweise nicht genau relevant ist, um Ihre Umstände, aber Sie können immer noch eine Menge lernen von Ideen, die Sie anwenden können in anderen tools.

Für andere Umgebungen:

.Net hat F# (lernen, funktionale Programmierung).JVM hat Scala (die Schauspieler, die sehr viel wie Erlang und funktionale hybrid-Sprache).Auch dort ist die "fork-join-framework von Doug Lea für Java, die eine Menge macht die harte Arbeit für Sie.

Die Zuweisung in FreeBSD erhielt kürzlich ein update für FreeBSD-7.Die neue genannt wird jemaloc und ist offenbar viel mehr skalierbar in Bezug auf mehrere threads.

Sie hat nicht erwähnt, welche Plattform Sie nutzen, so dass vielleicht diese Zuweisung ist verfügbar für Sie.(Ich glaube, Firefox 3 nutzt jemalloc, auch auf windows.Also ports müssen irgendwo existieren.)

Werfen Sie einen Blick auf Hort wenn Sie tun eine Menge der Speicherzuordnung.

Rollen Sie Ihre eigenen Lock-Freie Liste.Eine gute Quelle ist hier - es ist in C#, aber die Ideen sind tragbar.Sobald Sie erhalten verwendet zu, wie Sie Arbeit, die Sie sehen, beginnen andere Orte, an denen Sie verwendet werden können und nicht nur in den Listen.

Ich check-out-Horten, Google-Perftools und jemalloc irgendwann.Für jetzt sind wir mit scalable_malloc von Intel Threading Building Blocks und führt es auch genug.

Für besser oder schlechter, wir sind mit C++ auf Windows, aber viel von unserem code, kompiliert mit gcc just fine.Es sei denn, es gibt einen zwingenden Grund, sich zu bewegen redhat (die wichtigsten linux-Distribution, die wir verwenden), bezweifle ich, lohnt es sich, die Kopfschmerzen/politische Schwierigkeiten, sich zu bewegen.

Ich würde lieben, Sie zu verwenden, Erlang, aber es gibt viel zu viel hier zu wiederholen es jetzt.Wenn wir uns Gedanken über die Anforderungen rund um die Entwicklung von Erlang in ein telco-Einstellung, die sehr ähnlich sind, um unsere Welt (elektronischer Handel).Armstrong Buch ist auf meiner to read-Stapel :)

In meinen Tests skalieren von 4 Kernen 16 Kerne habe ich gelernt zu schätzen, die Kosten für sperren/Streit in der parallele Teil des Codes.Zum Glück haben wir einen großen Teil der Schuppen mit den Daten, aber auch das hat nicht funktioniert, denn ein extra-lock und der Speicher-Zuweisung.

Ich behaupte, eine Parallelität link blog sein kann, das anhaltende Interesse:

http://concurrency.tumblr.com

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