Bug #1437: CkLoop worker traces to previous entry on pe rather than
[charm.git] / examples / charm++ / barnes-charm / barnes / util.C
blobcfca29b27951f96c353cbf8f71559e0a8d511c3e
1 /*************************************************************************/
2 /*                                                                       */
3 /*  Copyright (c) 1994 Stanford University                               */
4 /*                                                                       */
5 /*  All rights reserved.                                                 */
6 /*                                                                       */
7 /*  Permission is given to use, copy, and modify this software for any   */
8 /*  non-commercial purpose as long as this copyright notice is not       */
9 /*  removed.  All other uses, including redistribution in whole or in    */
10 /*  part, are forbidden without prior written permission.                */
11 /*                                                                       */
12 /*  This software is provided with absolutely no warranty and no         */
13 /*  support.                                                             */
14 /*                                                                       */
15 /*************************************************************************/
17 #include <stdio.h>
18 #include "stdinc.h"
20 #define HZ 60.0
21 #define MULT 1103515245
22 #define ADD 12345
23 #define MASK (0x7FFFFFFF)
24 #define TWOTO31 2147483648.0
26 local int A = 1;
27 local int B = 0;
28 local int randx = 1;
29 local int lastrand;   /* the last random number */
32  * XRAND: generate floating-point random number.
33  */
35 double prand();
37 double xrand(xl, xh)
38   double xl, xh;                /* lower, upper bounds on number */
40    long random ();
41    double x;
43    return (xl + (xh - xl) * prand());
46 void pranset(int seed)
48    int proc;
49   
50    A = 1;
51    B = 0;
52    randx = (A*seed+B) & MASK;
53    A = (MULT * A) & MASK;
54    B = (MULT*B + ADD) & MASK;
57 double 
58 prand()
60         Return a random double in [0, 1.0)
63    lastrand = randx;
64    randx = (A*randx+B) & MASK;
65    return((double)lastrand/TWOTO31);
69  * CPUTIME: compute CPU time in min.
70  */
72 #include <sys/types.h>
73 #include <sys/times.h>
76 double cputime()
78    struct tms buffer;
80    if (times(&buffer) == -1)
81       error("times() call failed\n");
82    return (buffer.tms_utime / (60.0 * HZ));
86  * ERROR: scream and die quickly.
87  */
89 error(msg, a1, a2, a3, a4)
90   char *msg, *a1, *a2, *a3, *a4;
92    extern int errno;
94    fprintf(stderr, msg, a1, a2, a3, a4);
95    if (errno != 0)
96       perror("Error");
97    exit(0);