26. februar 2012 - 14:51
Der er
11 kommentarer og 1 løsning
Output resultater i en fil
Hej, Jeg laver et simuleringsprogram, hvor jeg ønsker at printe nogle matricer ud for hvert tidskridt. Hvordan laver man bedst en print funktion, som printer matricerne for de forskellige tidsskridt i en fil? Tænker at det helst skal fungere på denne måde: for(i=0; i<max_tidsskridt; i++) { ... masse udregninger ... printToFile(filename.txt, matrix1, row, col); printToFile(filename.txt, matrix2, row, col); printToFile(filename.txt, matrix3, row, col); } hvor så filename.txt skal se sådan ud: Tidsskridt 0: matrix 1 matrix 2 matrix 3 Tidsskridt 1: matrix 1 matrix 2 matrix 3 etc.... Jeg håber det er forståligt og at nogle kan hjælpe mig - vil være en stor hjælp.. På forhånd tak Mvh ./tym
Annonceindlæg fra Infor
26. februar 2012 - 15:44
#1
Du skal aabne filen for append (mode "a" i fopen). Og saa en dobbelt for loekke til at udskrive med (fprintf).
26. februar 2012 - 15:51
#2
arne_v: Jo den er jeg med på. Men problemet ved f.eks. denne løsning: void printToFile(char *str[], double *a, int n, int m) { int i, j; FILE *infile; if (infile = fopen(*str, "w")) { for(j=0; j<n; j++) { for(i=0; i<m; i++) { fprintf(infile, "%.8f ", 10+a[i+j*m]); } fprintf(infile, "\n"); } } else { printf("Error opening"); } fclose(infile); } er at resultatet er en fil med den sidste matrix.. Funktionen både åbner og lukker filen og få skrevet "filen over" igen og igen... Så hvordan bør jeg lave funktionen, sådan at dette ikke sker og at jeg har en fil som indeholder alle matricerne for de forskellige tidsskridt?
26. februar 2012 - 15:59
#3
som jeg skrev "a" ! if (infile = fopen(*str, "a")) {
29. februar 2012 - 18:15
#4
Det ser ud til at virke, super. Lægger du ik et svar, så tråden kan lukkes.. Lige én ting; er der nogen performance forskel på at have nogle linjer kode i en for-løkke eller at ligge linjerne ind i en funktion som så kørers inde i for-løkken? Det nævnes, at funktionen skal have mange parameter ind (~10)...
29. februar 2012 - 18:23
#5
svar
29. februar 2012 - 18:24
#6
Et funktionskald koster vel en 5-10 nano sekunder. Saa hvis du laver en million funktions kald, saa koster det 0.005-0.010 sekund. Jeg tror ikke at det er vigtigt ! :-)
29. februar 2012 - 18:55
#7
Så der er forskel? Jeg kommer til at lave mange milioner, da det ikke er unormalt at for-løkken (funktion kaldes) 2 milioner gange, og dette gøres så måske ~200 gange. Denne kode skal senere implementeres på GPU (massiv parallel), og her er jeg også lidt i tvivl hvordan CUDA reagere ved så mange funktions kald.
29. februar 2012 - 19:23
#8
200 x 2 millioner = 400 millioner 400 millioner x 10 ns = 4 sekunder er det et problem?
29. februar 2012 - 19:25
#9
Hvis ja, saa proev og se om ikke du kan faa compileren til at inline funktionen og undgaa kald. Saet optimize level til max. Og hvis C++ fremfor C kan du putte inline keyword paa en metode for at fortaelle compileren at den skal indline. Jeg aner intet om CUDA.
29. februar 2012 - 21:38
#10
Tak for dine svar. Ja, tænkte jeg burde lave en ny tråd, da det var et nyt spørgsmål. Ja, der er ikke noget "inline" i C vel. Det er lidt irriterende :-)
29. februar 2012 - 23:10
#11
Nej, men: - derfor kan den godt inline alligevel - C kode kan normalt compiles med en C++ compiler
29. februar 2012 - 23:12
#12
Kurser inden for grundlæggende programmering