Refs #47. On Loongson 3A, set DGEMM_R parameter depending on different number of...
authorXianyi Zhang <traits.zhang@gmail.com>
Mon, 5 Sep 2011 15:13:05 +0000 (15:13 +0000)
committerXianyi Zhang <traits.zhang@gmail.com>
Mon, 5 Sep 2011 15:13:52 +0000 (15:13 +0000)
common_macro.h
driver/others/blas_server.c
driver/others/blas_server_omp.c
driver/others/memory.c
driver/others/parameter.c
param.h

index bcaa9f3..0c34ecb 100644 (file)
 #endif
 
 #ifndef ASSEMBLER
-#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_IA64)
+#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_IA64) || defined(ARCH_MIPS64)
+extern BLASLONG gemm_offset_a;
+extern BLASLONG gemm_offset_b;
 extern BLASLONG sgemm_p;
 extern BLASLONG sgemm_q;
 extern BLASLONG sgemm_r;
index c0f77c4..a026ccb 100644 (file)
@@ -797,6 +797,11 @@ void goto_set_num_threads(int num_threads) {
 
   blas_cpu_number  = num_threads;
 
+#if defined(ARCH_MIPS64) 
+  //set parameters for different number of threads.
+  blas_set_parameter();
+#endif
+
 }
 
 void openblas_set_num_threads(int num_threads) {
index 4fd4cd4..c45856f 100644 (file)
@@ -63,6 +63,11 @@ void goto_set_num_threads(int num_threads) {
 
   omp_set_num_threads(blas_cpu_number);
   
+#if defined(ARCH_MIPS64) 
+  //set parameters for different number of threads.
+  blas_set_parameter();
+#endif
+
 }
 void openblas_set_num_threads(int num_threads) {
 
index dd83344..ac9c878 100644 (file)
@@ -884,7 +884,7 @@ void *blas_memory_alloc(int procpos){
       if (!blas_num_threads) blas_cpu_number = blas_get_cpu_number();
 #endif
       
-#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_IA64)
+#if defined(ARCH_X86) || defined(ARCH_X86_64) || defined(ARCH_IA64) || defined(ARCH_MIPS64)
 #ifndef DYNAMIC_ARCH
       blas_set_parameter();
 #endif
index 9e72fd2..80f7084 100644 (file)
@@ -45,8 +45,22 @@ int get_L2_size(void);
 #define DEFAULT_GEMM_P 128
 #define DEFAULT_GEMM_Q 128
 #define DEFAULT_GEMM_R 128
+#define DEFAULT_GEMM_OFFSET_A 0
+#define DEFAULT_GEMM_OFFSET_B 0
 
 /* Global Parameter */
+#if GEMM_OFFSET_A == gemm_offset_a
+BLASLONG gemm_offset_a = DEFAULT_GEMM_OFFSET_A;
+#else
+BLASLONG gemm_offset_a = GEMM_OFFSET_A;
+#endif
+
+#if GEMM_OFFSET_B == gemm_offset_b
+BLASLONG gemm_offset_b = DEFAULT_GEMM_OFFSET_B;
+#else
+BLASLONG gemm_offset_b = GEMM_OFFSET_B;
+#endif
+
 #if SGEMM_P == sgemm_p
 BLASLONG sgemm_p = DEFAULT_GEMM_P;
 #else
@@ -666,3 +680,17 @@ void blas_set_parameter(void){
 #endif
 
 #endif
+
+#if defined(ARCH_MIPS64) 
+void blas_set_parameter(void){
+#if defined(LOONGSON3A)
+  if(blas_num_threads == 1){
+    //single thread
+    dgemm_r = 1000;
+  }else{
+    //multi thread
+    dgemm_r = 300;
+  }
+#endif
+}
+#endif
diff --git a/param.h b/param.h
index ecdae2e..52a1320 100644 (file)
--- a/param.h
+++ b/param.h
@@ -1507,7 +1507,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //#define DGEMM_DEFAULT_R 200
 //#define DGEMM_DEFAULT_R 400
 //#define DGEMM_DEFAULT_R 192
-#define DGEMM_DEFAULT_R 1000
+#define DGEMM_DEFAULT_R dgemm_r
+//1000
 //#define DGEMM_DEFAULT_R 160
 //#define DGEMM_DEFAULT_R 270
 #define CGEMM_DEFAULT_R 1000