Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de ::  C++ (auch C++0x und C++11) ::  [gelöst Danke]Parallelisierung einer For-Schleife
Antwort schreiben
Benutzername:
Titel:
Nachrichtentext:
  :)  :D  ;)  :(  :p  :mad:  :rolleyes:  :eek:  :confused:  :cool:  :o)  :leak:  :live:  :die:  :idea:  :arrow:  :warning: 
                             
                         
         
           
                             
                             
                             
             


BBCode in diesem Beitrag deaktivieren [BBCode]
Smilies in diesem Beitrag deaktivieren
[gelöst Danke]Parallelisierung einer For-Schleife and 303941
     


Themen-Überblick 
(Aktualisieren)
Autor Nachricht
cooky451
16:46:20 29.05.2012   Titel:   Zitieren

SeppJ schrieb:
und nur noch cooky schont interessiert. Und der scheint das Ergebnis nicht zu brauchen, sonst hätte er gefragt.
Ich hab' halt den Code kopiert und das weggemacht, was der Profiler mir gesagt hat. Viel mehr kann man in dem Code eh nicht kopfschmerzfrei machen. ;)
ComputerCarl
16:40:45 29.05.2012   Titel:   Zitieren

i verwende ich nacheinander in 2 verschiedenen Schleifen. Die kommen direkt nacheinander und sehen wohl nur wegen der Formatierung so aus als ob diese ineinander greifen. Oder hab ich mich jetzt geirrt?
Alphabet braucht ich in der Übergabe wirklich nicht. Das ist noch ein Relikt aus einer früheren Version. Sorry dafür. Aber ein einfacher String würde es wohl nicht tun, da ich eigentlich noch das Alphabet variabel setzen wollte. Also unter Umständen vielleicht ein Protein-Alphabet bei denen eine 3-Buchstaben-Codierung vorkommt. Nötig ist das nicht, könnte aber vielleicht von Vorteil werden. Dafür müsste natürlich noch mehr geändert werden, aber alles muss ja erstmal im Groben laufen...
SeppJ
16:40:07 29.05.2012   Titel:   Zitieren

ComputerCarl schrieb:

Meine Ergebnisse aus diesem Programm habe ich mit einer vorimplementierten R-Klasse überprüft. Diese kann aber nur für eine Sequenz Messungen durchführen. Da ich aber identische Likelihoods wie mein Übungsleiter habe, denke ich dass das Programm korrekt arbeiten. Wie man es anders überprüfen kann, weiß aus dem stehgreif nicht.
Du gibst mit deinem Beispielprogramm etwas aus, was vom Ergebnis abhangt oder das Ergebnis ist. Dann können wir nämlich am Programm herumfummeln und sehen, ob immer noch das gleiche herauskommt. dann hat man viel mehr Freiheit im aufräumen deines Codes.

Aber vergiss es einfach. Ich habe schon lange keinen Bock mehr und nur noch cooky schont interessiert. Und der scheint das Ergebnis nicht zu brauchen, sonst hätte er gefragt.
Michael E.
16:27:44 29.05.2012   Titel:   Zitieren

cooky451 schrieb:
Ich habe gerade die Laufzeit etwas mehr als halbiert, dadurch dass ich "int my_hash(char a, vector<string> alphabet)" zu "int my_hash(char a, const vector<string>& alphabet)" geändert habe.. :rolleyes:

Der Parameter wird sogar gar nicht gebraucht, weil my_hash eh Zugriff aufs Alphabet hat. Warum alphabet ein vector von std::string ist, ist mir auch noch nicht klar. Ein einfacher std::string tuts auch.
cooky451
15:57:18 29.05.2012   Titel:   Zitieren

Ich habe gerade die Laufzeit etwas mehr als halbiert, dadurch dass ich "int my_hash(char a, vector<string> alphabet)" zu "int my_hash(char a, const vector<string>& alphabet)" geändert habe.. :rolleyes:
Mal gucken was da noch so kommt.
Edit:
Ist dir eigentlich bewusst, dass du i zwei mal verwendest und das eine damit verdeckst? Zudem berechnest du einige Sachen gleich zwei mal direkt hintereinander, da hattest du gleich doppelt Glück, dass der Compiler das gerafft hat. :eek:

