Multicore-Anwendung

23/03/2011 - 00:25 von Hans Jaeger | Report spam
Hallo,

muss man bei Rechnern mit Multicore-CPUs etwas spezielles beachten?

Kann es zu Problemen bei Thread kommen und sich das Programm
verlangsamen?

Danke
 

Lesen sie die antworten

#1 Thomas Scheidegger
23/03/2011 - 01:03 | Warnen spam
Hallo Hans

muss man bei Rechnern mit Multicore-CPUs etwas spezielles beachten?
Kann es zu Problemen bei Thread kommen und sich das Programm verlangsamen?



vorab, es gab schon lange Mehrprozessor-Systeme vor den heutigen
Multicore-Varianten.
Das Threading-Konzept ist darin also schon lànger bekannt und dokumentiert
(unverzichtbare Win32/C++-Grundlagen gelten weiterhin, vieles auch in C#!).

Somit gilt:
wàhrend 'unsauberer' Multi-Threaded Code oft auf Single-CPU/Core Systemen
oft noch gerade so làuft, werden auf einem Mehrprozessor/Multicore-System
die Fehler eher hàufiger auftreten, aber auch deutlich schwieriger zu finden
sein.
Dies weil die Threads hier effektiv parallel (gleichzeitig) von der HW
ausgeführt werden,
und nicht nur 'quasi-parallel' (etwa SW-gesteuert).

Daher gilt: absolute Nulltoleranz für Design/Code-Fehler!
Und die Annahme, dass Compiler oder Debugger hier Fehler schon finden
ist unzulàssig, da muss man _selber_ dafür Sorge tragen!
(dies gilt zu gutem Teil auch immer noch für all die neuen
Thread-Parallel ua Features in .NET 4+!)

Das starten von vielen Threads ist (gerade in .NET) absolut keine Kunst,
sondern das korrekte _koordinieren_ (etwa Zugriff auf gemeinsame Resourcen)
und synchronisieren!
Ohne gutes Know-How sind komplexe Fehler fast vorprogrammiert,
mit unvorhersehbaren Konsequenzen/Verhalten, manchmal erst beim Kunden
(System/Timing-abhàngig!)

Threads kann man natürlich auch so unglücklich/sinnfrei einsetzen,
dass kein Performance-Gewinn entsteht, bzw gar markant schlechter wird.

Fazit: hier haben wir klar ein Fall wo 'probieren' ein sehr schlechter
Ansatz ist,
sondern da gilt nur pures Wissen.


Thomas Scheidegger - 'NETMaster'
http://dnetmaster.net/

Ähnliche fragen