Skip to content

Commit

Permalink
add debug macro to some micro-benchmarks
Browse files Browse the repository at this point in the history
Addresses #653.
  • Loading branch information
PeiMu committed May 15, 2023
1 parent facbaee commit 0ea368e
Show file tree
Hide file tree
Showing 6 changed files with 550 additions and 6 deletions.
46 changes: 46 additions & 0 deletions analysis/statistics/76d7464f83d3682d7290233a8c47d2240af80519.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

changeset: 1487:76d7464f83d3682d7290233a8c47d2240af80519
char kNewtonVersion[] = "0.3-alpha-1487 (76d7464f83d3682d7290233a8c47d2240af80519) (build 05-15-2023-13:[email protected]_64)";
\n./src/noisy/noisy-linux-EN -O0 applications/noisy/helloWorld.n -s
\n./src/newton/newton-linux-EN -v 0 -eP applications/newton/invariants/ViolinWithTemperatureDependence-pigroups.nt

Informational Report:
---------------------
Invariant "ViolinWithTemperatureDependenceForPiGroups" has 2 unique kernels, each with 2 column(s)...

Kernel 0 is a valid kernel:

1 1
-0.5 -0
1 0
0.5 0
0 -1
-0 -1


The ordering of parameters is: P1 P0 P3 P2 P4 P5

Pi group 0, Pi 0 is: P0^(-0.5) P1^( 1) P2^(0.5) P3^( 1) P4^( 0) P5^(-0)

Pi group 0, Pi 1 is: P0^(-0) P1^( 1) P2^( 0) P3^( 0) P4^(-1) P5^(-1)


Kernel 1 is a valid kernel:

1 0
-0.5 1
1 -2
0.5 -1
-0 -2
0 -2


The ordering of parameters is: P1 P0 P3 P2 P4 P5

Pi group 1, Pi 0 is: P0^(-0.5) P1^( 1) P2^(0.5) P3^( 1) P4^(-0) P5^( 0)

Pi group 1, Pi 1 is: P0^( 1) P1^( 0) P2^(-1) P3^(-2) P4^(-2) P5^(-2)




103 changes: 103 additions & 0 deletions applications/newton/llvm-ir/CHStone_test/dfdiv/float64_div.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,10 @@ typedef float64 bmx055yAcceleration;

