Schnelle Erzeugung + Schreiben + Ausgeben von Strings mittels omp bzw. openmp unter C ???



  • Guten Morgen ;-),

    was ich erreichen möchte, habe ich ja oben bereits geschrieben. Du hast
    mir nun aber klar gemacht, dass mein Vorhaben so nicht wirklich sinnvoll ist.
    Das nehme ich auch gerne so an. Nun wollte ich dich fragen, wie ich das besser machen könnte? Mal angefangen mit der verschachtelten for-Schleife und dem zweidimensionalen Array. Du hast gestern geschrieben, dass es so wenig Sinn macht.



  • Wenn du aus dem Stand den 171345-ten String ausgeben wuerdes, wie sieht der aus?



  • Der String würde folgendermaßen aussehen: 00171344.


  • Mod

    Stephan87 schrieb:

    Der String würde folgendermaßen aussehen: 00171344.

    Und wie konntest du darauf kommen, ohne systematisch die vorherigen 171343 zu berechnen?

    Wie dem auch sei: Wenn das Endresultat wie oben beschrieben sein soll, alle diese Zeichenketten in eine Datei zu schreiben, dann hilft dir kein MPI, da du sicherlich kein paralleles Dateisystem hast. Die Gesamtgröße der Datei wird ungefähr 10 GB sein, das wäre schon längst fertig, wenn du einfach ein serielles Programm die Nacht lang hättest laufen lassen.

    Aber jetzt kommt bestimmt, dass es doch nicht das Ziel war, diese Zeichenketten alle in eine Datei zu schreiben und das alles nur ein Beispiel war. Wetten das?



  • Ja - ich schon. Ich kann ja rechnen. Aber damit das Programm es weiß, habe ich es eben in dieser Form anhand des arrays und der for-Schleife geschrieben. So fängt das Programm praktisch bei 0 (00000000) an und endet bei (99999999).
    Soweit ich das verstehe, geht es wohl einfach nicht. D.h. die Berechnung mittels array und versch. for-Schleife könnte man parallelisieren und dadurch auch deutlich beschleunigen, aber spätestens beim Schreiben der Datei wäre es sozusagen für die Katze, weil dass ganze dadurch wieder ausgebremst wird.
    Alles klar. Dann habe ich wohl wieder was dazu gelernt. Jedenfalls Dankeschön.

    Grüße
    Stephan



  • Oh, hatte ich fast vergessen.
    Doch das Ziel war es schon. Allerdings nicht alles in eine Datei zu schreiben, sondern gesplittet. Denn will man eine 10GB große Datei mit gedit öffnen, muss man im schlimmsten Fall mit einem Absturz des Computers rechnen.
    Sorry für den doppel-post, werde mich mal lieber bei euch registrieren.
    Grüße 🙂


  • Mod

    Wie du es splittest ist doch egal. Fakt ist: Das Programm soll 10 GB (nutzlose) Daten auf die Festplatte schreiben, die trivial zu berechnen sind (der Computer kann übrigens auch rechnen!). Dein Programm wird so lange dauern, wie dein Computer zum Schreiben von 10 GB Daten braucht, egal wie schnell du deine Strings berechnest.

    Noch mal: Was willst du überhaupt erreichen? Wozu sollen 10 GB Trivialdaten, die du jederzeit in wenigen Taktzyklen berechnen könntest, auf der Festplatte gut sein? Das riecht irgendwie nach völlig sinnverfehltem Lookuptable.



  • SeppJ schrieb:

    Wie du es splittest ist doch egal. Fakt ist: Das Programm soll 10 GB (nutzlose) Daten auf die Festplatte schreiben, die trivial zu berechnen sind (der Computer kann übrigens auch rechnen!). Dein Programm wird so lange dauern, wie dein Computer zum Schreiben von 10 GB Daten braucht, egal wie schnell du deine Strings berechnest.

    Noch mal: Was willst du überhaupt erreichen? Wozu sollen 10 GB Trivialdaten, die du jederzeit in wenigen Taktzyklen berechnen könntest, auf der Festplatte gut sein? Das riecht irgendwie nach völlig sinnverfehltem Lookuptable.

    Hallo zusammen,ich weiß das der Computer rechnen kann. Hatte mich nicht ganz richtig ausgedrückt. Ja, du hast Recht. Genau das wollte ich ausprobieren. Eine Art Lookuptable. Das es völlig sinnverfehlt ist, will ich auch gar nicht bestreiten. Deswegen bitte ich ja um Ratschläge. Das meine Theorie, die Erzeugung von Strings in Kombination mit Ausgeben und Schreiben mittels Parallelisierung beschleunigt werden könnte, völlig falsch und unrealistisch ist, habe ich mittlerweile auch begriffen. Deswegen frage ich, ob ihr mir ein paar Ratschläge geben könntet, wie man es anders oder besser machen könnte? Deswegen habe ich doch auch diesen Thread erstellt. 🙂


  • Mod

    Das beste wäre, gar nichts zu tun. Das heißt, nicht einmal den Lookuptable erstellen. Dieser wäre für die Aufgabe mit nahezu Sicherheit langsamer als eine direkte Berechnung und würde bei Start auch noch ewig zum Laden brauchen und Gigabytes von Speicher sinnlos verschwenden.



  • Okay. Alles klar. Vielen Dank.


Anmelden zum Antworten