Moin.
Laut unserem Prof läuft itimer_real immer, egal welcher prozess im moment aktiv ist und itimer_virtual nur genau dann, wenn er prozess aktiv ist.
wenn ich nun die pro sekunde berechneten primzahlen ausgeben lasse, müssten ja die von itimer_virtual berechneten mehr sein, da diese sekunde "länger ist", mindestens aber genauso viele wie bei itimer_real?! Schließlich wird der Prozess nicht 100% aktiv sein und bei itimer_real nicht ganz eine sekunde laufzeit schaffen.....
Ich hab ein programm geschrieben, dass 10 sekunden lang(erst itimer_real, dann itimer_virtual) primzahlen berechnet und die anzahl der bearbeiteten zahlen und dann den durchschnitt ausgibt:
fabian@linux-0zpr:~/Dokumente/uebung10> ./a.out
Bisher berechnete Primzahlen:141396
In der letzten Sekunde berechnete Primzahlen:141396
Bisher bearbeitete zahlen:1890727
In der letzten Sekunde bearbeitete Zahlen:1890727
Bisher berechnete Primzahlen:220712
In der letzten Sekunde berechnete Primzahlen:79316
Bisher bearbeitete zahlen:3058771
In der letzten Sekunde bearbeitete Zahlen:1168044
Bisher berechnete Primzahlen:291119
In der letzten Sekunde berechnete Primzahlen:70407
Bisher bearbeitete zahlen:4120849
In der letzten Sekunde bearbeitete Zahlen:1062078
Bisher berechnete Primzahlen:354053
In der letzten Sekunde berechnete Primzahlen:62934
Bisher bearbeitete zahlen:5085803
In der letzten Sekunde bearbeitete Zahlen:964954
Bisher berechnete Primzahlen:411159
In der letzten Sekunde berechnete Primzahlen:57106
Bisher bearbeitete zahlen:5973497
In der letzten Sekunde bearbeitete Zahlen:887694
Bisher berechnete Primzahlen:465211
In der letzten Sekunde berechnete Primzahlen:54052
Bisher bearbeitete zahlen:6820783
In der letzten Sekunde bearbeitete Zahlen:847286
Bisher berechnete Primzahlen:513369
In der letzten Sekunde berechnete Primzahlen:48158
Bisher bearbeitete zahlen:7581181
In der letzten Sekunde bearbeitete Zahlen:760398
Bisher berechnete Primzahlen:562013
In der letzten Sekunde berechnete Primzahlen:48644
Bisher bearbeitete zahlen:8353979
In der letzten Sekunde bearbeitete Zahlen:772798
Bisher berechnete Primzahlen:608559
In der letzten Sekunde berechnete Primzahlen:46546
Bisher bearbeitete zahlen:9098237
In der letzten Sekunde bearbeitete Zahlen:744258
Bisher berechnete Primzahlen:650352
In der letzten Sekunde berechnete Primzahlen:41793
Bisher bearbeitete zahlen:9769391
In der letzten Sekunde bearbeitete Zahlen:671154
Durchschnittlich pro Sekunde bearbeitete Zahlen:976939
Durchschnittlich pro Sekunde berechnete Primzahlen:65035
Bisher berechnete Primzahlen:142407
In der letzten Sekunde berechnete Primzahlen:142407
Bisher bearbeitete zahlen:1905667
In der letzten Sekunde bearbeitete Zahlen:1905667
Bisher berechnete Primzahlen:142568
In der letzten Sekunde berechnete Primzahlen:161
Bisher bearbeitete zahlen:1907963
In der letzten Sekunde bearbeitete Zahlen:2296
Bisher berechnete Primzahlen:226557
In der letzten Sekunde berechnete Primzahlen:83989
Bisher bearbeitete zahlen:3145829
In der letzten Sekunde bearbeitete Zahlen:1237866
Bisher berechnete Primzahlen:226680
In der letzten Sekunde berechnete Primzahlen:123
Bisher bearbeitete zahlen:3147763
In der letzten Sekunde bearbeitete Zahlen:1934
Bisher berechnete Primzahlen:297090
In der letzten Sekunde berechnete Primzahlen:70410
Bisher bearbeitete zahlen:4211633
In der letzten Sekunde bearbeitete Zahlen:1063870
Bisher berechnete Primzahlen:297201
In der letzten Sekunde berechnete Primzahlen:111
Bisher bearbeitete zahlen:4213277
In der letzten Sekunde bearbeitete Zahlen:1644
Bisher berechnete Primzahlen:359399
In der letzten Sekunde berechnete Primzahlen:62198
Bisher bearbeitete zahlen:5168743
In der letzten Sekunde bearbeitete Zahlen:955466
Bisher berechnete Primzahlen:359498
In der letzten Sekunde berechnete Primzahlen:99
Bisher bearbeitete zahlen:5170201
In der letzten Sekunde bearbeitete Zahlen:1458
Bisher berechnete Primzahlen:412253
In der letzten Sekunde berechnete Primzahlen:52755
Bisher bearbeitete zahlen:5990473
In der letzten Sekunde bearbeitete Zahlen:820272
Bisher berechnete Primzahlen:412347
In der letzten Sekunde berechnete Primzahlen:94
Bisher bearbeitete zahlen:5991907
In der letzten Sekunde bearbeitete Zahlen:1434
Durchschnittlich pro Sekunde bearbeitete Zahlen:599190
Durchschnittlich pro Sekunde berechnete Primzahlen:41234
nun haben wir bei itimer_real jedoch knapp 1mill pro sekunde bearbeitete Zahlen, bei itimer_virtual nur 600.000..
Ich kann bei mir keinen Itimer* Prozess finden und somit auch deine gänzlich nebulöse Frage nicht beantworten.
Du solltest vielleicht ein paar Details nennen, damit du hier ein paar Antworten bekommst.
Idealerweise sogar etwas Quellcode, wir sind hier in einem Programmiersprachen-Forum.
_________________ Java, the best argument for Smalltalk since C++. -- Frank Winkler
Den Quelltext habe ich grade nicht da-.-
kurz gesagt habe ich mit
struct itimerval itimer
settimer(ITIMER_REAL, &itimer, NULL)
einen timer gestartet, der jede sekunde ein Signal sendet, dessen Signalbehandlungsfunkion die Anzahl der bisher berechneten Primzahlen/bearbeiteten Zahlen ausgibt.
Danach das selbe mit
settimer(ITIMER_VIRTUAL, %itimer, NULL).
also das unser Prof unsinn redet, würde ich erstmal nicht annehmen.
laut ihm ist der unterschied zwischen real und virtual, dass bsp. wenn der timer auf 10 sek eingestellt ist, bei real nach 10 sekunden vergangener Zeit auf der Uhr das signal kommt und bei virtual nach 10 sekunden "prozesszeit", also wenn der prozess bsp nur zu 50% aktiv ist (z.b. wegen starker prozessorauslastung) demzufolge erst nach 20 sek echtzeit.
also real läuft immer, virtual nur wenn der prozess aktiv ist.
Der logik nach müsste nun aber real weniger zahlen schaffen als virtual, da bei z.b. den 50% real nur tatsächlich 5 sek rechnet, während 10 sekunden vergehen.
bei mir ist das nicht so....
ei, ich habs nicht so mit dem verständlichen ausdrücken, aber ich hoffe dass hier irgendjemand in dem Forum mich versteht^^
liebe grüße
Prinzipiell hat dein Prof da recht. Sofern dein Programm nicht parallelisiert ist, sollte die CPU Zeit ("virtual") <= Echtzeit sein. Da absolut unklar ist, was und wie du überhaupt gemessen hast, kann ich dir auch nicht mehr sagen, als dass du dann wohl entweder etwas falsch gemacht hast, deine Ergebnisse falsch interpretierst, oder du vergleichst Sachen die nicht vergleichbar sind. Aber das hast du wahrscheinlich schon geahnt, deswegen hast du ja gefragt.
Im zweiten Teil (den verstehe ich als den mit itimer_virtual verarbeiteten) schwankt die Anzahl der pro "Sekunde" verarbeiteten Zahlen auffällig stark, statt wie im ersten monoton zu fallen. Da wird irgendwo ein Fehler drinstecken.
Auffällig ist, dass abwechselnd viele und wenige Zahlen pro Sekunde verarbeitet werden können, als (jetzt mal wild geraten) liefe der erste Timer noch, feuerte annähernd synchron mit dem ersten und führte auf diese Weise dazu, dass jede Sekunde als zwei Sekunden gewertet würde.
int isPrime(int p){
long s, d;
s = (int) sqrt(p) + 1;
if ( p < 2 ) return 0;
if ( p == 2 ) return 1;
if ( p % 2 == 0 ) return 0;
for ( d = 3; d <= s; d+=2 )
if ( p % d == 0 ) return 0;
return 1;
}
int isPrime(int p){
long s, d;
s = (int) sqrt(p) + 1;
if ( p < 2 ) return 0;
if ( p == 2 ) return 1;
if ( p % 2 == 0 ) return 0;
for ( d = 3; d <= s; d+=2 )
if ( p % d == 0 ) return 0;
return 1;
}
int isPrime(int p){
long s, d;
s = (int) sqrt(p) + 1;
if ( p < 2 ) return 0;
if ( p == 2 ) return 1;
if ( p % 2 == 0 ) return 0;
for ( d = 3; d <= s; d+=2 )
if ( p % d == 0 ) return 0;
return 1;
}
hab den zähler eigentlich gestoppt. oder mach ich das falsch?
Das kann nicht richtig sein. Aber ich sehe gerade nicht, wo dran das liegt. Bei so vielen globalen Variablen bekomme ich Kopfschmerzen.
edit: Ahh, habe den Fehler gefunden: Die Variablen für den globalen Zustand sollten wohl besser volatile sein, wenn du sie so wie hier benutzt. Dann passen auch die Ergebnisse:
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
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, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
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.