float64 float64_div (bmx055xAcceleration a, bmx055yAcceleration b)
{
#ifdef ASSUME
__builtin_assume(a > -16 && a < 16);
__builtin_assume(a > -15.4 && a < 16.3);
#endif
flag aSign, bSign, zSign;
int16 aExp, bExp, zExp;
bits64 aSig, bSig, zSig;
Expand Down Expand Up @@ -448,3 +452,102 @@ const float64 z_output[N] = {
// printf ("%d\n", main_result);
// return main_result;
// }


// clang ../CHStone_test/dfdiv/float64_div.cpp -D DEBUG -D ASSUME -O0 -g -o float64_div_assume -lm
#ifdef DEBUG

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>

#define iteration_num 50000

typedef struct timespec timespec;
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}

timespec sum(timespec t1, timespec t2) {
timespec temp;
if (t1.tv_nsec + t2.tv_nsec >= 1000000000) {
temp.tv_sec = t1.tv_sec + t2.tv_sec + 1;
temp.tv_nsec = t1.tv_nsec + t2.tv_nsec - 1000000000;
} else {
temp.tv_sec = t1.tv_sec + t2.tv_sec;
temp.tv_nsec = t1.tv_nsec + t2.tv_nsec;
}
return temp;
}

void printTimeSpec(timespec t, const char* prefix) {
printf("%s: %d.%09d\n", prefix, (int)t.tv_sec, (int)t.tv_nsec);
}

timespec tic( )
{
timespec start_time;
clock_gettime(CLOCK_REALTIME, &start_time);
return start_time;
}

void toc( timespec* start_time, const char* prefix )
{
timespec current_time;
clock_gettime(CLOCK_REALTIME, &current_time);
printTimeSpec( diff( *start_time, current_time ), prefix );
*start_time = current_time;
}

/*
* random floating point, [min, max]
* */
static bmx055xAcceleration
randomDouble(bmx055xAcceleration min, bmx055xAcceleration max)
{
bmx055xAcceleration randDbValue = min + 1.0 * rand() / RAND_MAX * (max - min);
return randDbValue;
}

int main(int argc, char** argv) {
double parameters[2];
char *pEnd;
if (argc == 3) {
for (size_t idx = 0; idx < argc - 1; idx++) {
parameters[idx] = strtod(argv[idx + 1], &pEnd);
}
} else {
parameters[0] = 3.0;
parameters[1] = 10.0;
}
double result[iteration_num];
bmx055xAcceleration xOps[iteration_num];
bmx055yAcceleration yOps[iteration_num];
for (size_t idx = 0; idx < iteration_num; idx++) {
xOps[idx] = randomDouble(parameters[0], parameters[1]);
yOps[idx] = randomDouble(parameters[0] + 0.6, parameters[1] + 0.3);
}

timespec timer = tic();
for (size_t idx = 0; idx < iteration_num; idx++) {
result[idx] = float64_div((uint64_t)(xOps[idx]), (uint64_t)(yOps[idx]));
}

toc(&timer, "computation delay");

printf("results: %f\t%f\t%f\t%f\t%f\n", result[0], result[1], result[2], result[3], result[4]);

return 0;
}
#endif
103 changes: 103 additions & 0 deletions applications/newton/llvm-ir/CHStone_test/dfmul/float64_mul.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,10 @@ typedef float64 bmx055xAcceleration;
typedef float64 bmx055yAcceleration;

float64 float64_mul (bmx055xAcceleration a, bmx055yAcceleration b) {
#ifdef ASSUME
__builtin_assume(a > -16 && a < 16);
__builtin_assume(a > -15.4 && a < 16.3);
#endif
flag aSign, bSign, zSign;
int16 aExp, bExp, zExp;
bits64 aSig, bSig, zSig0, zSig1;
Expand Down Expand Up @@ -422,3 +426,102 @@ const float64 z_output[N] = {
// printf ("%d\n", main_result);
// return main_result;
// }


// clang ../CHStone_test/dfmul/float64_mul.cpp -D DEBUG -D ASSUME -O0 -g -o float64_mul_assume -lm
#ifdef DEBUG

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>

#define iteration_num 50000

typedef struct timespec timespec;
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}

timespec sum(timespec t1, timespec t2) {
timespec temp;
if (t1.tv_nsec + t2.tv_nsec >= 1000000000) {
temp.tv_sec = t1.tv_sec + t2.tv_sec + 1;
temp.tv_nsec = t1.tv_nsec + t2.tv_nsec - 1000000000;
} else {
temp.tv_sec = t1.tv_sec + t2.tv_sec;
temp.tv_nsec = t1.tv_nsec + t2.tv_nsec;
}
return temp;
}

void printTimeSpec(timespec t, const char* prefix) {
printf("%s: %d.%09d\n", prefix, (int)t.tv_sec, (int)t.tv_nsec);
}

timespec tic( )
{
timespec start_time;
clock_gettime(CLOCK_REALTIME, &start_time);
return start_time;
}

void toc( timespec* start_time, const char* prefix )
{
timespec current_time;
clock_gettime(CLOCK_REALTIME, &current_time);
printTimeSpec( diff( *start_time, current_time ), prefix );
*start_time = current_time;
}

/*
* random floating point, [min, max]
* */
static bmx055xAcceleration
randomDouble(bmx055xAcceleration min, bmx055xAcceleration max)
{
bmx055xAcceleration randDbValue = min + 1.0 * rand() / RAND_MAX * (max - min);
return randDbValue;
}

int main(int argc, char** argv) {
double parameters[2];
char *pEnd;
if (argc == 3) {
for (size_t idx = 0; idx < argc - 1; idx++) {
parameters[idx] = strtod(argv[idx + 1], &pEnd);
}
} else {
parameters[0] = 3.0;
parameters[1] = 10.0;
}
double result[iteration_num];
bmx055xAcceleration xOps[iteration_num];
bmx055yAcceleration yOps[iteration_num];
for (size_t idx = 0; idx < iteration_num; idx++) {
xOps[idx] = randomDouble(parameters[0], parameters[1]);
yOps[idx] = randomDouble(parameters[0] + 0.6, parameters[1] + 0.3);
}

timespec timer = tic();
for (size_t idx = 0; idx < iteration_num; idx++) {
result[idx] = float64_mul((uint64_t)(xOps[idx]), (uint64_t)(yOps[idx]));
}

toc(&timer, "computation delay");

printf("results: %f\t%f\t%f\t%f\t%f\n", result[0], result[1], result[2], result[3], result[4]);

return 0;
}
#endif
99 changes: 99 additions & 0 deletions applications/newton/llvm-ir/c-files/e_acosh.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ double __ieee754_acosh(x)
bmx055xAcceleration x;
#endif
{
#ifdef ASSUME
__builtin_assume(x > -16 && x < 16);
#endif
double t;
int hx;
hx = __HI(x);
Expand All @@ -68,3 +71,99 @@ double __ieee754_acosh(x)
return log1p(t+sqrt(2.0*t+t*t));
}
}

// clang ../c-files/e_acosh.c -D DEBUG -D ASSUME -O3 -o e_acosh_assume -lm
#ifdef DEBUG

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>

#define iteration_num 500000

typedef struct timespec timespec;
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}

