PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CPU Burn (Floating Point Operation)


K4mPFwUr$t
2005-05-21, 21:53:51
hi

ich habe heute mal ein kleines programm geschrieben mit dev C++.
ziel ist es eine auswahl von 2 sachen zu haben und zwar "Stresstest" dieser soll nach selbst gewählter zeit beenden und ein "FPU bench" der zählt wie viele sekunden er braucht um die selbstgewählte zahl durch x=x++; zu erreichen.

bisher siehts so aus
es ist zwar nicht das beste, aber für den anfang doch gut :confused:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
#include <cstdlib>
using namespace std;
#define green 10
#define red 12
#define yellow 14
void color(WORD color){ SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE),color);}
int start (long t){return(t);}
int main()
{
char $;int value=0,select,startx,endx,result;long z;
color(green);
printf("##############################\n");
printf("##########CPU Burn 0.1########\n");
printf("##############################\n\n\n");
color(yellow);
printf("Value:\t");scanf("%i",&select);
color(green);
time (&z);startx=start(z);
while(value!=select){value++;printf("\t%i\b\b\b\b\b\b\b\b\b\b",value);}
time(&z);endx=start(z);
color(red);
result=endx-startx;
printf("\n\nFloating Point\nCalculation done\n\n");
color(yellow);
printf("Time: %is\n",result);
getch();
return 0;
}

wollte daher ein paar sachen noch reibauen, aber an einer guten lösung habe ich mir schon die zähne ausgebissen, habe gegoogelt und etc.

1. Auswahl zwischen Stresstest und FPU Bench
2. dieses noch in zwei funktionierente funktionen aufzuteilen
3. FPU bench soll nach X minuten stoppen (so wie prime95 toture)
4. neustarten des programmes

für 1. habe ich schon sachen probiert mit if bedingungen ...

ca. so
[CODE]
printf("1 - Stresstest\n2 - FPU Bench");scanf("%c",&$);
if($=='1'){... Stresstest Quellcode ...}
if($00'2'){... FPU Bench Quellcode ...}

vieleicht könnt ihr mir ja weiterhelfen

danke im voraus ;)

Gast
2005-05-21, 23:07:15
FPU Benchen würd ich nicht mit Ints...
Die meiste Zeit wird wohl für die Ausgabe draufgehen - printf inner schleife :eek:
Das mit den ifs findest du sicher selber raus. Kann auf den ersten Blick nix ungewöhnliches sehen, einfach ein bisschen rumprobieren.

Coda
2005-05-21, 23:15:41
#define green 10
#define red 12
#define yellow 14Das ist doch kein C *argh*

const unsigned char green = 10;
const unsigned char red = 12;
const unsigned char yellow = 14;

x=x++;Das würde an dem Wert von x rein gar nichts ändern. Schlag mal den Unterschied zwischen Post- und Preincrement nach. :rolleyes:

Außerdem wird wie gesagt in dem Program die FPU rein gar nichts machen ;)

K4mPFwUr$t
2005-05-22, 00:42:46
mal ne frage ....

