funktion threaden...

S

slash-ex

Doppel-As
ich habe mal aus langeweile eine funktion gemacht, die alle möglichkeiten einer zahlenkombination durchprobiert bis eine vorgabe erfüllt wird:

PHP:
void get_nmb(int ln, int limes, char* str)
{
	char cstring[ln];
	char cmp_str[ln];

	int *array = new int[ln+1];

	for(int i = 0; i < ln+1; i++)
	{
		cmp_str[i] = str[i];
	}

	for(int i = 0; i < ln+1; i++) 
	{
		array[i] = 0;
	}

	while(array[ln] == 0)
	{
		for(int j = ln-1; j >= 0; --j) 
		{
			//cout<<array[j]<<" ";

			cstring[ln-1-j] = ret_char(array[j]);
			cout<<"vergleiche: "<<cstring<<" mit string: "<<cmp_str<<endl;
		}

		if(strcmp(cstring, cmp_str) == 0)
			break;

		int i = 0;
		for(; array[i] == limes; ++i) 
		{
			array[i] = 0;
		}
		++array[i];
	}
}

falls es jemanden interessiert hier der code^^

so nun meine frage: da das ganze sehr langsam verläuft... bei einem passwort von 8 zeichen länge wahrscheinlich stunden... wollte ich mal schauen, ob man die funktion nicht beschleunigen kann, und da ich grade auf meine prozessorauslastung gesehen habe und bemerkte dass nur ein kern auf 100% läuft wollte ich mal fragen wie man in c++ sowas auf 2 kerne aufteilen kann! rein rechnerisch sollte das ganze nur noch halb so lange dauern wenn ein kern genau die hälfte der zahlen berechnet!

kann man überhaupt einen funktionsteil einem kern im multiprozessorsystem zuweisen? ich denke wenn ich ein neuronales netz schreibe, dürfte das auf diese art auch enorm beschleunigt werden!
 
Zuletzt bearbeitet:
Wenn du einen Prozess in dem Programm in Stücke aufteilen kannst, dann kannst du diese Stücke auch in Threads ausführen.

Ohne Parameterübergabe würde das so aussehen:
Code:
boost::thread thread1(&prozessstueck);

...und mit Patametern :
Code:
boost::thread thread1(boost::bind(&prozessstueck,parameter,nocheinparameter,...));

MfG
Psyjo
 
Du kannst auch mittels fork aus der PID zwei PIDs machen, und dann sollte Dein Betriebssystem die Teilprozesse auf die beiden Kerne verteilen.
Code:
int pid = fork();

if(pid) { /* alle Ungerade Zahlen */ }
else    { /* alle gerade Zahlen */ }

wait(NULL);
 
kurioserweise akzeptiert eine übergebene funktion keine argumente:
PHP:
boost::thread thread(&get_nmb(ln, limes, "kirsche") );
thread.join();

weiß jemand in diese rictung rat?

außerdem scheint sowas auch nicht beide kerne zu 100% zu belasten?!
PHP:
void test1()
{
	for(int i = 0; i <= 5000000; i+=2)
	{
		cout<<"i "<<i<<endl;
	}
}

void test2()
{
	for(int i = 0; i <= 5000000; i=i+3)
	{
		cout<<"j "<<i<<endl;
	}
}

int main(int argc, char *argv[])
{
boost::thread thread1(&test1);
boost::thread thread2(&test2);

boost::thread_group tgr; 
tgr.add_thread(&thread1);
tgr.add_thread(&thread2);
tgr.join_all();
}
 
Zuletzt bearbeitet:

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Fehler bei Zeigern ?

noch eine zeichenkette^^

Zeichenketten

C Programm unter Unix

Zurück
Oben