@@ -63,6 +63,36 @@ static int (*gemv_thread[])(BLASLONG, BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT
63
63
};
64
64
#endif
65
65
66
+ #ifdef DYNAMIC_ARCH
67
+ extern char * gotoblas_corename (void );
68
+ #endif
69
+
70
+ #if defined(DYNAMIC_ARCH ) || defined(NEOVERSEV1 )
71
+ static inline int get_gemv_optimal_nthreads_neoversev1 (BLASLONG MN , int ncpu ) {
72
+ return
73
+ MN < 25600L ? 1
74
+ : MN < 63001L ? MIN (ncpu , 4 )
75
+ : MN < 459684L ? MIN (ncpu , 16 )
76
+ : ncpu ;
77
+ }
78
+ #endif
79
+
80
+ static inline int get_gemv_optimal_nthreads (BLASLONG MN ) {
81
+ int ncpu = num_cpu_avail (3 );
82
+ #if defined(NEOVERSEV1 ) && !defined(COMPLEX ) && !defined(DOUBLE ) && !defined(BFLOAT16 )
83
+ return get_gemv_optimal_nthreads_neoversev1 (MN , ncpu );
84
+ #elif defined(DYNAMIC_ARCH ) && !defined(COMPLEX ) && !defined(DOUBLE ) && !defined(BFLOAT16 )
85
+ if (strcmp (gotoblas_corename (), "neoversev1" ) == 0 ) {
86
+ return get_gemv_optimal_nthreads_neoversev1 (MN , ncpu );
87
+ }
88
+ #endif
89
+
90
+ if ( MN < 115200L * GEMM_MULTITHREAD_THRESHOLD )
91
+ return 1 ;
92
+ else
93
+ return num_cpu_avail (2 );
94
+ }
95
+
66
96
#ifndef CBLAS
67
97
68
98
void NAME (char * TRANS , blasint * M , blasint * N ,
@@ -225,11 +255,7 @@ void CNAME(enum CBLAS_ORDER order,
225
255
STACK_ALLOC (buffer_size , FLOAT , buffer );
226
256
227
257
#ifdef SMP
228
-
229
- if ( 1L * m * n < 115200L * GEMM_MULTITHREAD_THRESHOLD )
230
- nthreads = 1 ;
231
- else
232
- nthreads = num_cpu_avail (2 );
258
+ nthreads = get_gemv_optimal_nthreads (1L * m * n );
233
259
234
260
if (nthreads == 1 ) {
235
261
#endif
0 commit comments