B
Ich fürchte ohne eine Code-Änderung kommst du hier nicht viel weiter. Ein sequentieller Code kann man auf einem Superrechner ausführen und er wird deswegen nicht viel schneller als auf einem normalen PC.
Deswegen meine Frage: Wie sequentiell ist denn überhaupt dein Code ? Oder andersrum gefragt: Wieviele Zeilen kannst du miteinander vertauschen, ohne dass die Ergebnisse sich ändern ?
Kannst du anstatt:
ni = qnInterpolation(&qIon,ergebnis);
E = qEinterpolation(&qIon,&T,ergebnis);
auch
E = qEinterpolation(&qIon,&T,ergebnis);
ni = qnInterpolation(&qIon,ergebnis);
schreiben, ohne dass sich das Ergebnis ändert ?
Auf dem ersten Blick hat es den Anschein als ob viele Funktionsaufrufe von der Variablen ergebnis anhängen. Dadurch wird der Code sequentialisiert, da die vorherige Codezeile mit der Variablen arbeitet und diese erst fertig rechnen muss damit die nächste Codezeile beginnen, welche auch auf ergebnis zugreift.
Deswegen mein Vorschlag: Versuche die Variable ergebnis und qIon so aufzusplitten dass aufeinanderfolgende Codezeilen soweit wie möglich woneinander unabhängig werden.
tIon* qIon1;
tIon* qIon2;
qIon1 = *qIon;
qIon2 = *qIon;
ni = qnInterpolation(qIon1,ergebnis1); // Die folgenden zwei Zeilen könnten so parallel ausgrführt werden
E = qEinterpolation(qIon2,&T,ergebnis2);
ergebnis = MERGE (ergebnis1, ergebnis2);