Mehr CPU Auslastung < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | Hallo ich benütze seit einiger Zeit Maple 15. Und auf der Homepage werben sie ja damit, dass Maple 15 selbst weiß wie viel Kerne der PC hat und auch diese dementsprechen aussnützt. Ich muss für meine Abschlussarbeit in Maple programmieren. Maple lastet meinen PC aber immer nur mit ca. 12% aus. |
Was kann ich machen damit z.B. alle 8 Kerne voll ausgelastet werden?
Ich hab im Internet nicht wirklich was dazu gefunden
Gruß
Matheboy18
|
|
|
|
Hallo!
ich kenne Maple nicht, aber es gibt gewisse Dinge, die man generell beachten muß.
Mehrere CPUs gleichzeitig benutzen kann man nur, wenn sich der Code auch in mehrere teile splitten läßt, die (zumindest zeitweise) unabhängig voneinander laufen können.
Angenommen, du hast eine Liste von Zahlen, und du willst jede einzelne Zahl mit 5 multiplizieren so läßt sich das wunderbar aufteilen: Jede CPU arbeitet an einem Teil der Liste.
Wenn aber jede Zahl durch die Summe von sich selbst und der vorherigen Zahl ersetzt werden soll, läßt sich das Problem nicht parallelisieren, weil für jeden Schritt das Ergebnis aus dem vorherigen bekannt sein muß.
In normalem C ist man meist selbst dafür verantwortlich, seinen Code multiprozessorfähig zu gestalten. Bei Maple könnte ich mir schon vorstellen, daß es z.B. eine Summe von zwei komplizierten Integralen erkennt, und jedes von einer CPU berechnen läßt. Das lohnt sich aber auch nur, wenn die Integrale kompiziert genug sind, dass die Berechnung lange dauert. Denn für das Verteilen an mehrer CPUs und zusammensetzen der Resultate geht natürlich auch Zeit drauf.
Multiprozessormaschinen sind schön und gut, aber wenn die einzelnen Programme das nutzen wollen, müssen sie auch entsprechend programmiert sein.
Daher würde ich noch nicht unbedingt davon sprichen, daß Maple hier ein Problem hat, evtl liegts eher an deinem Code.
Gibt es vielleicht irgendwo Benchmark-Code, der die leistungsfähigkeit von Maple demonstriert?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:14 Sa 09.07.2011 | Autor: | Matheboy18 |
Von der Seite hab ich das noch nie betrachtet, aber jetzt im Nachhinein ist es mir auch klar. Danke für die Antwort
|
|
|
|
|
Hossa :)
Die Kerne können nur dann voll ausgelastet werden, wenn du die Berechnungen entsprechend parallelisierst. Dazu eine Beispielrechnung. Sei p der Anteil eines Programms, der sich parallel abarbeiten lässt. Dann ist (1-p) der Anteil, der seriell abgearbeitet werden muss. Wenn du n Prozessorkerne hast, kannst du den Anteil p auf diese n Prozessorkerne verteilen. Der Anteil (1-p) jedoch läuft stets linear auf nur einem Prozessor. Der Faktor, um den dein Programm gegenüber einer 1-Kern-Maschine schneller arbeitet ist daher:
[mm] $F_n=\frac{1}{(1-p)+\frac{p}{n}}$
[/mm]
Das Gemeine daran ist, dass selbst bei unendlich vielen Kernen der lineare Anteil nicht parallelisiert werden kann:
[mm] $\lim_{n\to\infty}F_n=\lim_{n\to\infty}\left(\frac{1}{(1-p)+\frac{p}{n}}\right)=\frac{1}{1-p}$
[/mm]
Selbst mit 8 (also fast "unendlich") vielen Kernen laufen deine Programme bei einer Parallelisierung von 50% nur um den Faktor 2 schneller. Bei 80% Parallelisierung um den Faktor 5, aber krieg die 80% mal hin...
Mit anderen Worten, du musst deine Programme auch so schreiben, dass sie parallel abgearbeitet werden können, um den Anteil p möglichst zu maximieren. 12% Auslastung bei 8 Kernen bedeutet ja eigentlich, dass nur 1 Kern richtig arbeitet und die anderen 7 zusehen. Das spricht für einen minimalen Anteil p in deinen Programmen. Vielleicht kannst du da ja was rausholen?
Viele Grüße
Hasenfuss
|
|
|
|