2008-10-10 13 views
5

Gibt es easy Möglichkeit, explizit eine Threaded-Anwendung eine Multicore-Umgebung verwenden? (wenn verfügbar).Explizite Multicore-C# -Anwendungen

Das erste Problem wäre, wie kann ich feststellen, ob meine Laufzeitumgebung Multicore-Anwendungen unterstützt?

Wenn ich dann feststelle, dass ich Multi-Core-Funktionalität verwenden kann, kann ich explizit Threads zuweisen, um auf verschiedenen Kernen zu laufen? Wenn ja, wird die Thread-Kommunikation vom OS/Hardware gehandhabt oder muss ich mir die Hände schmutzig machen?

Antwort

11

Wenn Ihre Anwendung bereits richtig eingefädelt ist, müssen Sie nichts tun. Die Ausführung und Verarbeitung der Threadkontexte erfolgt für Sie.

Wenn es um das Threading geht, ist Ihre App so aufbereitet, dass die Kerne genutzt werden können? Haben Sie prozessorintensive Aufgaben in separate Threads aufgeteilt? Wenn nicht, dann müssen Sie Änderungen vornehmen, um Ihre Verarbeitungsaufgaben in mehr Threads aufzuteilen. Sie können Environment.ProcessorCount verwenden, um die Kernanzahl abzurufen und zur Laufzeit für Ihre Tasks so viele Threads wie möglich zu erstellen.

Ab sofort gibt es nicht wirklich eine Möglichkeit, eine falsch Gewinde app (Single-Thread) in eine Gewinde App zu machen Vorteil aller Prozessoren/Kerne nehmen, es sei denn, Sie auf zukünftige Technologien aussehen, wie plinq und Parallel FX

0

Ohne ins Detail zu gehen (ich bin mir nicht sicher, wie viele Informationen noch öffentlich sind), wird die nächste Version des .NET-Frameworks hilfreicher dabei sein. Sie werden wahrscheinlich nicht daran interessiert sein, Threads manuell zu verwalten. Ich bin mir sicher, dass nach der PDC (Ende Oktober) mehr Informationen dazu veröffentlicht werden.

3

Hallo gibt es 2 extentions, die ich kenne über

Parallel C# Homepage

Check out Somasegars MSDN blog on MS June CTP for parallel 3.5 extenstions

MSDN

Die Bibliothek besteht aus den folgenden Komponenten:

  • Die Task Parallel Library (TPL), die Unterstützung für zwingend notwendig, Daten und Task-Parallelität zur Verfügung stellt.
  • Parallel LINQ (PLINQ), die Unterstützung für deklarativen Datenparallelismus bietet.
  • Koordinationsdatenstrukturen (CDS), die für die Koordinierung der Arbeit unterstützen und gemeinsam genutzten Zustand zu verwalten.
1

Derzeit können Sie die verfügbaren Prozessoren für einen bestimmten Prozess eingestelltProcess.ProcessorAffinity verwenden, aber bestimmten Threads zu bestimmten Prozessoren zuweisen wird implizit unter der Haube behandelt. Dies ist in der Regel eine gute Sache, da eine intelligente Laufzeitumgebung mit Echtzeit-Performance und Load-Balance-Informationen in der Regel einen besseren Job als statisch, zumindest für die wenigen Kern-Context-Mainstream-Multicore-Operationen in.

1

Das ist das Problem. Wie man eine Thread-Anwendung erstellt, wie Sie Ihren vorhandenen Code konvertieren. Ich möchte Multicore in C# ausnutzen. ParallelFX ist jedoch immer noch Beta. Ich werde nicht mit einer Beta entwickeln. Und ich möchte nicht den ganzen Code wieder ändern (ich übersetzte meine Apps von VB 6). Heute erhielt ich einen Newsletter von Packt Publishing, der ein neues Buch über die parallele Programmierung mit C# ankündigte. C# 2008 und 2005 Gewindeprogrammierung. Ich denke, es konzentriert sich auf die Dinge, über die wir überall bloggen. Wie man denkt und eine Anwendung entwickelt, ohne auf eine neue Wundersprache zu warten. Es ist cool, Bücher zu sehen, die sich ausschließlich mit dem Thema beschäftigen, denn dazu gibt es viele Blogs. Der Link ist http://www.packtpub.com/beginners-guide-for-C-sharp-2008-and-2005-threaded-programming/book Ich denke, es verdient eine Gelegenheit. Ich lasse Sie mein Feedback wissen, wenn ich es kaufe.