ich würde gerne zwischen zwei bestehenten zweichen eine eingabe tätigen, das sollte etwa so aussehen. aber das geht nicht ;( gibts da eine andere lösung :confused:


printf("["scanf("%c",&$);printf("]");


ich habe mal nach Floating Point operationen im internet nachgegoogelt, hab da einige gefunden wie sowas


float KahanSum( const float A[], int n )
{
float sum=0, C=0, Y, T;
for (int i=0; i<n; i++)
{
Y = A[i] - C;
T = sum + Y;
C = T - sum - Y;
sum = T;
}
return sum;
}


float sumsqr(float a, float b)
{
register tmp3 = a*a;
register tmp4 = b*b;
register tmp5 = tmp3+tmp4;
return (float) tmp5;
}


wäre das was ich suche für mein FPU bench?

Coda
2005-05-22, 01:07:33
Alles mit "float" oder "double" drin ist gut ;)

K4mPFwUr$t
2005-05-22, 11:38:55
hat jemand ein einfache beispiel wie so eine FPU funktion aussehen könnte :confused:

PS: das mit dem menu geht jetzt soweit

Gast
2005-05-22, 11:59:44
mal ne frage ....

ich würde gerne zwischen zwei bestehenten zweichen eine eingabe tätigen, das sollte etwa so aussehen. aber das geht nicht ;( gibts da eine andere lösung :confused:



merke: du sollst in der console keine guis programmieren. wenn du eyecandy willst nimm ein toolkit.

ich habe mal nach Floating Point operationen im internet nachgegoogelt, hab da einige gefunden wie sowas

(...)



Alles mit "float" oder "double" drin ist gut

Hör auf coda. wo er recht hat hat er recht

K4mPFwUr$t
2005-05-22, 12:25:21
merke: du sollst in der console keine guis programmieren. wenn du eyecandy willst nimm ein toolkit.
hmmm, schade da werd ich mir wohl was anderes überlegen müssen


main(){for(int p=1,i;++p<i>p?printf("%d ",p):0)for(i=2;p%i++;);}


das klappt aber nicht bei mir troz das ich die math.h eingebunden habe ;(

bisher habe ich keinen sourcecode gefunden, der funzt. (pi, prime)

prime: natürliche zahlen, die größer als 1 und durch 1 und durch sich selber teilbar sind.

wie kann ich das am besten verwirklichen :confused:

Coda
2005-05-22, 12:54:09
Was hat jetzt eine Primzahlberechnung mit einem FPU Benchmark zu tun?

K4mPFwUr$t
2005-05-22, 13:02:33
wollte mehrere sachen einbauen (pi, prime, fp ...)


int prime()
{
int x=0;
while(x<1000)
{
x=x+1;
if(x>1;x/x;x/1)
{
printf("%i",x);
}

}
}

hab mir das in einer schleife mal gemacht, aber es

micki
2005-05-22, 13:09:05
Das ist doch kein C *argh*
doch, das war c



const unsigned char green = 10;
const unsigned char red = 12;
const unsigned char yellow = 14;

das ist c++

Coda
2005-05-22, 13:16:28
Ich meinte damit das er kein C benützt (<iostream>) und dann gefälligst auch const statt #define benützen soll.

Allerdings frage ich mich, was das <iostream> überhaupt soll wenn er überall printf benützt ;)

Chris Lux
2005-05-24, 18:20:50
main(){for(int p=1,i;++p<i>p?printf("%d ",p):0)for(i=2;p%i++;);}


das klappt aber nicht bei mir troz das ich die math.h eingebunden habe ;(


OT: junge! was soll das? ist das bei CS-scriptkiddies so ein drang alles 1337 und unleserlich hinschreiben zu müssen? wenn dir jemand ernsthaft helfen soll schreib es auch so, dass es ein normalsterblicher lesen kann.

Zum Thema:

du initialisierst i nicht in der ersten for-schleife, dann testest du aber gleich mit dem uninitialisierten i. dazu C/C++ evaluiert solche ausdrücke lazy, dh solche doppelvergleiche können arg in die hose gehen. bei dir zB nutzt du den postfix increment operator, dh erster vergleich ++p<i bedeutet, dass vor dem vergleich p erhöht wird, dahh vergleicht er i>p, wie soll dass also jemals wahr werden? ach was! was soll der ausdrück überhaupt? das ist vielleicht syntaktisch ok, aber semantisch NÜSCHTS. weil C/C++ von links her die ausdrücke auflöst und du somit den zweiten vergleich von den typen her bool > int machst. is aber alles hinfällig, da dein i nicht initialisiert ist für den ersten durchgang, so dass da unbestimmte ergebnisse raus kommen. überleg dir nochmal was du da machen wolltest und schreib es korrekter auf, denn falls du ++p<i && i>p haben wolltest geb ich dir brief und siegel, dass dies immer falsch ist und deine schleife nicht einmal durchlaufen wird.

Pinoccio
2005-05-24, 19:06:10
Es wäre, nachdem was man hier von dir liest, vielleicht ganz gut, wenn du erst programmiern lernst und dir dann überlegst, was du damit machst. Oder zumindest erst progmierst, wenn du programmieren kannst und nicht schon dann, wenn du eine Idee hast. Sprich miserable Lesbarkeit, Ineffizienz und offensichtliches Unverständnis dessen was passiert werden dich vermutlich noch lange von einem funktionierenden Programm abhalten.
Ist nicht böse gemeint, aber mir scheint, du versuchst dein Pferd von der falschen Seite aufzuzäumen ... ... und das ist bekanntlich für'n Arsch! (scnr)

Die Bezeichnung "CPU Burn" (http://pages.sbcglobal.net/redelm/) (und andere (http://www.google.com/search?q=%22CPU+Burn%22+-%22cpu+burn-in%22)) wird übrigens schon verwendet.
Wenn du tatsächlich ein Programm schreiben willst, daß deine CPU maximal ausnutzt, solltest du viel über deine CPU wissen und Assembler nehmen.

Wenn du effiziente Primalitätstests schreiben willst, so solltest du entweder einen bekannten Algorithmus abtippen (was einigermaßen sinnfrei ist) oder umfangriche Kenntnisse der Algebra mitbringen.

Was willst du mit deiner Software eigentlich machen?

mfg Sebastian