66 lines
1.5 KiB
C
66 lines
1.5 KiB
C
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <gigatron/sys.h>
|
|
#include <gigatron/libc.h>
|
|
#include <time.h>
|
|
|
|
#ifndef TIMER
|
|
# define TIMER 1
|
|
#endif
|
|
#ifndef MEMSET
|
|
# define MEMSET 1
|
|
#endif
|
|
|
|
/** This is a minor modification of the pristine C program of the
|
|
sieve benchmark. Loop conditions and certain expressions have
|
|
been made Gigatron friendly. Table clearing is conditionally done
|
|
with memset (which is proper ANSI C 1989). */
|
|
|
|
#define true 1
|
|
#define false 0
|
|
#define size 8190
|
|
#define sizepl 8191
|
|
|
|
char flags[sizepl];
|
|
|
|
main() {
|
|
int i, prime, k, count, iter;
|
|
#if TIMER
|
|
unsigned int ticks = _clock();
|
|
#endif
|
|
printf("10 iterations\n");
|
|
for (iter = 1; iter <= 10; iter ++) {
|
|
count = 0;
|
|
#if MEMSET
|
|
/* memset is a legit ANSI C 1989 function
|
|
and clears up to 32 bytes per scanline */
|
|
memset(flags, true, sizepl);
|
|
#else
|
|
/* simple pointer loop */
|
|
{ char *p = flags; while(p != flags+sizepl) *p++ = true; }
|
|
#endif
|
|
for (i = 0; i != sizepl; i++) {
|
|
if (flags[i]) {
|
|
prime = i + i + 3;
|
|
k = prime + i;
|
|
while (size >= k) {
|
|
flags[k] = false;
|
|
k += prime;
|
|
}
|
|
count = count + 1;
|
|
}
|
|
}
|
|
}
|
|
printf("\n%d primes", count);
|
|
#if TIMER
|
|
ticks = _clock() - ticks;
|
|
printf("\n%d %d/60 seconds", ticks/60, ticks % 60);
|
|
#endif
|
|
}
|
|
|
|
/* Local Variables: */
|
|
/* mode: c */
|
|
/* c-basic-offset: 4 */
|
|
/* indent-tabs-mode: () */
|
|
/* End: */
|