176 lines
4.3 KiB
C
176 lines
4.3 KiB
C
/*************************************************************************/
|
|
/* */
|
|
/* Copyright (c) 1994 Stanford University */
|
|
/* */
|
|
/* All rights reserved. */
|
|
/* */
|
|
/* Permission is given to use, copy, and modify this software for any */
|
|
/* non-commercial purpose as long as this copyright notice is not */
|
|
/* removed. All other uses, including redistribution in whole or in */
|
|
/* part, are forbidden without prior written permission. */
|
|
/* */
|
|
/* This software is provided with absolutely no warranty and no */
|
|
/* support. */
|
|
/* */
|
|
/*************************************************************************/
|
|
|
|
#ifndef _Defs_H
|
|
#define _Defs_H 1
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include <math.h>
|
|
#include <limits.h>
|
|
|
|
/* Define booleans */
|
|
#ifdef TRUE
|
|
#undef TRUE
|
|
#endif
|
|
#ifdef FALSE
|
|
#undef FALSE
|
|
#endif
|
|
#define NUM_DIMENSIONS 2
|
|
#define NUM_DIM_POW_2 4
|
|
|
|
#undef DBL_MIN
|
|
#define DBL_MIN 2.2250738585072014e-308 /* min > 0 val of "double" */
|
|
|
|
#define TIME_ALL 1 /* non-0 means time each phase within a time step */
|
|
#define MY_TIMING (Local[my_id].Timing)
|
|
#define MY_TIME_STEP (Local[my_id].Time_Step)
|
|
|
|
#define MAX_REAL DBL_MAX
|
|
#define MIN_REAL DBL_MIN
|
|
#define REAL_DIG __DBL_DIG__
|
|
|
|
#define MAX_PROCS 64
|
|
|
|
/* Defines the maximum depth of the tree */
|
|
#define MAX_LEVEL 100
|
|
#define MAX_TIME_STEPS 10
|
|
|
|
#define COMPLEX_ADD(a,b,c) \
|
|
{ \
|
|
a.r = b.r + c.r; \
|
|
a.i = b.i + c.i; \
|
|
}
|
|
|
|
#define COMPLEX_SUB(a,b,c) \
|
|
{ \
|
|
a.r = b.r - c.r; \
|
|
a.i = b.i - c.i; \
|
|
}
|
|
|
|
#define COMPLEX_MUL(a,b,c) \
|
|
{ \
|
|
complex _c_temp; \
|
|
\
|
|
_c_temp.r = (b.r * c.r) - (b.i * c.i); \
|
|
_c_temp.i = (b.r * c.i) + (b.i * c.r); \
|
|
a.r = _c_temp.r; \
|
|
a.i = _c_temp.i; \
|
|
}
|
|
|
|
#define COMPLEX_DIV(a,b,c) \
|
|
{ \
|
|
real _denom; \
|
|
complex _c_temp; \
|
|
\
|
|
_denom = ((real) 1.0) / ((c.r * c.r) + (c.i * c.i)); \
|
|
_c_temp.r = ((b.r * c.r) + (b.i * c.i)) * _denom; \
|
|
_c_temp.i = ((b.i * c.r) - (b.r * c.i)) * _denom; \
|
|
a.r = _c_temp.r; \
|
|
a.i = _c_temp.i; \
|
|
}
|
|
|
|
#define COMPLEX_ABS(a) \
|
|
sqrt((double) ((a.r * a.r) + (a.i * a.i)))
|
|
|
|
#define VECTOR_ADD(a,b,c) \
|
|
{ \
|
|
a.x = b.x + c.x; \
|
|
a.y = b.y + c.y; \
|
|
}
|
|
|
|
#define VECTOR_SUB(a,b,c) \
|
|
{ \
|
|
a.x = b.x - c.x; \
|
|
a.y = b.y - c.y; \
|
|
}
|
|
|
|
#define VECTOR_MUL(a,b,c) \
|
|
{ \
|
|
a.x = b.x * c; \
|
|
a.y = b.y * c; \
|
|
}
|
|
|
|
#define VECTOR_DIV(a,b,c) \
|
|
{ \
|
|
a.x = b.x / c; \
|
|
a.y = b.y / c; \
|
|
}
|
|
|
|
#define DOT_PRODUCT(a,b) \
|
|
((a.x * b.x) + (a.y * b.y))
|
|
|
|
#define ADD_COST 2
|
|
#define MUL_COST 5
|
|
#define DIV_COST 19
|
|
#define ABS_COST 1
|
|
|
|
#define U_LIST_COST(a,b) (1.06 * 79.2 * a * b)
|
|
#define V_LIST_COST(a) (1.08 * ((35.9 * a * a) + (133.6 * a)))
|
|
#define W_LIST_COST(a,b) (1.11 * 29.2 * a * b)
|
|
#define X_LIST_COST(a,b) (1.15 * 56.0 * a * b)
|
|
#define SELF_COST(a) (7.0 * 61.4 * a * a)
|
|
|
|
/* SWOO: Did I put this here? If so, you don't need it */
|
|
#define CACHE_SIZE 16 /* should be in bytes */
|
|
|
|
#define PAGE_SIZE 4096
|
|
#define PAD_SIZE (PAGE_SIZE / (sizeof(long)))
|
|
|
|
typedef enum { FALSE = 0, TRUE = 1 } bool;
|
|
|
|
/* These defintions sets the precision of the calculations. To use single
|
|
* precision, simply change double to float and recompile! */
|
|
typedef double real;
|
|
|
|
typedef struct __Complex complex;
|
|
struct __Complex {
|
|
real r;
|
|
real i;
|
|
};
|
|
|
|
typedef struct _Vector vector;
|
|
struct _Vector {
|
|
real x;
|
|
real y;
|
|
};
|
|
|
|
typedef struct _Time_Info time_info;
|
|
struct _Time_Info {
|
|
unsigned long construct_time;
|
|
unsigned long list_time;
|
|
unsigned long partition_time;
|
|
unsigned long inter_time;
|
|
unsigned long pass_time;
|
|
unsigned long intra_time;
|
|
unsigned long barrier_time;
|
|
unsigned long other_time;
|
|
unsigned long total_time;
|
|
};
|
|
|
|
extern long Number_Of_Processors;
|
|
extern double Timestep_Dur;
|
|
extern real Softening_Param;
|
|
extern long Expansion_Terms;
|
|
|
|
extern real RoundReal(real val);
|
|
extern void PrintComplexNum(complex *c);
|
|
extern void PrintVector(vector *v);
|
|
extern void LockedPrint(char *format, ...);
|
|
|
|
#endif /* _Defs_H */
|