C: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Zeile 53: | Zeile 53: | ||
int memSpeed(int megaBytes, int rounds){ | int memSpeed(int megaBytes, int rounds){ | ||
clock_t duration, duration2, start = clock(); | clock_t duration, duration2, start = clock(); | ||
int ix, ix2, round; | int ix, ix2, ix3, ix1, round; | ||
double** buffers = (double**) malloc(megaBytes * 1024 * 1024); | double** buffers = (double**) malloc(megaBytes * 1024 * 1024); | ||
int bufferEntries = 1024*1024/sizeof(double); | int bufferEntries = 1024*1024/sizeof(double); | ||
Zeile 63: | Zeile 63: | ||
duration2 = clock() - start; | duration2 = clock() - start; | ||
for (round = 0; round < rounds; round++) | for (round = 0; round < rounds; round++) | ||
for (ix2 = bufferEntries - 1; ix2 >= 0; ix2--) | for (ix2 = bufferEntries - 1, ix3 = 0; ix2 >= 0; ix2--, ix3++) | ||
for (ix = megaBytes - 1; ix >= 0; ix--) | for (ix = megaBytes - 1, ix1 = 0; ix >= 0; ix--, ix1++) | ||
if (buffers[ix][ix2] != | if (buffers[ix][ix2] != buffers[ix1][ix3] + buffers[ix1][ix2]) | ||
buffers[ix][ix2] += | buffers[ix][ix2] += buffers[ix][ix3] - buffers[ix1][ix3] + buffers[ix1][ix2]; | ||
duration = clock() - start; | duration = clock() - start - duration2; | ||
printf("%.3f MemMips %.3f / %.4f sec %d MiBytes %d rounds\n", | printf("%.3f MemMips %.3f / %.4f sec %d MiBytes %d rounds\n", | ||
megaBytes * (double) CLOCKS_PER_SEC * rounds / duration / | pow(megaBytes, 1.3) * (double) CLOCKS_PER_SEC * rounds / duration / 16, | ||
duration / (double) CLOCKS_PER_SEC , duration2 / (double) CLOCKS_PER_SEC, | duration / (double) CLOCKS_PER_SEC , duration2 / (double) CLOCKS_PER_SEC, | ||
megaBytes, rounds); | megaBytes, rounds); |
Version vom 17. Mai 2016, 12:40 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; #define DEFINE_VARS(seed, x, y, z, c) seed_t seed = 0x20111958UL; \ seed_t x = 0x33221122UL; \ seed_t y = 0x73829382UL; \ seed_t z = 0xabcdef07UL; \ seed_t c = 0 #define next(seed, x, y, z, c) \ do { \ x = x * 0x20111957 + 0x11121989; \ y ^= y << 13; \ y ^= y >> 17; \ y ^= y << 5; \ seed_t t = 698769069UL * z + c; \ c = t << 31; \ z = t; \ seed = x + y + z; \ } while (0) seed_t calcRandom(int millions){ DEFINE_VARS(seed, x, y, z, c); seed_t rc = 0; while (millions-- > 0){ int ix2 = 1000000; while(ix2-- > 0){ next(seed, x, y, z, c); rc += seed; } } return rc; } int memSpeed(int megaBytes, int rounds){ clock_t duration, duration2, start = clock(); int ix, ix2, ix3, ix1, round; double** buffers = (double**) malloc(megaBytes * 1024 * 1024); int bufferEntries = 1024*1024/sizeof(double); for (ix = 0; ix < megaBytes; ix++){ buffers[ix] = (double*) malloc(sizeof(double)*bufferEntries); for (ix2 = 0; ix2 < bufferEntries; ix2++) buffers[ix][ix2] = ix2*ix; } duration2 = clock() - start; for (round = 0; round < rounds; round++) for (ix2 = bufferEntries - 1, ix3 = 0; ix2 >= 0; ix2--, ix3++) for (ix = megaBytes - 1, ix1 = 0; ix >= 0; ix--, ix1++) if (buffers[ix][ix2] != buffers[ix1][ix3] + buffers[ix1][ix2]) buffers[ix][ix2] += buffers[ix][ix3] - buffers[ix1][ix3] + buffers[ix1][ix2]; duration = clock() - start - duration2; printf("%.3f MemMips %.3f / %.4f sec %d MiBytes %d rounds\n", pow(megaBytes, 1.3) * (double) CLOCKS_PER_SEC * rounds / duration / 16, duration / (double) CLOCKS_PER_SEC , duration2 / (double) CLOCKS_PER_SEC, megaBytes, rounds); } int main(int argc, char** argv){ clock_t duration, start = clock(); int millions = 100; int megaBytes = 50; int rounds = 1000 * millions / 400 / megaBytes; if (rounds < 1) rounds = 1; seed_t value; if (argc > 1 && atol(argv[1]) != 0) millions = atol(argv[1]); if (argc > 2 && atol(argv[2]) != 0) megaBytes = atol(argv[2]); value = calcRandom(millions); duration = clock() - start; printf ("%.3f HamaMips %.3f sec value: %04x-%04x\n", millions * (double) CLOCKS_PER_SEC / duration, duration / (double) CLOCKS_PER_SEC, (value >> 16) & 0xffff, value & 0xffff); memSpeed(megaBytes, rounds); }