3
3
4
4
#include <math.h>
5
5
6
- #define FNAME FFF_FNAME
7
6
8
7
/* TODO : add tests for dimension compatibility */
9
8
19
18
#define SWAP_SIDE (Side ) ( (Side)==(CblasRight) ? "L" : "R" )
20
19
21
20
21
+ /* Global array of external function pointers */
22
+ void * fff_blas_func [25 ];
23
+
24
+ /* Import function */
25
+ void fff_import_blas_func (void * func_ptr , int k )
26
+ {
27
+ fff_blas_func [k ] = func_ptr ;
28
+ return ;
29
+ }
30
+
22
31
23
32
/****** BLAS 1 ******/
24
33
@@ -30,7 +39,7 @@ double fff_blas_ddot (const fff_vector * x, const fff_vector * y)
30
39
int incy = (int ) y -> stride ;
31
40
double (* ddot )(int * n , double * dx , int * incx , double * dy , int * incy );
32
41
33
- ddot = FFF_EXTERNAL_FUNC [FFF_BLAS_DDOT ];
42
+ ddot = fff_blas_func [FFF_BLAS_DDOT ];
34
43
35
44
if ( n != y -> size )
36
45
return 1 ;
@@ -45,7 +54,7 @@ double fff_blas_dnrm2 (const fff_vector * x)
45
54
int incx = (int ) x -> stride ;
46
55
double (* dnrm2 )(int * n , double * x , int * incx );
47
56
48
- dnrm2 = FFF_EXTERNAL_FUNC [FFF_BLAS_DNRM2 ];
57
+ dnrm2 = fff_blas_func [FFF_BLAS_DNRM2 ];
49
58
50
59
return ( (* dnrm2 )(& n , x -> data , & incx ) );
51
60
}
@@ -57,7 +66,7 @@ double fff_blas_dasum (const fff_vector * x)
57
66
int incx = (int ) x -> stride ;
58
67
double (* dasum )(int * n , double * dx , int * incx );
59
68
60
- dasum = FFF_EXTERNAL_FUNC [FFF_BLAS_DASUM ];
69
+ dasum = fff_blas_func [FFF_BLAS_DASUM ];
61
70
62
71
return ( (* dasum )(& n , x -> data , & incx ) );
63
72
}
@@ -74,7 +83,7 @@ CBLAS_INDEX_t fff_blas_idamax (const fff_vector * x)
74
83
int incx = (int ) x -> stride ;
75
84
int (* idamax )(int * n , double * dx , int * incx );
76
85
77
- idamax = FFF_EXTERNAL_FUNC [FFF_BLAS_IDAMAX ];
86
+ idamax = fff_blas_func [FFF_BLAS_IDAMAX ];
78
87
79
88
return ( (CBLAS_INDEX_t )((* idamax )(& n , x -> data , & incx ) - 1 ) );
80
89
}
@@ -88,7 +97,7 @@ int fff_blas_dswap (fff_vector * x, fff_vector * y)
88
97
int (* dswap )(int * n , double * dx , int * incx ,
89
98
double * dy , int * incy );
90
99
91
- dswap = FFF_EXTERNAL_FUNC [FFF_BLAS_DSWAP ];
100
+ dswap = fff_blas_func [FFF_BLAS_DSWAP ];
92
101
93
102
if ( n != y -> size )
94
103
return 1 ;
@@ -105,7 +114,7 @@ int fff_blas_dcopy (const fff_vector * x, fff_vector * y)
105
114
int (* dcopy )(int * n , double * dx , int * incx ,
106
115
double * dy , int * incy );
107
116
108
- dcopy = FFF_EXTERNAL_FUNC [FFF_BLAS_DCOPY ];
117
+ dcopy = fff_blas_func [FFF_BLAS_DCOPY ];
109
118
110
119
if ( n != y -> size )
111
120
return 1 ;
@@ -125,7 +134,7 @@ int fff_blas_daxpy (double alpha, const fff_vector * x, fff_vector * y)
125
134
if ( n != y -> size )
126
135
return 1 ;
127
136
128
- daxpy = FFF_EXTERNAL_FUNC [FFF_BLAS_DAXPY ];
137
+ daxpy = fff_blas_func [FFF_BLAS_DAXPY ];
129
138
130
139
return ( (* daxpy )(& n , & alpha , x -> data , & incx , y -> data , & incy ) );
131
140
}
@@ -138,7 +147,7 @@ int fff_blas_dscal (double alpha, fff_vector * x)
138
147
int (* dscal )(int * n , double * da , double * dx ,
139
148
int * incx );
140
149
141
- dscal = FFF_EXTERNAL_FUNC [FFF_BLAS_DSCAL ];
150
+ dscal = fff_blas_func [FFF_BLAS_DSCAL ];
142
151
143
152
return ( (* dscal )(& n , & alpha , x -> data , & incx ) );
144
153
}
@@ -156,7 +165,7 @@ int fff_blas_drotg (double a[], double b[], double c[], double s[])
156
165
int (* drotg )(double * da , double * db , double * c__ ,
157
166
double * s );
158
167
159
- drotg = FFF_EXTERNAL_FUNC [FFF_BLAS_DROTG ];
168
+ drotg = fff_blas_func [FFF_BLAS_DROTG ];
160
169
161
170
return ( (* drotg )(a , b , c , s ) );
162
171
}
@@ -170,7 +179,7 @@ int fff_blas_drot (fff_vector * x, fff_vector * y, double c, double s)
170
179
int (* drot )(int * n , double * dx , int * incx ,
171
180
double * dy , int * incy , double * c__ , double * s );
172
181
173
- drot = FFF_EXTERNAL_FUNC [FFF_BLAS_DROT ];
182
+ drot = fff_blas_func [FFF_BLAS_DROT ];
174
183
175
184
if ( n != y -> size )
176
185
return 1 ;
@@ -186,7 +195,7 @@ int fff_blas_drotmg (double d1[], double d2[], double b1[], double b2, double P[
186
195
int (* drotmg )(double * dd1 , double * dd2 , double *
187
196
dx1 , double * dy1 , double * dparam );
188
197
189
- drotmg = FFF_EXTERNAL_FUNC [FFF_BLAS_DROTMG ];
198
+ drotmg = fff_blas_func [FFF_BLAS_DROTMG ];
190
199
191
200
return ( (* drotmg )(d1 , d2 , b1 , & b2 , P ) );
192
201
}
@@ -201,7 +210,7 @@ int fff_blas_drotm (fff_vector * x, fff_vector * y, const double P[])
201
210
int (* drotm )(int * n , double * dx , int * incx ,
202
211
double * dy , int * incy , double * dparam );
203
212
204
- drotm = FFF_EXTERNAL_FUNC [FFF_BLAS_DROTM ];
213
+ drotm = fff_blas_func [FFF_BLAS_DROTM ];
205
214
206
215
if ( n != y -> size )
207
216
return 1 ;
@@ -230,7 +239,7 @@ int fff_blas_dgemv (CBLAS_TRANSPOSE_t TransA, double alpha,
230
239
alpha , double * a , int * lda , double * x , int * incx ,
231
240
double * beta , double * y , int * incy );
232
241
233
- dgemv = FFF_EXTERNAL_FUNC [FFF_BLAS_DGEMV ];
242
+ dgemv = fff_blas_func [FFF_BLAS_DGEMV ];
234
243
235
244
return ( (* dgemv )(trans , & m , & n ,
236
245
& alpha ,
@@ -261,7 +270,7 @@ int fff_blas_dtrmv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Di
261
270
int (* dtrmv )(char * uplo , char * trans , char * diag , int * n ,
262
271
double * a , int * lda , double * x , int * incx );
263
272
264
- dtrmv = FFF_EXTERNAL_FUNC [FFF_BLAS_DTRMV ];
273
+ dtrmv = fff_blas_func [FFF_BLAS_DTRMV ];
265
274
266
275
return ( (* dtrmv )(uplo , trans , diag , & n ,
267
276
A -> data , & lda ,
@@ -289,7 +298,7 @@ int fff_blas_dtrsv (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t TransA, CBLAS_DIAG_t Di
289
298
int (* dtrsv )(char * uplo , char * trans , char * diag , int * n ,
290
299
double * a , int * lda , double * x , int * incx );
291
300
292
- dtrsv = FFF_EXTERNAL_FUNC [FFF_BLAS_DTRSV ];
301
+ dtrsv = fff_blas_func [FFF_BLAS_DTRSV ];
293
302
294
303
return ( (* dtrsv )(uplo , trans , diag , & n ,
295
304
A -> data , & lda ,
@@ -316,7 +325,7 @@ int fff_blas_dsymv (CBLAS_UPLO_t Uplo,
316
325
double * a , int * lda , double * x , int * incx , double
317
326
* beta , double * y , int * incy );
318
327
319
- dsymv = FFF_EXTERNAL_FUNC [FFF_BLAS_DSYMV ];
328
+ dsymv = fff_blas_func [FFF_BLAS_DSYMV ];
320
329
321
330
return ( (* dsymv )(uplo , & n ,
322
331
& alpha ,
@@ -339,7 +348,7 @@ int fff_blas_dger (double alpha, const fff_vector * x, const fff_vector * y, fff
339
348
double * x , int * incx , double * y , int * incy ,
340
349
double * a , int * lda );
341
350
342
- dger = FFF_EXTERNAL_FUNC [FFF_BLAS_DGER ];
351
+ dger = fff_blas_func [FFF_BLAS_DGER ];
343
352
344
353
return ( (* dger )(& m , & n ,
345
354
& alpha ,
@@ -364,7 +373,7 @@ int fff_blas_dsyr (CBLAS_UPLO_t Uplo, double alpha, const fff_vector * x, fff_ma
364
373
int (* dsyr )(char * uplo , int * n , double * alpha ,
365
374
double * x , int * incx , double * a , int * lda );
366
375
367
- dsyr = FFF_EXTERNAL_FUNC [FFF_BLAS_DSYR ];
376
+ dsyr = fff_blas_func [FFF_BLAS_DSYR ];
368
377
369
378
return ( (* dsyr )(uplo , & n ,
370
379
& alpha ,
@@ -392,7 +401,7 @@ int fff_blas_dsyr2 (CBLAS_UPLO_t Uplo, double alpha,
392
401
double * x , int * incx , double * y , int * incy ,
393
402
double * a , int * lda );
394
403
395
- dsyr2 = FFF_EXTERNAL_FUNC [FFF_BLAS_DSYR2 ];
404
+ dsyr2 = fff_blas_func [FFF_BLAS_DSYR2 ];
396
405
397
406
return ( (* dsyr2 )(uplo , & n ,
398
407
& alpha ,
@@ -435,7 +444,7 @@ int fff_blas_dgemm (CBLAS_TRANSPOSE_t TransA, CBLAS_TRANSPOSE_t TransB,
435
444
double * b , int * ldb , double * beta , double * c__ ,
436
445
int * ldc );
437
446
438
- dgemm = FFF_EXTERNAL_FUNC [FFF_BLAS_DGEMM ];
447
+ dgemm = fff_blas_func [FFF_BLAS_DGEMM ];
439
448
440
449
return ( (* dgemm )(transb , transa , & m , & n , & k , & alpha ,
441
450
B -> data , & ldb ,
@@ -465,7 +474,7 @@ int fff_blas_dsymm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo,
465
474
double * alpha , double * a , int * lda , double * b ,
466
475
int * ldb , double * beta , double * c__ , int * ldc );
467
476
468
- dsymm = FFF_EXTERNAL_FUNC [FFF_BLAS_DSYMM ];
477
+ dsymm = fff_blas_func [FFF_BLAS_DSYMM ];
469
478
470
479
return ( (* dsymm )(side , uplo , & m , & n ,
471
480
& alpha ,
@@ -500,7 +509,7 @@ int fff_blas_dtrmm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Tran
500
509
int * m , int * n , double * alpha , double * a , int *
501
510
lda , double * b , int * ldb );
502
511
503
- dtrmm = FFF_EXTERNAL_FUNC [FFF_BLAS_DTRMM ];
512
+ dtrmm = fff_blas_func [FFF_BLAS_DTRMM ];
504
513
505
514
return ( (* dtrmm )(side , uplo , transa , diag , & m , & n ,
506
515
& alpha ,
@@ -535,7 +544,7 @@ int fff_blas_dtrsm (CBLAS_SIDE_t Side, CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Tran
535
544
int * m , int * n , double * alpha , double * a , int *
536
545
lda , double * b , int * ldb );
537
546
538
- dtrsm = FFF_EXTERNAL_FUNC [FFF_BLAS_DTRSM ];
547
+ dtrsm = fff_blas_func [FFF_BLAS_DTRSM ];
539
548
540
549
return ( (* dtrsm )(side , uplo , transa , diag , & m , & n ,
541
550
& alpha ,
@@ -565,7 +574,7 @@ int fff_blas_dsyrk (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
565
574
double * alpha , double * a , int * lda , double * beta ,
566
575
double * c__ , int * ldc );
567
576
568
- dsyrk = FFF_EXTERNAL_FUNC [FFF_BLAS_DSYRK ];
577
+ dsyrk = fff_blas_func [FFF_BLAS_DSYRK ];
569
578
570
579
return ( (* dsyrk )(uplo , trans , & n , & k ,
571
580
& alpha ,
@@ -597,7 +606,7 @@ int fff_blas_dsyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
597
606
double * alpha , double * a , int * lda , double * b ,
598
607
int * ldb , double * beta , double * c__ , int * ldc );
599
608
600
- dsyr2k = FFF_EXTERNAL_FUNC [FFF_BLAS_DSYR2K ];
609
+ dsyr2k = fff_blas_func [FFF_BLAS_DSYR2K ];
601
610
602
611
return ( (* dsyr2k )(uplo , trans , & n , & k ,
603
612
& alpha ,
@@ -606,3 +615,5 @@ int fff_blas_dsyr2k (CBLAS_UPLO_t Uplo, CBLAS_TRANSPOSE_t Trans,
606
615
& beta ,
607
616
C -> data , & ldc ) );
608
617
}
618
+
619
+
0 commit comments