@Crest: Deine Hilfen an vielen Stellen in allen Ehren, aber ich nutze das Forum nicht als Ersatz für Bücher oder eigenes Debugging. Ich stelle Fragen, die sich auf Themen im Bereich "programmieren" beziehen, die ich gewiss auch selbst durch intensive Recherche herausfinden könnte. Mein Nachteil bei dieser Art und Weise des Studiums ist, dass es letztendlich ein SELBSTstudium bleibt und ich damit evtl. auf einem kleinen Stückchen Wissen hängen bleibe("lokales Optimum"

) und mich darauf versteife, obwohl es dann insgesamt doch eine veraltete Idee ist oder es gar viele unterschiedliche Lösungsmöglichkeiten gibt, die ich aber bei meiner Suche übersehe.
Mein Problem ist einfach oftmals, dass ich Themen ankratze, mit denen ich zuvor nicht zu tun hatte und leider niemanden haben, mit dem ich mich persönlich austauschen kann. Hier habe ich ein Forum von - meiner bescheidenen persönlichen Meinung - exzellenten Experten(und ja, dazu zähle ich auch Dich, Crest), von denen ich "Wissenspointer" abgreifen kann - sprich mich zu Themen hinleiten lassen kann. wie in diesem Fall das Thema "Openmp".
Im aktuellen Fall habe ich beispielsweise beim "googlen" Artikel im Internet von Anfang des Jahrtausends gefunden, wo ich direkt dachte "das geht heute besimmt noch eleganter oder effizienter oder auf jeden Fall wird's sicher heute anders gemacht". Ein Beispiel eines Ergebnisses meiner Suche:
Ein Linux SMP Howto
Über das Thema "Forumsbenutzung" hatten gerade wir zwei uns doch schon in
diesem Thread unterhalten. Ich halte mich nicht für faul, sondern für außerordentlich interessiert, leider mit wenig Zeit ausgestattet, aber auf jeden Fall Willens, über den Tellerrand hinauszuschauen. Und genau dieses Weiterblicken versuche ich mit Hilfe der Forenuser zu erreichen - ich möchte mir zeigen lassen, welche anderen Optionen es noch gibt und welche Option der echte Experte im jeweiligen "Programmierunterkontext" wählen würde. Resultat dieses Threads wird für mich sein, dass ich mir Openmp sehr viel genauer anschauen werde, denn ich finde die Thematik sehr spannend. Für mich ist das Forum ein großer Fundus, den ich im persönlichen Umfang auf dieser Ebene(professionelle Programmierung) nicht finde. Ich hoffe, ich finde dafür aber Dein Verständnis, Crest.

Und jetzt bitte kein Flamewar...
...sondern back to topic! Wenn ich also einmal Kamikaze zitieren darf:
Ich glaube Du solltest lieber Deinen Algorithmus beschreiben/optimieren.
Dann versuchen wir das doch mal - zumindest diejenigen, die es interessiert und die Lust drauf haben. Ich habe einfach einmal ein sehr primitives Programm zusammengeschrieben, das zumindest vom Prinzip her macht, was hier hinterfragt wurde. Ich würde gern sehen, wie man so etwas "eleganter" oder "effektiver" macht. Natürlich ist es vollkommen sinnfrei, es erzielt einfach nichts und davon abgesehen macht es auch in jedem Schleifenlauf immer wieder dasselbe. Ich denke aber, dass das in diesem Fall egal ist, da es nur um's Schleifenprinzip geht.
Also: Nehmen wir an, so eine "analyze_databse"-Funktion würde etwas Sinnvolles tun, wie würdet Ihr es anders programmieren, was würdet Ihr optimieren? Der Code ist als Textdatei angehängt.
Nur kurz nebenbei meine Ergebnisse(habe das auf meinem Thinkpad T530 gerechnet, ist mein Arbeitsrechner und dort rennt ein Ubuntu-Linux):
Code:
herakles@countach ~ $ gcc smp_test.c -Wall -fopenmp
herakles@countach ~ $ time ./a.out
best: 58719, wert: 2147477479
real 0m7.622s
user 0m44.843s
sys 0m0.076s
herakles@countach ~ $ uname -a
Linux countach 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Das parallelisieren bringt mir also in der Tat einen beachtlichen zeitlichen Vorteil, dafür sind auch entsprechend viele Kerne auf dieser Kiste vorhanden.
Any comments?
Herakles