timespec sum(timespec t1, timespec t2) {
timespec temp;
if (t1.tv_nsec + t2.tv_nsec >= 1000000000) {
temp.tv_sec = t1.tv_sec + t2.tv_sec + 1;
temp.tv_nsec = t1.tv_nsec + t2.tv_nsec - 1000000000;
} else {
temp.tv_sec = t1.tv_sec + t2.tv_sec;
temp.tv_nsec = t1.tv_nsec + t2.tv_nsec;
}
return temp;
}

void printTimeSpec(timespec t, const char* prefix) {
printf("%s: %d.%09d\n", prefix, (int)t.tv_sec, (int)t.tv_nsec);
}

timespec tic( )
{
timespec start_time;
clock_gettime(CLOCK_REALTIME, &start_time);
return start_time;
}

void toc( timespec* start_time, const char* prefix )
{
timespec current_time;
clock_gettime(CLOCK_REALTIME, &current_time);
printTimeSpec( diff( *start_time, current_time ), prefix );
*start_time = current_time;
}

/*
* random floating point, [min, max]
* */
static bmx055xAcceleration
randomDouble(bmx055xAcceleration min, bmx055xAcceleration max)
{
bmx055xAcceleration randDbValue = min + 1.0 * rand() / RAND_MAX * (max - min);
return randDbValue;
}

int main(int argc, char** argv) {
double parameters[2];
char *pEnd;
if (argc == 3) {
for (size_t idx = 0; idx < argc - 1; idx++) {
parameters[idx] = strtod(argv[idx + 1], &pEnd);
}
} else {
parameters[0] = 3.0;
parameters[1] = 10.0;
}
double result[iteration_num];
bmx055xAcceleration xOps[iteration_num];
for (size_t idx = 0; idx < iteration_num; idx++) {
xOps[idx] = randomDouble(parameters[0], parameters[1]);
}

timespec timer = tic();
for (size_t idx = 0; idx < iteration_num; idx++) {
result[idx] = __ieee754_acosh(xOps[idx]);
}

toc(&timer, "computation delay");

printf("results: %f\t%f\t%f\t%f\t%f\n", result[0], result[1], result[2], result[3], result[4]);

return 0;
}
#endif
Loading

0 comments on commit 0ea368e

Please sign in to comment.