229 lines
5.2 KiB
C++
229 lines
5.2 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. */
|
||
|
/* */
|
||
|
/*************************************************************************/
|
||
|
|
||
|
#define MASTER 0
|
||
|
#define RED_ITER 0
|
||
|
#define BLACK_ITER 1
|
||
|
#define UP 0
|
||
|
#define DOWN 1
|
||
|
#define LEFT 2
|
||
|
#define RIGHT 3
|
||
|
#define UPLEFT 4
|
||
|
#define UPRIGHT 5
|
||
|
#define DOWNLEFT 6
|
||
|
#define DOWNRIGHT 7
|
||
|
#define PAGE_SIZE 4096
|
||
|
|
||
|
struct multi_struct {
|
||
|
double err_multi;
|
||
|
};
|
||
|
|
||
|
extern struct multi_struct *multi;
|
||
|
|
||
|
struct global_struct {
|
||
|
long id;
|
||
|
long starttime;
|
||
|
long trackstart;
|
||
|
double psiai;
|
||
|
double psibi;
|
||
|
};
|
||
|
|
||
|
extern struct global_struct *global;
|
||
|
|
||
|
extern double eig2;
|
||
|
extern double ysca;
|
||
|
extern long jmm1;
|
||
|
extern double pi;
|
||
|
extern double t0;
|
||
|
|
||
|
extern double ****psi;
|
||
|
extern double ****psim;
|
||
|
extern double ***psium;
|
||
|
extern double ***psilm;
|
||
|
extern double ***psib;
|
||
|
extern double ***ga;
|
||
|
extern double ***gb;
|
||
|
extern double ****work1;
|
||
|
extern double ***work2;
|
||
|
extern double ***work3;
|
||
|
extern double ****work4;
|
||
|
extern double ****work5;
|
||
|
extern double ***work6;
|
||
|
extern double ****work7;
|
||
|
extern double ****temparray;
|
||
|
extern double ***tauz;
|
||
|
extern double ***oldga;
|
||
|
extern double ***oldgb;
|
||
|
extern double *f;
|
||
|
extern double ****q_multi;
|
||
|
extern double ****rhs_multi;
|
||
|
|
||
|
struct locks_struct {
|
||
|
LOCKDEC(idlock)
|
||
|
LOCKDEC(psiailock)
|
||
|
LOCKDEC(psibilock)
|
||
|
LOCKDEC(donelock)
|
||
|
LOCKDEC(error_lock)
|
||
|
LOCKDEC(bar_lock)
|
||
|
};
|
||
|
|
||
|
extern struct locks_struct *locks;
|
||
|
|
||
|
struct bars_struct {
|
||
|
#if defined(MULTIPLE_BARRIERS)
|
||
|
BARDEC(iteration)
|
||
|
BARDEC(gsudn)
|
||
|
BARDEC(p_setup)
|
||
|
BARDEC(p_redph)
|
||
|
BARDEC(p_soln)
|
||
|
BARDEC(p_subph)
|
||
|
BARDEC(sl_prini)
|
||
|
BARDEC(sl_psini)
|
||
|
BARDEC(sl_onetime)
|
||
|
BARDEC(sl_phase_1)
|
||
|
BARDEC(sl_phase_2)
|
||
|
BARDEC(sl_phase_3)
|
||
|
BARDEC(sl_phase_4)
|
||
|
BARDEC(sl_phase_5)
|
||
|
BARDEC(sl_phase_6)
|
||
|
BARDEC(sl_phase_7)
|
||
|
BARDEC(sl_phase_8)
|
||
|
BARDEC(sl_phase_9)
|
||
|
BARDEC(sl_phase_10)
|
||
|
BARDEC(error_barrier)
|
||
|
#else
|
||
|
BARDEC(barrier)
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
extern struct bars_struct *bars;
|
||
|
|
||
|
extern double factjacob;
|
||
|
extern double factlap;
|
||
|
|
||
|
struct Global_Private {
|
||
|
char pad[PAGE_SIZE];
|
||
|
long *rel_num_x;
|
||
|
long *rel_num_y;
|
||
|
long *eist;
|
||
|
long *ejst;
|
||
|
long *oist;
|
||
|
long *ojst;
|
||
|
long *rlist;
|
||
|
long *rljst;
|
||
|
long *rlien;
|
||
|
long *rljen;
|
||
|
long rownum;
|
||
|
long colnum;
|
||
|
long neighbors[8];
|
||
|
double multi_time;
|
||
|
double total_time;
|
||
|
};
|
||
|
|
||
|
extern struct Global_Private *gp;
|
||
|
|
||
|
extern double *i_int_coeff;
|
||
|
extern double *j_int_coeff;
|
||
|
extern long xprocs;
|
||
|
extern long yprocs;
|
||
|
|
||
|
extern long numlev;
|
||
|
extern long *imx;
|
||
|
extern long *jmx;
|
||
|
extern double *lev_res;
|
||
|
extern double *lev_tol;
|
||
|
extern double maxwork;
|
||
|
extern long *xpts_per_proc;
|
||
|
extern long *ypts_per_proc;
|
||
|
extern long minlevel;
|
||
|
extern double outday0;
|
||
|
extern double outday1;
|
||
|
extern double outday2;
|
||
|
extern double outday3;
|
||
|
|
||
|
extern long nprocs;
|
||
|
extern double h1;
|
||
|
extern double h3;
|
||
|
extern double h;
|
||
|
extern double lf;
|
||
|
extern double res;
|
||
|
extern double dtau;
|
||
|
extern double f0;
|
||
|
extern double beta;
|
||
|
extern double gpr;
|
||
|
extern long im;
|
||
|
extern long jm;
|
||
|
extern long do_stats;
|
||
|
extern long do_output;
|
||
|
extern long *multi_times;
|
||
|
extern long *total_times;
|
||
|
|
||
|
/*
|
||
|
* jacobcalc.C
|
||
|
*/
|
||
|
void jacobcalc(double ***x, double ***y, double ***z, long pid, long firstrow, long lastrow, long firstcol, long lastcol);
|
||
|
|
||
|
/*
|
||
|
* jacobcalc2.C
|
||
|
*/
|
||
|
void jacobcalc2(double ****x, double ****y, double ****z, long psiindex, long pid, long firstrow, long lastrow, long firstcol, long lastcol);
|
||
|
|
||
|
/*
|
||
|
* laplacalc.C
|
||
|
*/
|
||
|
void laplacalc(long procid, double ****x, double ****z, long psiindex, long firstrow, long lastrow, long firstcol, long lastcol);
|
||
|
|
||
|
/*
|
||
|
* linkup.C
|
||
|
*/
|
||
|
void link_all(void);
|
||
|
void linkup(double **row_ptr);
|
||
|
void link_multi(void);
|
||
|
|
||
|
/*
|
||
|
* main.C
|
||
|
*/
|
||
|
long log_2(long number);
|
||
|
void printerr(char *s);
|
||
|
|
||
|
/*
|
||
|
* multi.C
|
||
|
*/
|
||
|
void multig(long my_id);
|
||
|
void relax(long k, double *err, long color, long my_num);
|
||
|
void rescal(long kf, long my_num);
|
||
|
void intadd(long kc, long my_num);
|
||
|
void putz(long k, long my_num);
|
||
|
void copy_borders(long k, long pid);
|
||
|
void copy_rhs_borders(long k, long procid);
|
||
|
void copy_red(long k, long procid);
|
||
|
void copy_black(long k, long procid);
|
||
|
|
||
|
/*
|
||
|
* slave1.C
|
||
|
*/
|
||
|
void slave(void);
|
||
|
|
||
|
/*
|
||
|
* slave2.C
|
||
|
*/
|
||
|
void slave2(long procid, long firstrow, long lastrow, long numrows, long firstcol, long lastcol, long numcols);
|
||
|
|
||
|
/*
|
||
|
* subblock.C
|
||
|
*/
|
||
|
void subblock(void);
|