2 USE yeplibrary
, ONLY: yeplibrary_init, yeplibrary_release, yeplibrary_gettimerfrequency, yeplibrary_gettimerticks
3 USE yepmath
, ONLY: yepmath_evaluatepolynomial_v64fv64f_v64f
4 USE iso_c_binding
, ONLY : c_size_t, c_int
7 INTEGER(C_SIZE_T),
PARAMETER :: n = 1024*1024*8
8 INTEGER(C_SIZE_T),
PARAMETER :: coefcount = 101
9 INTEGER(8) :: ticksstart, ticksend, frequency
10 REAL(8) :: seconds, flops
11 REAL(8) :: x(n), pyeppp(n) = 0.0d0, pnaive(n) = 0.0d0
14 REAL(8),
PARAMETER :: c0 = 1.53270461724076346
15 REAL(8),
PARAMETER :: c1 = 1.45339856462100293
16 REAL(8),
PARAMETER :: c2 = 1.21078763026010761
17 REAL(8),
PARAMETER :: c3 = 1.46952786401453397
18 REAL(8),
PARAMETER :: c4 = 1.34249847863665017
19 REAL(8),
PARAMETER :: c5 = 0.75093174077762164
20 REAL(8),
PARAMETER :: c6 = 1.90239336671587562
21 REAL(8),
PARAMETER :: c7 = 1.62162053962810579
22 REAL(8),
PARAMETER :: c8 = 0.53312230473555923
23 REAL(8),
PARAMETER :: c9 = 1.76588453111778762
24 REAL(8),
PARAMETER :: c10 = 1.31215699612484679
25 REAL(8),
PARAMETER :: c11 = 1.49636144227257237
26 REAL(8),
PARAMETER :: c12 = 1.52170011054112963
27 REAL(8),
PARAMETER :: c13 = 0.83637497322280110
28 REAL(8),
PARAMETER :: c14 = 1.12764540941736043
29 REAL(8),
PARAMETER :: c15 = 0.65513628703807597
30 REAL(8),
PARAMETER :: c16 = 1.15879020877781906
31 REAL(8),
PARAMETER :: c17 = 1.98262901973751791
32 REAL(8),
PARAMETER :: c18 = 1.09134643523639479
33 REAL(8),
PARAMETER :: c19 = 1.92898634047221235
34 REAL(8),
PARAMETER :: c20 = 1.01233347751449659
35 REAL(8),
PARAMETER :: c21 = 1.89462732589369078
36 REAL(8),
PARAMETER :: c22 = 1.28216239080886344
37 REAL(8),
PARAMETER :: c23 = 1.78448898277094016
38 REAL(8),
PARAMETER :: c24 = 1.22382217182612910
39 REAL(8),
PARAMETER :: c25 = 1.23434674193555734
40 REAL(8),
PARAMETER :: c26 = 1.13914782832335501
41 REAL(8),
PARAMETER :: c27 = 0.73506235075797319
42 REAL(8),
PARAMETER :: c28 = 0.55461432517332724
43 REAL(8),
PARAMETER :: c29 = 1.51704871121967963
44 REAL(8),
PARAMETER :: c30 = 1.22430234239661516
45 REAL(8),
PARAMETER :: c31 = 1.55001237689160722
46 REAL(8),
PARAMETER :: c32 = 0.84197209952298114
47 REAL(8),
PARAMETER :: c33 = 1.59396169927319749
48 REAL(8),
PARAMETER :: c34 = 0.97067044414760438
49 REAL(8),
PARAMETER :: c35 = 0.99001960195021281
50 REAL(8),
PARAMETER :: c36 = 1.17887814292622884
51 REAL(8),
PARAMETER :: c37 = 0.58955609453835851
52 REAL(8),
PARAMETER :: c38 = 0.58145654861350322
53 REAL(8),
PARAMETER :: c39 = 1.32447212043555583
54 REAL(8),
PARAMETER :: c40 = 1.24673632882394241
55 REAL(8),
PARAMETER :: c41 = 1.24571828921765111
56 REAL(8),
PARAMETER :: c42 = 1.21901343493503215
57 REAL(8),
PARAMETER :: c43 = 1.89453941213996638
58 REAL(8),
PARAMETER :: c44 = 1.85561626872427416
59 REAL(8),
PARAMETER :: c45 = 1.13302165522004133
60 REAL(8),
PARAMETER :: c46 = 1.79145993815510725
61 REAL(8),
PARAMETER :: c47 = 1.59227069037095317
62 REAL(8),
PARAMETER :: c48 = 1.89104468672467114
63 REAL(8),
PARAMETER :: c49 = 1.78733894997070918
64 REAL(8),
PARAMETER :: c50 = 1.32648559107345081
65 REAL(8),
PARAMETER :: c51 = 1.68531055586072865
66 REAL(8),
PARAMETER :: c52 = 1.08980909640581993
67 REAL(8),
PARAMETER :: c53 = 1.34308207822154847
68 REAL(8),
PARAMETER :: c54 = 1.81689492849547059
69 REAL(8),
PARAMETER :: c55 = 1.38582137073988747
70 REAL(8),
PARAMETER :: c56 = 1.04974901183570510
71 REAL(8),
PARAMETER :: c57 = 1.14348742300966456
72 REAL(8),
PARAMETER :: c58 = 1.87597730040483323
73 REAL(8),
PARAMETER :: c59 = 0.62131555899466420
74 REAL(8),
PARAMETER :: c60 = 0.64710935668225787
75 REAL(8),
PARAMETER :: c61 = 1.49846610600978751
76 REAL(8),
PARAMETER :: c62 = 1.07834176789680957
77 REAL(8),
PARAMETER :: c63 = 1.69130785175832059
78 REAL(8),
PARAMETER :: c64 = 1.64547687732258793
79 REAL(8),
PARAMETER :: c65 = 1.02441150427208083
80 REAL(8),
PARAMETER :: c66 = 1.86129006037146541
81 REAL(8),
PARAMETER :: c67 = 0.98309038830424073
82 REAL(8),
PARAMETER :: c68 = 1.75444578237500969
83 REAL(8),
PARAMETER :: c69 = 1.08698336765112349
84 REAL(8),
PARAMETER :: c70 = 1.89455010772036759
85 REAL(8),
PARAMETER :: c71 = 0.65812118412299539
86 REAL(8),
PARAMETER :: c72 = 0.62102711487851459
87 REAL(8),
PARAMETER :: c73 = 1.69991208083436747
88 REAL(8),
PARAMETER :: c74 = 1.65467704495635767
89 REAL(8),
PARAMETER :: c75 = 1.69599459626992174
90 REAL(8),
PARAMETER :: c76 = 0.82365682103308750
91 REAL(8),
PARAMETER :: c77 = 1.71353437063595036
92 REAL(8),
PARAMETER :: c78 = 0.54992984722831769
93 REAL(8),
PARAMETER :: c79 = 0.54717367088443119
94 REAL(8),
PARAMETER :: c80 = 0.79915543248858154
95 REAL(8),
PARAMETER :: c81 = 1.70160318364006257
96 REAL(8),
PARAMETER :: c82 = 1.34441280175456970
97 REAL(8),
PARAMETER :: c83 = 0.79789486341474966
98 REAL(8),
PARAMETER :: c84 = 0.61517383020710754
99 REAL(8),
PARAMETER :: c85 = 0.55177400048576055
100 REAL(8),
PARAMETER :: c86 = 1.43229889543908696
101 REAL(8),
PARAMETER :: c87 = 1.60658663666266949
102 REAL(8),
PARAMETER :: c88 = 1.78861146369896090
103 REAL(8),
PARAMETER :: c89 = 1.05843250742401821
104 REAL(8),
PARAMETER :: c90 = 1.58481799048208832
105 REAL(8),
PARAMETER :: c91 = 1.70954313374718085
106 REAL(8),
PARAMETER :: c92 = 0.52590070195022226
107 REAL(8),
PARAMETER :: c93 = 0.92705074709607885
108 REAL(8),
PARAMETER :: c94 = 0.71442651832362455
109 REAL(8),
PARAMETER :: c95 = 1.14752795948077643
110 REAL(8),
PARAMETER :: c96 = 0.89860175106926404
111 REAL(8),
PARAMETER :: c97 = 0.76771198245570573
112 REAL(8),
PARAMETER :: c98 = 0.67059202034800746
113 REAL(8),
PARAMETER :: c99 = 0.53785922275590729
114 REAL(8),
PARAMETER :: c100 = 0.82098327929734880
115 REAL(8),
DIMENSION (coefCount) :: coefs = (/ c0, &
116 c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, &
117 c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, &
118 c21, c22, c23, c24, c25, c26, c27, c28, c29, c30, &
119 c31, c32, c33, c34, c35, c36, c37, c38, c39, c40, &
120 c41, c42, c43, c44, c45, c46, c47, c48, c49, c50, &
121 c51, c52, c53, c54, c55, c56, c57, c58, c59, c60, &
122 c61, c62, c63, c64, c65, c66, c67, c68, c69, c70, &
123 c71, c72, c73, c74, c75, c76, c77, c78, c79, c80, &
124 c81, c82, c83, c84, c85, c86, c87, c88, c89, c90, &
125 c91, c92, c93, c94, c95, c96, c97, c98, c99, c100 /)
127 s = yeplibrary_init()
128 s = yeplibrary_gettimerfrequency(frequency)
129 CALL random_number(x)
133 s = yeplibrary_gettimerticks(ticksstart)
136 pnaive = c0 + x * (c1 + x * (c2 + x * (c3 + x * (c4 + x * (c5 + x * (c6 + &
137 x * (c7 + x * (c8 + x * (c9 + x * (c10 + x * (c11 + x * (c12 + &
138 x * (c13 + x * (c14 + x * (c15 + x * (c16 + x * (c17 + x * (c18 + &
139 x * (c19 + x * (c20 + x * (c21 + x * (c22 + x * (c23 + x * (c24 + &
140 x * (c25 + x * (c26 + x * (c27 + x * (c28 + x * (c29 + x * (c30 + &
141 x * (c31 + x * (c32 + x * (c33 + x * (c34 + x * (c35 + x * (c36 + &
142 x * (c37 + x * (c38 + x * (c39 + x * (c40 + x * (c41 + x * (c42 + &
143 x * (c43 + x * (c44 + x * (c45 + x * (c46 + x * (c47 + x * (c48 + &
144 x * (c49 + x * (c50 + x * (c51 + x * (c52 + x * (c53 + x * (c54 + &
145 x * (c55 + x * (c56 + x * (c57 + x * (c58 + x * (c59 + x * (c60 + &
146 x * (c61 + x * (c62 + x * (c63 + x * (c64 + x * (c65 + x * (c66 + &
147 x * (c67 + x * (c68 + x * (c69 + x * (c70 + x * (c71 + x * (c72 + &
148 x * (c73 + x * (c74 + x * (c75 + x * (c76 + x * (c77 + x * (c78 + &
149 x * (c79 + x * (c80 + x * (c81 + x * (c82 + x * (c83 + x * (c84 + &
150 x * (c85 + x * (c86 + x * (c87 + x * (c88 + x * (c89 + x * (c90 + &
151 x * (c91 + x * (c92 + x * (c93 + x * (c94 + x * (c95 + x * (c96 + &
152 x * (c97 + x * (c98 + x * (c99 + x * c100)))))))))))))))))))))))))))) &
153 )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
155 s = yeplibrary_gettimerticks(ticksend)
156 seconds =
REAL(ticksEnd - ticksStart) /
REAL(frequency)
157 flops =
REAL(n, 8) *
REAL((coefCount - 1) * 2, 8) / seconds;
159 print
'(A20,F7.4, A)',
"Time = ", seconds,
" secs"
160 print
'(A20,F7.4, A)',
"Performance = ", flops * 1.0e-9,
" GFLOPS"
162 s = yeplibrary_gettimerticks(ticksstart)
164 s = yepmath_evaluatepolynomial_v64fv64f_v64f(coefs, x, pyeppp, coefcount, n)
165 s = yeplibrary_gettimerticks(ticksend)
166 seconds =
REAL(ticksEnd - ticksStart) /
REAL(frequency)
167 flops =
REAL(n, 8) *
REAL((coefCount - 1) * 2, 8) / seconds;
168 print
'(A)',
'Yeppp!'
169 print
'(A20,F7.4, A)',
"Time = ", seconds,
" secs"
170 print
'(A20,F7.4, A)',
"Performance = ", flops * 1.0e-9,
" GFLOPS"
172 print
'(A,F7.3, A)',
"Max relative error = ", maxval(abs((pnaive - pyeppp) / pnaive)) * 100,
"%"
174 s = yeplibrary_release()