C: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Die Seite wurde neu angelegt: „== big.c (schnell Platte füllen) == <pre>#include <stdio.h> #include <stdlib.h> int main(int count, char** arg){ FILE* file = fopen("big.data", "w"); int…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
[[Kategorie:Sprache]] | |||
== big.c (schnell Platte füllen) == | == big.c (schnell Platte füllen) == | ||
<pre>#include <stdio.h> | <pre>#include <stdio.h> | ||
| Zeile 13: | Zeile 15: | ||
} | } | ||
return 0; | return 0; | ||
} | |||
</pre> | |||
== CPU-Benchmark hamamips.c == | |||
<pre>#include "stdio.h" | |||
#include "stdlib.h" | |||
#include "time.h" | |||
typedef unsigned long seed_t; | |||
typedef struct { | |||
seed_t m_seed; | |||
seed_t m_factor; | |||
seed_t m_offset; | |||
seed_t m_x; | |||
seed_t m_y; | |||
seed_t m_z; | |||
seed_t m_c; | |||
} Random; | |||
void init(Random* rand){ | |||
rand->m_seed = 0x20111958UL; | |||
rand->m_factor = 0x323abceUL; | |||
rand->m_offset = 0x1234321UL; | |||
rand->m_x = 0x33221122UL; | |||
rand->m_y = 0x73829382UL; | |||
rand->m_z = 0xabcdef07UL; | |||
rand->m_c = 0; | |||
} | |||
long next(Random* rand){ | |||
// linear congruence generator: | |||
rand->m_x = rand->m_x * rand->m_factor + rand->m_offset; | |||
// XorShift: | |||
rand->m_y ^= rand->m_y << 13; | |||
rand->m_y ^= rand->m_y >> 17; | |||
rand->m_y ^= rand->m_y << 5; | |||
// Multiply with carry: | |||
seed_t t = 698769069UL * rand->m_z + rand->m_c; | |||
rand->m_c = t << 32; | |||
rand->m_z = t; | |||
rand->m_seed = rand->m_x + rand->m_y + rand->m_z; | |||
return rand->m_seed; | |||
} | |||
seed_t rand1000(int millions){ | |||
Random rand; | |||
seed_t rc = 0; | |||
int ix; | |||
init(&rand); | |||
for (ix = millions - 1; ix > 0; ix--){ | |||
int ix2 = 1000000; | |||
while(ix2-- > 0) | |||
rc += next(&rand); | |||
} | |||
return rc; | |||
} | |||
int main(int argc, char** argv){ | |||
clock_t start = clock(); | |||
seed_t value; | |||
clock_t duration; | |||
int millions = 100; | |||
if (argc > 1 && atol(argv[1]) != 0) | |||
millions = atol(argv[1]); | |||
value = rand1000(millions); | |||
duration = clock() - start; | |||
printf ("%.3f sec %.3f HamaMips %d\n", duration / (double) CLOCKS_PER_SEC, | |||
millions * (double) CLOCKS_PER_SEC / duration, value); | |||
} | } | ||
</pre> | </pre> | ||
Version vom 12. Mai 2016, 12:21 Uhr
big.c (schnell Platte füllen)
#include <stdio.h>
#include <stdlib.h>
int main(int count, char** arg){
FILE* file = fopen("big.data", "w");
int size = 0x10000 * 128;
void* data = calloc(size, 1);
int mByte = 0;
while (fwrite(data, size, 1, file) > 0){
mByte += size / 1024 / 1024;
printf("%d MByte\n", mByte);
}
return 0;
}
CPU-Benchmark hamamips.c
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
typedef unsigned long seed_t;
typedef struct {
seed_t m_seed;
seed_t m_factor;
seed_t m_offset;
seed_t m_x;
seed_t m_y;
seed_t m_z;
seed_t m_c;
} Random;
void init(Random* rand){
rand->m_seed = 0x20111958UL;
rand->m_factor = 0x323abceUL;
rand->m_offset = 0x1234321UL;
rand->m_x = 0x33221122UL;
rand->m_y = 0x73829382UL;
rand->m_z = 0xabcdef07UL;
rand->m_c = 0;
}
long next(Random* rand){
// linear congruence generator:
rand->m_x = rand->m_x * rand->m_factor + rand->m_offset;
// XorShift:
rand->m_y ^= rand->m_y << 13;
rand->m_y ^= rand->m_y >> 17;
rand->m_y ^= rand->m_y << 5;
// Multiply with carry:
seed_t t = 698769069UL * rand->m_z + rand->m_c;
rand->m_c = t << 32;
rand->m_z = t;
rand->m_seed = rand->m_x + rand->m_y + rand->m_z;
return rand->m_seed;
}
seed_t rand1000(int millions){
Random rand;
seed_t rc = 0;
int ix;
init(&rand);
for (ix = millions - 1; ix > 0; ix--){
int ix2 = 1000000;
while(ix2-- > 0)
rc += next(&rand);
}
return rc;
}
int main(int argc, char** argv){
clock_t start = clock();
seed_t value;
clock_t duration;
int millions = 100;
if (argc > 1 && atol(argv[1]) != 0)
millions = atol(argv[1]);
value = rand1000(millions);
duration = clock() - start;
printf ("%.3f sec %.3f HamaMips %d\n", duration / (double) CLOCKS_PER_SEC,
millions * (double) CLOCKS_PER_SEC / duration, value);
}