1 /*
2 * -- High Performance Computing Linpack Benchmark (HPL)
3 * HPL - 2.3 - December 2, 2018
4 * Antoine P. Petitet
5 * University of Tennessee, Knoxville
6 * Innovative Computing Laboratory
7 * (C) Copyright 2000-2008 All Rights Reserved
8 *
9 * -- Copyright notice and Licensing terms:
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 *
15 * 1. Redistributions of source code must retain the above copyright
16 * notice, this list of conditions and the following disclaimer.
17 *
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions, and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 *
22 * 3. All advertising materials mentioning features or use of this
23 * software must display the following acknowledgement:
24 * This product includes software developed at the University of
25 * Tennessee, Knoxville, Innovative Computing Laboratory.
26 *
27 * 4. The name of the University, the name of the Laboratory, or the
28 * names of its contributors may not be used to endorse or promote
29 * products derived from this software without specific written
30 * permission.
31 *
32 * -- Disclaimer:
33 *
34 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
35 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
36 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
37 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY
38 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
39 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
40 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
41 * DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
42 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
43 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
44 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
45 * ---------------------------------------------------------------------
46 */
47 /*
48 * Include files
49 */
50 #include "hpl.h"
51 /*
52 * ---------------------------------------------------------------------
53 * Static variables
54 * ---------------------------------------------------------------------
55 */
56 static int ias[2], ics[2], irand[2];
57
58 #ifdef STDC_HEADERS
HPL_setran(const int OPTION,int * IRAN)59 void HPL_setran
60 (
61 const int OPTION,
62 int * IRAN
63 )
64 #else
65 void HPL_setran
66 ( OPTION, IRAN )
67 const int OPTION;
68 int * IRAN;
69 #endif
70 {
71 /*
72 * Purpose
73 * =======
74 *
75 * HPL_setran initializes the random generator with the encoding of the
76 * first number X(0) in the sequence, and the constants a and c used to
77 * compute the next element in the sequence: X(n+1) = a*X(n) + c. X(0),
78 * a and c are stored in the static variables irand, ias and ics. When
79 * OPTION is 0 (resp. 1 and 2), irand (resp. ia and ic) is set to the
80 * values of the input array IRAN. When OPTION is 3, IRAN is set to the
81 * current value of irand, and irand is then incremented.
82 *
83 * Arguments
84 * =========
85 *
86 * OPTION (local input) const int
87 * On entry, OPTION is an integer that specifies the operations
88 * to be performed on the random generator as specified above.
89 *
90 * IRAN (local input/output) int *
91 * On entry, IRAN is an array of dimension 2, that contains the
92 * 16-lower and 15-higher bits of a random number.
93 *
94 * ---------------------------------------------------------------------
95 */
96 /*
97 * .. Local Variables ..
98 */
99 int j[2];
100 /* ..
101 * .. Executable Statements ..
102 */
103 if( OPTION == 3 )
104 { /* return current value */
105 IRAN[0] = irand[0]; IRAN[1] = irand[1];
106 HPL_lmul( irand, ias, j ); /* j = irand * ias; */
107 HPL_ladd( j, ics, irand ); /* irand = j + ics; */
108 }
109 else if( OPTION == 0 ) { irand[0] = IRAN[0]; irand[1] = IRAN[1]; }
110 else if( OPTION == 1 ) { ias [0] = IRAN[0]; ias [1] = IRAN[1]; }
111 else if( OPTION == 2 ) { ics [0] = IRAN[0]; ics [1] = IRAN[1]; }
112 /*
113 * End of HPL_setran
114 */
115 }
116