Edit2:
Na ja, der Profiler mag gerade vor allem log und exp nicht mehr, so wie es sein soll. Wahrscheinlich kann man noch einiges rausholen, aber bei dem Durcheinander habe ich da nicht wirklich mehr Lust drauf. (Bitte rücke Code vernünftig ein! Und lass Zeilen nicht länger als ~120 Zeichen lang werden! Nutze mal ein paar Leerzeilen!)

(Nicht gerade optimal, aber bei 100 Threads geht das noch) parallelisieren kannste so:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <thread>
void Baum_Welsh (int iteration) {
// ...
vector<thread> threads;
for (int i = 0; i != iteration; ++i)
{
  threads.push_back(std::thread([&] (int it) -> void
  {
    // ...
  }, i));
}
 
for (auto i = threads.begin(); i != threads.end(); ++i)
  i->join();
ComputerCarl
15:47:22 29.05.2012   Titel:   Zitieren

Sorry für Forum kaputt machen. Sind schon wieder weg.

"Deine gesamte Einstellung deutet darauf hin, dass du keine Hilfe möchtest" ? Ähm. Das sehe ich anders. Ich weiss auch nicht wie du darauf kommst. Aber wenn es dich so stört, dann überlies dieses Thema einfach. Ich hatte nicht vor jemand zur Last zu fallen. Trotzdem Danke für dein Bemühen.
Meine Ergebnisse aus diesem Programm habe ich mit einer vorimplementierten R-Klasse überprüft. Diese kann aber nur für eine Sequenz Messungen durchführen. Da ich aber identische Likelihoods wie mein Übungsleiter habe, denke ich dass das Programm korrekt arbeiten. Wie man es anders überprüfen kann, weiß aus dem stehgreif nicht.
cooky451
15:40:39 29.05.2012   Titel:   Zitieren

Neue Strings + neue Wahrscheinlichkeit -> Laufzeit 1.33 Sekunden. Na ja zumindest kann man da irgendwie was messen. Bitte die Strings hier wegeditieren und auf pastebin.com oder einer ähnlichen Seite Posten und dann verlinken. (Die machen das arme Forum kaputt. :))
SeppJ
15:35:14 29.05.2012   Titel:   Zitieren

Das ist dann gut 0.9 Sekunden bei mir. Gibt es eine Möglichkeit, das Ergebnis zu überprüfen? Muss man dir eigentlich alles so aus der Nase ziehen? Deine gesamte Einstellung deutet darauf hin, dass du keine Hilfe möchtest. Sieben Seiten lang. Warum sollte man dir noch helfen?
ComputerCarl
15:27:16 29.05.2012   Titel:   Zitieren

Mir war so das ich die Tipps umgesetzt habe. Nur in Emission ist noch ein 2-dim Vector, aber den habe ich einfach noch nicht geschaft zu ändern. Was sind diese Speicherlöcher? Das sagt mir gerade nichts.
Wie lang dieses Programm bei mir dauert weiß ich nichtt genau. Auch nicht mehr als eine Sekunde oder so. Nur wie gesagt bei großen Daten wird es schlimm. Einen kleinen Tippfehler hatte ich noch hier:

this->emission[1][0] = 0.1;
this->emission[1][1] = 0.1;
this->emission[1][2] = 0.1;
this->emission[1][3] = 0.1; // <- 0.7 !!! sind ja Wahrscheinlichkeiten

Sonst mit diesen Strings müsste es (jedenfalls bei mir) mehr als 4 Sekunden dauern.
cooky451
15:19:08 29.05.2012   Titel:   Zitieren

ComputerCarl schrieb:
Achso bevor die Frage kommt. Meine Eingabe mit realistischen Werten ist natürlich wesentlich größer. Und hier wird die Laufzeit erst unerträglich.

Meine eigentlichen Daten:
ca. 1000 DNA Sequenzen der Länge 500 mit etwa 30 Zuständen (und Alphabetgröße 4).
Bitte mit den Daten. Die Ausführung sollte etwa 4 - 8 Sekunden dauern, um ordentlich testen zu können. :) (Und alle Verhältnisse von Daten <-> Iterationen etc. sollten möglichst dem Originaldatensatz entsprechen.)

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.