multicore programmierung
-
Jester schrieb:
Trotzdem sollte man den Aufwand für einen Threadwechsel nicht überschätzen, der besteht nämlich im Wesentlichen aus dem Umhängen des Stackpointers, also einer wirklich schnellen Operation.
Werden bei den meisten Betriebssystemen die Prozesse nicht ohnehin alle n Sekunden (n << 1) unterbrochen und das Scheduling erneut durchgeführt, egal wieviele Threads man hat?
Moderne Betriebssysteme haben doch ohnehin O(1) Scheduler.
-
@Rock Lobster: Ich habe schon damit rumexperimentiert einzelne Threads an bestimmte Kerne zu binden und ich war nie erfolgreich. Das automatische Scheduling des OS war immer besser, als ich.
-
Ok, wie finde ich in C++ die Anzahl der Cores heraus?
Baue gerade einen Raytracer, da dürfte es ja dann sinvoll sein genau so viele threads wie cores zu haben. Macht jeder core einen bildabschnitt... Oder is das zu vereinfacht gedacht?
-
Helium schrieb:
@Rock Lobster: Ich habe schon damit rumexperimentiert einzelne Threads an bestimmte Kerne zu binden und ich war nie erfolgreich. Das automatische Scheduling des OS war immer besser, als ich.
--> http://en.wikipedia.org/wiki/Processor_affinity
(unten die links zu MSDN, falls du das für windows brauchst)
-
Georg1983 schrieb:
Ok, wie finde ich in C++ die Anzahl der Cores heraus?
Baue gerade einen Raytracer, da dürfte es ja dann sinvoll sein genau so viele threads wie cores zu haben. Macht jeder core einen bildabschnitt... Oder is das zu vereinfacht gedacht?
OpenMP ist ein Stickwort.
-
ich wuerde auch openMP empfehlen. simple und dafuer recht gute art multicore auszunutzen. man muss keine threadpools usw selber verwalten, es ist sehr stabil und hat recht komplexe program-flows (z.b. threads die wieder jobs in subthreads aufteilen).
und die integration mit ein paar pragmas ist echt simpel.
-
fricky schrieb:
Helium schrieb:
@Rock Lobster: Ich habe schon damit rumexperimentiert einzelne Threads an bestimmte Kerne zu binden und ich war nie erfolgreich. Das automatische Scheduling des OS war immer besser, als ich.
--> http://en.wikipedia.org/wiki/Processor_affinity
(unten die links zu MSDN, falls du das für windows brauchst)Ich verstehe deine Antwort nicht. Ich habe Threads an bestimmte Kerne gebunden. Allerdings waren die Ergebnisse immer schlechter, als wenn ich das dem Betriebssystem überlassen habe.
-
Helium schrieb:
Allerdings waren die Ergebnisse immer schlechter, als wenn ich das dem Betriebssystem überlassen habe.
^^ so hättest du es vielleicht schreiben sollen.