create openblas_get_parallel to retrieve information which
authorgrisuthedragon <martin.pleissa@web.de>
Thu, 11 Jul 2013 11:39:27 +0000 (13:39 +0200)
committerZhang Xianyi <traits.zhang@gmail.com>
Thu, 11 Jul 2013 13:39:19 +0000 (21:39 +0800)
parallelization model is used by OpenBLAS.

cblas.h
driver/others/Makefile
driver/others/openblas_get_parallel.c [new file with mode: 0644]
exports/gensymbol
test/get_threading_model.c [new file with mode: 0644]

diff --git a/cblas.h b/cblas.h
index 6684262..5e134bf 100644 (file)
--- a/cblas.h
+++ b/cblas.h
@@ -16,6 +16,16 @@ void goto_set_num_threads(int num_threads);
 /*Get the build configure on runtime.*/
 char* openblas_get_config(void);
 
+/* Get the parallelization type which is used by OpenBLAS */
+int openblas_get_parallel(void); 
+/* OpenBLAS is compiled for sequential use  */
+#define OPENBLAS_SEQUENTIAL  0
+/* OpenBLAS is compiled using normal threading model */
+#define OPENBLAS_THREAD  1 
+/* OpenBLAS is compiled using OpenMP threading model */
+#define OPENBLAS_OPENMP 2 
+
+
 #define CBLAS_INDEX size_t
 
 typedef enum CBLAS_ORDER     {CblasRowMajor=101, CblasColMajor=102} CBLAS_ORDER;
index c449ec6..506388f 100644 (file)
@@ -1,7 +1,7 @@
 TOPDIR = ../..
 include ../../Makefile.system
 
-COMMONOBJS      = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_config.$(SUFFIX)
+COMMONOBJS      = memory.$(SUFFIX) xerbla.$(SUFFIX) c_abs.$(SUFFIX) z_abs.$(SUFFIX) openblas_set_num_threads.$(SUFFIX) openblas_get_config.$(SUFFIX) openblas_get_parallel.$(SUFFIX) 
 
 COMMONOBJS     += slamch.$(SUFFIX) slamc3.$(SUFFIX) dlamch.$(SUFFIX)  dlamc3.$(SUFFIX)
 
@@ -106,6 +106,9 @@ openblas_set_num_threads.$(SUFFIX) : openblas_set_num_threads.c
 openblas_get_config.$(SUFFIX) : openblas_get_config.c
        $(CC) $(CFLAGS) -c $< -o $(@F)
 
+openblas_get_parallel.$(SUFFIX) : openblas_get_parallel.c
+       $(CC) $(CFLAGS) -c $< -o $(@F)
+
 blasL1thread.$(SUFFIX) : blas_l1_thread.c ../../common.h ../../common_thread.h
        $(CC) $(CFLAGS) -c $< -o $(@F)
 
diff --git a/driver/others/openblas_get_parallel.c b/driver/others/openblas_get_parallel.c
new file mode 100644 (file)
index 0000000..68fe574
--- /dev/null
@@ -0,0 +1,52 @@
+/*****************************************************************************
+Copyright (c) 2013 Martin Koehler, grisuthedragon@users.github.com
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. Neither the name of the ISCAS nor the names of its contributors may 
+      be used to endorse or promote products derived from this software 
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+**********************************************************************************/
+
+#include "common.h"
+
+#if defined(USE_OPENMP)
+static int parallel = 2 ; 
+#elif defined(SMP_SERVER) 
+static int parallel = 1; 
+#else 
+static int parallel = 0; 
+#endif 
+
+int CNAME() {
+  return parallel;
+}
+
+int NAME() {
+  return parallel;
+}
+
+
+
index d39f9b2..108cb41 100644 (file)
 
 @misc_no_underscore_objs = (
                             openblas_set_num_threads, goto_set_num_threads,
-                            openblas_get_config,
+                            openblas_get_config, openblas_get_parallel
                            );
 
 @misc_underscore_objs = (
-                            openblas_set_num_threads,
+                            openblas_set_num_threads,openblas_get_parallel 
                         );
 
 @lapackobjs = (
diff --git a/test/get_threading_model.c b/test/get_threading_model.c
new file mode 100644 (file)
index 0000000..9a6835b
--- /dev/null
@@ -0,0 +1,18 @@
+#include "../cblas.h" 
+
+int main() {
+       int th_model = openblas_get_parallel(); 
+       switch(th_model) {
+               case OPENBLAS_SEQUENTIAL: 
+                       printf("OpenBLAS is compiled sequentially.\n"); 
+                       break; 
+               case OPENBLAS_THREAD: 
+                       printf("OpenBLAS is compiled using the normal threading model\n"); 
+                       break; 
+               case OPENBLAS_OPENMP: 
+                       printf("OpenBLAS is compiled using OpenMP\n"); 
+                       break; 
+       }
+       return 0; 
+}
+