⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 livermore.c

📁 开放源码的编译器open watcom 1.6.0版的源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* Livermore Loops coded in C        Latest File Modification  20 Oct 92,
 *  by Tim Peters, Kendall Square Res. Corp. tim@ksr.com, ksr!tim@uunet.uu.net
 *     SUBROUTINE KERNEL( TK)  replaces the Fortran routine in LFK Test program.
 ************************************************************************
 *                                                                      *
 *            KERNEL     executes 24 samples of "C" computation         *
 *                                                                      *
 *                TK(1) - total cpu time to execute only the 24 kernels.*
 *                TK(2) - total Flops executed by the 24 Kernels        *
 *                                                                      *
 ************************************************************************
 *                                                                      *
 *     L. L. N. L.   " C "   K E R N E L S:   M F L O P S               *
 *                                                                      *
 *     These kernels measure   " C "   numerical computation            *
 *     rates for  a  spectrum  of  cpu-limited computational            *
 *     structures or benchmarks.   Mathematical  through-put            *
 *     is measured  in  units  of millions of floating-point            *
 *     operations executed per second, called Megaflops/sec.            *
 *                                                                      *
 *     Fonzi's Law: There is not now and there never will be a language *
 *                  in which it is the least bit difficult to write     *
 *                  bad programs.                                       *
 *                                                    F.H.MCMAHON  1972 *
 ************************************************************************
 *Originally from  Greg Astfalk, AT&T, P.O.Box 900, Princeton, NJ. 08540*
 *               by way of Frank McMahon (LLNL).                        *
 *                                                                      *
 *                               REFERENCE                              *
 *                                                                      *
 *              F.H.McMahon,   The Livermore Fortran Kernels:           *
 *              A Computer Test Of The Numerical Performance Range,     *
 *              Lawrence Livermore National Laboratory,                 *
 *              Livermore, California, UCRL-53745, December 1986.       *
 *                                                                      *
 *       from:  National Technical Information Service                  *
 *              U.S. Department of Commerce                             *
 *              5285 Port Royal Road                                    *
 *              Springfield, VA.  22161                                 *
 *                                                                      *
 *    Changes made to correct many array subscripting problems,         *
 *      make more readable (added #define's), include the original      *
 *      FORTRAN versions of the runs as comments, and make more         *
 *      portable by Kelly O'Hair (LLNL) and Chuck Rasbold (LLNL).       *
 *                                                                      *
 ************************************************************************
 */

#include <stdio.h>
#include <math.h>

/* Type-specifiers for function declarations */
#ifdef CRAY
#define CALLED_FROM_FORTRAN fortran
#define FORTRAN_FUNCTION    fortran
#else
#define CALLED_FROM_FORTRAN
#define FORTRAN_FUNCTION    extern
#endif

/* These are the names to be used for the functions */
#ifdef CRAY
#define KERNEL kernel
#define TRACE  trace
#define SPACE  space
#define TEST   test
#define TRACK  track
#else
#define KERNEL kernel_
#define TRACE  trace_
#define SPACE  space_
#define TEST   test_
#define TRACK  track_
#endif

/* Type-specifiers for the structs that map to common */
#ifdef CRAY
#define COMMON_BLOCK fortran
#else
#define COMMON_BLOCK extern
#endif

/* Names of structs (or common blocks) */
#ifdef CRAY
#define ALPHA  alpha
#define BETA   beta
#define SPACES spaces
#define SPACER spacer
#define SPACE0 space0
#define SPACEI spacei
#define ISPACE ispace
#define SPACE1 space1
#define SPACE2 space2
#else
#define ALPHA  alpha_
#define BETA   beta_
#define SPACES spaces_
#define SPACER spacer_
#define SPACE0 space0_
#define SPACEI spacei_
#define ISPACE ispace_
#define SPACE1 space1_
#define SPACE2 space2_
#endif

/* Declare the four fortran functions called */
FORTRAN_FUNCTION TRACE();
FORTRAN_FUNCTION SPACE();
FORTRAN_FUNCTION TEST();
FORTRAN_FUNCTION TRACK();

/* Define the structs or COMMON BLOCKS */

COMMON_BLOCK struct {
    long Mk;
    long Ik;
    long Im;
    long Ml;
    long Il;
    long Mruns;
    long Nruns;
    long Jr;
    long Npfs[47][3][8];
} ALPHA ;
#define mk     ALPHA.Mk
#define ik     ALPHA.Ik
#define im     ALPHA.Im
#define ml     ALPHA.Ml
#define il     ALPHA.Il
#define mruns  ALPHA.Mruns;
#define nruns  ALPHA.Nruns;
#define jr     ALPHA.Jr
#define npfs   ALPHA.Npfs

COMMON_BLOCK struct {
    double Tic;
    double Times[47][3][8];
    double See[3][8][3][5];
    double Terrs[47][3][8];
    double Csums[47][3][8];
    double Fopn[47][3][8];
    double Dos[47][3][8];
} BETA ;
#define tic     BETA.Tic
#define times   BETA.Times
#define see     BETA.See
#define terrs   BETA.Terrs
#define csums   BETA.Csums
#define fopn    BETA.Fopn
#define dos     BETA.Dos

COMMON_BLOCK struct {
    long Ion;
    long J5;
    long K2;
    long K3;
    long MULTI;
    long Laps;
    long Loop;
    long M;
    long Kr;
    long It;
    long N13h;
    long Ibuf;
    long Npass;
    long Nfail;
    long N;
    long N1;
    long N2;
    long N13;
    long N213;
    long N813;
    long N14;
    long N16;
    long N416;
    long N21;
    long Nt1;
    long Nt2;
} SPACES ;
#define  ion    SPACES.Ion
#define  j5     SPACES.J5
#define  k2     SPACES.K2
#define  k3     SPACES.K3
#define  multi  SPACES.MULTI
#define  laps   SPACES.Laps
#define  loop   SPACES.Loop
#define  m      SPACES.M
#define  kr     SPACES.Kr
#define  it     SPACES.It
#define  n13h   SPACES.N13h
#define  ibuf   SPACES.Ibuf
#define  npass  SPACES.Npass
#define  nfail  SPACES.Nfail
#define  n      SPACES.N
#define  n1     SPACES.N1
#define  n2     SPACES.N2
#define  n13    SPACES.N13
#define  n213   SPACES.N213
#define  n813   SPACES.N813
#define  n14    SPACES.N14
#define  n16    SPACES.N16
#define  n416   SPACES.N416
#define  n21    SPACES.N21
#define  nt1    SPACES.Nt1
#define  nt2    SPACES.Nt2

COMMON_BLOCK struct {
    double A11;
    double A12;
    double A13;
    double A21;
    double A22;
    double A23;
    double A31;
    double A32;
    double A33;
    double Ar;
    double Br;
    double C0;
    double Cr;
    double Di;
    double Dk;
    double Dm22;
    double Dm23;
    double Dm24;
    double Dm25;
    double Dm26;
    double Dm27;
    double Dm28;
    double Dn;
    double E3;
    double E6;
    double Expmax;
    double Flx;
    double Q;
    double Qa;
    double R;
    double Ri;
    double S;
    double Scale;
    double Sig;
    double Stb5;
    double T;
    double Xnc;
    double Xnei;
    double Xnm;
} SPACER ;
#define  a11     SPACER.A11
#define  a12     SPACER.A12
#define  a13     SPACER.A13
#define  a21     SPACER.A21
#define  a22     SPACER.A22
#define  a23     SPACER.A23
#define  a31     SPACER.A31
#define  a32     SPACER.A32
#define  a33     SPACER.A33
#define  ar      SPACER.Ar
#define  br      SPACER.Br
#define  c0      SPACER.C0
#define  cr      SPACER.Cr
#define  di      SPACER.Di
#define  dk      SPACER.Dk
#define  dm22    SPACER.Dm22
#define  dm23    SPACER.Dm23
#define  dm24    SPACER.Dm24
#define  dm25    SPACER.Dm25
#define  dm26    SPACER.Dm26
#define  dm27    SPACER.Dm27
#define  dm28    SPACER.Dm28
#define  dn      SPACER.Dn
#define  e3      SPACER.E3
#define  e6      SPACER.E6
#define  expmax  SPACER.Expmax
#define  flx     SPACER.Flx
#define  q       SPACER.Q
#define  qa      SPACER.Qa
#define  r       SPACER.R
#define  ri      SPACER.Ri
#define  s       SPACER.S
#define  scale   SPACER.Scale
#define  sig     SPACER.Sig
#define  stb5    SPACER.Stb5
#define  t       SPACER.T
#define  xnc     SPACER.Xnc
#define  xnei    SPACER.Xnei
#define  xnm     SPACER.Xnm

COMMON_BLOCK struct {
    double Time[47];
    double Csum[47];
    double Ww[47];
    double Wt[47];
    double Ticks;
    double Fr[9];
    double Terr1[47];
    double Sumw[7];
    double Start;
    double Skale[47];
    double Bias[47];
    double Ws[95];
    double Total[47];
    double Flopn[47];
    long Iq[7];
    long Npf;
    long Npfs1[47];
} SPACE0 ;
#define  time    SPACE0.Time
#define  csum    SPACE0.Csum
#define  ww      SPACE0.Ww
#define  wt      SPACE0.Wt
#define  ticks   SPACE0.Ticks
#define  fr      SPACE0.Fr
#define  terr1   SPACE0.Terr1
#define  sumw    SPACE0.Sumw
#define  start   SPACE0.Start
#define  skale   SPACE0.Skale
#define  bias    SPACE0.Bias
#define  ws      SPACE0.Ws
#define  total   SPACE0.Total
#define  flopn   SPACE0.Flopn
#define  iq      SPACE0.Iq
#define  npf     SPACE0.Npf
#define  npfs1   SPACE0.Npfs1

COMMON_BLOCK struct {
    double Wtp[3];
    long Mult[3];
    long Ispan[3][47];
    long Ipass[3][47];
} SPACEI ;
#define wtp    SPACEI.Wtp
#define mult   SPACEI.Mult
#define ispan  SPACEI.Ispan
#define ipass  SPACEI.Ipass

COMMON_BLOCK struct {
    long E[96];
    long F[96];
    long Ix[1001];
    long Ir[1001];
    long Zone[300];
} ISPACE ;
#define e    ISPACE.E
#define f    ISPACE.F
#define ix   ISPACE.Ix
#define ir   ISPACE.Ir
#define zone ISPACE.Zone

COMMON_BLOCK struct {
    double U[1001];
    double V[1001];
    double W[1001];
    double X[1001];
    double Y[1001];
    double Z[1001];
    double G[1001];
    double Du1[101];
    double Du2[101];
    double Du3[101];
    double Grd[1001];
    double Dex[1001];
    double Xi[1001];
    double Ex[1001];
    double Ex1[1001];
    double Dex1[1001];
    double Vx[1001];
    double Xx[1001];
    double Rx[1001];
    double Rh[2048];
    double Vsp[101];
    double Vstp[101];
    double Vxne[101];
    double Vxnd[101];
    double Ve3[101];
    double Vlr[101];
    double Vlin[101];
    double B5[101];
    double Plan[300];
    double D[300];
    double Sa[101];
    double Sb[101];
} SPACE1 ;
#define  u    SPACE1.U
#define  v    SPACE1.V
#define  w    SPACE1.W
#define  x    SPACE1.X
#define  y    SPACE1.Y
#define  z    SPACE1.Z
#define  g    SPACE1.G
#define  du1  SPACE1.Du1
#define  du2  SPACE1.Du2
#define  du3  SPACE1.Du3
#define  grd  SPACE1.Grd
#define  dex  SPACE1.Dex
#define  xi   SPACE1.Xi
#define  ex   SPACE1.Ex
#define  ex1  SPACE1.Ex1
#define  dex1 SPACE1.Dex1
#define  vx   SPACE1.Vx
#define  xx   SPACE1.Xx
#define  rx   SPACE1.Rx
#define  rh   SPACE1.Rh
#define  vsp  SPACE1.Vsp
#define  vstp SPACE1.Vstp
#define  vxne SPACE1.Vxne
#define  vxnd SPACE1.Vxnd
#define  ve3  SPACE1.Ve3
#define  vlr  SPACE1.Vlr
#define  vlin SPACE1.Vlin
#define  b5   SPACE1.B5
#define  plan SPACE1.Plan
#define  d    SPACE1.D
#define  sa   SPACE1.Sa
#define  sb   SPACE1.Sb

COMMON_BLOCK struct {
    double P[512][4];
    double Px[101][25];
    double Cx[101][25];
    double Vy[25][101];
    double Vh[7][101];
    double Vf[7][101];
    double Vg[7][101];
    double Vs[7][101];
    double Za[7][101];
    double Zp[7][101];
    double Zq[7][101];
    double Zr[7][101];
    double Zm[7][101];
    double Zb[7][101];
    double Zu[7][101];
    double Zv[7][101];
    double Zz[7][101];
    double B[64][64];
    double C[64][64];
    double H[64][64];
    double U1[2][101][5];
    double U2[2][101][5];
    double U3[2][101][5];
} SPACE2 ;
#define  p       SPACE2.P
#define  px      SPACE2.Px
#define  cx      SPACE2.Cx
#define  vy      SPACE2.Vy
#define  vh      SPACE2.Vh
#define  vf      SPACE2.Vf
#define  vg      SPACE2.Vg
#define  vs      SPACE2.Vs
#define  za      SPACE2.Za
#define  zp      SPACE2.Zp
#define  zq      SPACE2.Zq
#define  zr      SPACE2.Zr
#define  zm      SPACE2.Zm
#define  zb      SPACE2.Zb
#define  zu      SPACE2.Zu
#define  zv      SPACE2.Zv
#define  zz      SPACE2.Zz
#define  b       SPACE2.B
#define  c       SPACE2.C
#define  h       SPACE2.H
#define  u1      SPACE2.U1
#define  u2      SPACE2.U2
#define  u3      SPACE2.U3

/* KERNEL routine */

CALLED_FROM_FORTRAN KERNEL( TK )
double TK[6];
{

#pragma nodyneqv
#pragma o=i

    long argument , k , l , ipnt , ipntp , i;
    long lw , j , nl1 , nl2 , kx , ky , ip , kn;
    long i1 , j1 , i2 , j2 , nz , ink , jn , kb5i;
    long ii , lb , j4 , ng;
    double tmp , temp, sum, som;
    char name[8];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -