Skip to content

Commit

Permalink
supercop-20100803
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel J. Bernstein authored and floodyberry committed Aug 4, 2010
1 parent d144f05 commit e46797a
Show file tree
Hide file tree
Showing 50 changed files with 5,958 additions and 1,860 deletions.
18 changes: 2 additions & 16 deletions cpucycles/amd64cpuinfo.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <sys/types.h>
#include "osfreq.c"

long long cpucycles_amd64cpuinfo(void)
{
Expand All @@ -11,20 +12,5 @@ long long cpucycles_amd64cpuinfo(void)

long long cpucycles_amd64cpuinfo_persecond(void)
{
FILE *f;
double result;
int s;

f = fopen("/proc/cpuinfo","r");
if (!f) return 0;

for (;;) {
s = fscanf(f,"cpu MHz : %lf",&result);
if (s > 0) break;
if (s == 0) s = fscanf(f,"%*[^\n]\n");
if (s < 0) { result = 0; break; }
}

fclose(f);
return 1000000.0 * result;
return osfreq();
}
2 changes: 1 addition & 1 deletion cpucycles/amd64cpuinfo.h
@@ -1,5 +1,5 @@
/*
cpucycles amd64cpuinfo.h version 20060318
cpucycles amd64cpuinfo.h version 20100803
D. J. Bernstein
Public domain.
*/
Expand Down
16 changes: 2 additions & 14 deletions cpucycles/celllinux.c
Expand Up @@ -4,6 +4,7 @@
#include <sys/time.h>
#include <sys/types.h>
#include <spu_mfcio.h>
#include "osfreq.c"

static long myround(double u)
{
Expand Down Expand Up @@ -49,27 +50,14 @@ static double guesstbcycles(void)

static void init(void)
{
FILE *f;
int s;
int loop;
double guess1;
double guess2;

spu_write_decrementer(0xffffffff);

f = fopen("/proc/cpuinfo","r");
if (!f) return;

for (;;) {
s = fscanf(f," clock : %lf MHz",&cpufrequency);
if (s > 0) break;
if (s == 0) s = fscanf(f,"%*[^\n]\n");
if (s < 0) { cpufrequency = 0; break; }
}

fclose(f);
cpufrequency = osfreq();
if (!cpufrequency) return;
cpufrequency *= 1000000.0;

for (loop = 0;loop < 100;++loop) {
guess1 = guesstbcycles();
Expand Down
27 changes: 0 additions & 27 deletions cpucycles/clockmonotonic.h

This file was deleted.

29 changes: 0 additions & 29 deletions cpucycles/cpucycles-impl.c

This file was deleted.

81 changes: 0 additions & 81 deletions cpucycles/dev4.c

This file was deleted.

27 changes: 0 additions & 27 deletions cpucycles/dev4.h

This file was deleted.

62 changes: 62 additions & 0 deletions cpucycles/dev4ns.c
@@ -0,0 +1,62 @@
#include <sys/types.h>
#include <fcntl.h>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

static int fddev = -1;
static int prev[3];
static unsigned long long prevcycles = 0;
static int now[3];
static long long cyclespersec = 0;

static void readdev(unsigned int *result)
{
if (read(fddev,result,12) == 12) return;
result[0] = result[1] = result[2] = 0;
}

long long cpucycles_dev4ns(void)
{
unsigned long long delta4;
int deltan;
int deltas;
unsigned long long guesscycles;

if (fddev == -1) {
fddev = open("/dev/cpucycles4ns",O_RDONLY);
readdev(prev);
}

readdev(now);
delta4 = (unsigned int) (now[0] - prev[0]); /* unsigned change in number of cycles mod 2^32 */
deltan = now[1] - prev[1]; /* signed change in number of nanoseconds mod 10^9 */
deltas = now[2] - prev[2]; /* signed change in number of seconds */
if ((deltas == 0 && deltan < 200000000) || (deltas == 1 && deltan < -800000000))
return prevcycles + delta4;

prev[0] = now[0];
prev[1] = now[1];
prev[2] = now[2];

if ((deltas == 0 && deltan < 300000000) || (deltas == 1 && deltan < -700000000)) {
// actual number of cycles cannot have increased by 2^32 in <0.3ms
cyclespersec = 1000000000 * (unsigned long long) delta4;
cyclespersec /= deltan + 1000000000 * (long long) deltas;
} else {
guesscycles = deltas * cyclespersec;
guesscycles += (deltan * cyclespersec) / 1000000000;
while (delta4 + 2147483648ULL < guesscycles) delta4 += 4294967296ULL;
/* XXX: could do longer-term extrapolation here */
}

prevcycles += delta4;
return prevcycles;
}

long long cpucycles_dev4ns_persecond(void)
{
while (!cyclespersec) cpucycles_dev4ns();
return cyclespersec;
}
27 changes: 27 additions & 0 deletions cpucycles/dev4ns.h
@@ -0,0 +1,27 @@
/*
cpucycles dev4ns.h version 20100803
D. J. Bernstein
Public domain.
*/

#ifndef CPUCYCLES_dev4ns_h
#define CPUCYCLES_dev4ns_h

#ifdef __cplusplus
extern "C" {
#endif

extern long long cpucycles_dev4ns(void);
extern long long cpucycles_dev4ns_persecond(void);

#ifdef __cplusplus
}
#endif

#ifndef cpucycles_implementation
#define cpucycles_implementation "dev4ns"
#define cpucycles cpucycles_dev4ns
#define cpucycles_persecond cpucycles_dev4ns_persecond
#endif

#endif
58 changes: 0 additions & 58 deletions cpucycles/dev8.c

This file was deleted.

0 comments on commit e46797a

Please sign in to comment.