Fixed a few more unnecessary calls to num_cpu_avail.
authorCraig Donner <cdonner@google.com>
Mon, 11 Jun 2018 09:13:09 +0000 (10:13 +0100)
committerCraig Donner <cdonner@google.com>
Mon, 11 Jun 2018 09:17:16 +0000 (10:17 +0100)
I don't have as many benchmarks for these as for gemm, but it should still
make a difference for small matrices.

18 files changed:
interface/axpy.c
interface/scal.c
interface/zaxpy.c
interface/zscal.c
interface/zswap.c
kernel/arm64/casum_thunderx2t99.c
kernel/arm64/copy_thunderx2t99.c
kernel/arm64/dasum_thunderx2t99.c
kernel/arm64/dot_thunderx2t99.c
kernel/arm64/dznrm2_thunderx2t99.c
kernel/arm64/dznrm2_thunderx2t99_fast.c
kernel/arm64/iamax_thunderx2t99.c
kernel/arm64/izamax_thunderx2t99.c
kernel/arm64/sasum_thunderx2t99.c
kernel/arm64/scnrm2_thunderx2t99.c
kernel/arm64/zasum_thunderx2t99.c
kernel/arm64/zdot_thunderx2t99.c
kernel/x86_64/ddot.c

index f0d95b3..39edea6 100644 (file)
 #include "common.h"
 #ifdef FUNCTION_PROFILE
 #include "functable.h"
-#endif 
+#endif
 #if  defined(Z13)
 #define MULTI_THREAD_MINIMAL  200000
 #else
-#define MULTI_THREAD_MINIMAL  10000        
+#define MULTI_THREAD_MINIMAL  10000
 #endif
 #ifndef CBLAS
 
@@ -83,17 +83,15 @@ void CNAME(blasint n, FLOAT alpha, FLOAT *x, blasint incx, FLOAT *y, blasint inc
   if (incy < 0) y -= (n - 1) * incy;
 
 #ifdef SMP
-  nthreads = num_cpu_avail(1);
-
   //disable multi-thread when incx==0 or incy==0
   //In that case, the threads would be dependent.
-  if (incx == 0 || incy == 0)
-         nthreads = 1;
-
+  //
   //Temporarily work-around the low performance issue with small imput size &
   //multithreads.
-  if (n <= MULTI_THREAD_MINIMAL)
+  if (incx == 0 || incy == 0 || n <= MULTI_THREAD_MINIMAL)
          nthreads = 1;
+  else
+         nthreads = num_cpu_avail(1);
 
   if (nthreads == 1) {
 #endif
index 3f468a2..6d07b16 100644 (file)
@@ -76,10 +76,11 @@ void CNAME(blasint n, FLOAT alpha, FLOAT *x, blasint incx){
 
 
 #ifdef SMP
-  nthreads = num_cpu_avail(1);
-
   if (n <= 1048576 )
        nthreads = 1;
+  else
+       nthreads = num_cpu_avail(1);
+
 
   if (nthreads == 1) {
 #endif
index 529e78e..1a0259c 100644 (file)
@@ -90,18 +90,16 @@ void CNAME(blasint n, FLOAT *ALPHA, FLOAT *x, blasint incx, FLOAT *y, blasint in
   if (incy < 0) y -= (n - 1) * incy * 2;
 
 #ifdef SMP
-  nthreads = num_cpu_avail(1);
-
   //disable multi-thread when incx==0 or incy==0
   //In that case, the threads would be dependent.
-  if (incx == 0 || incy == 0)
-         nthreads = 1;
-
-  //Work around the low performance issue with small imput size &
+  //
+  //Temporarily work-around the low performance issue with small imput size &
   //multithreads.
-  if (n <= MULTI_THREAD_MINIMAL) {
+  if (incx == 0 || incy == 0 || n <= MULTI_THREAD_MINIMAL)
          nthreads = 1;
-  }
+  else
+         nthreads = num_cpu_avail(1);
+
   if (nthreads == 1) {
 #endif
 
index 633b6ec..bfaddc2 100644 (file)
@@ -90,10 +90,10 @@ void CNAME(blasint n, FLOAT alpha_r, void *vx, blasint incx){
   FUNCTION_PROFILE_START();
 
 #ifdef SMP
-  nthreads = num_cpu_avail(1);
-
   if ( n <= 1048576 )
        nthreads = 1;
+  else
+       nthreads = num_cpu_avail(1);
 
   if (nthreads == 1) {
 #endif
index 5308cbe..e33bbaf 100644 (file)
@@ -79,12 +79,12 @@ FLOAT *y = (FLOAT*)vy;
   if (incy < 0) y -= (n - 1) * incy * 2;
 
 #ifdef SMP
-  nthreads = num_cpu_avail(1);
-
   //disable multi-thread when incx==0 or incy==0
   //In that case, the threads would be dependent.
   if (incx == 0 || incy == 0)
          nthreads = 1;
+  else
+         nthreads = num_cpu_avail(1);
 
   if (nthreads == 1) {
 #endif
index cd5d936..c6dbb3f 100644 (file)
@@ -233,13 +233,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        FLOAT asum = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                asum = casum_compute(n, x, inc_x);
index bd67b48..e318761 100644 (file)
@@ -183,13 +183,10 @@ int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
        if (n <= 0) return 0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                do_copy(n, x, inc_x, y, inc_y);
index ba12fc7..a212c95 100644 (file)
@@ -228,13 +228,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        FLOAT asum = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                asum = dasum_compute(n, x, inc_x);
index 8eeb94f..3940acd 100644 (file)
@@ -199,7 +199,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        "       faddp   "DOTF", v0.2d                   \n"
 #endif /* !defined(DSDOT) */
 
-#else /* !defined(DOUBLE) */ 
+#else /* !defined(DOUBLE) */
 #define KERNEL_F1                                              \
        "       ldr     "TMPX", ["X"]                   \n"     \
        "       ldr     "TMPY", ["Y"]                   \n"     \
@@ -384,13 +384,10 @@ RETURN_TYPE CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y
        RETURN_TYPE dot = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0 || inc_y == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || inc_y == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                dot = dot_compute(n, x, inc_x, y, inc_y);
index 2aea9b4..b94f0cf 100644 (file)
@@ -328,10 +328,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        if (n <= 0 || inc_x <= 0) return 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
        if (n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                nrm2_compute(n, x, inc_x, &ssq, &scale);
index 8b04a3e..8405b38 100644 (file)
@@ -235,10 +235,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        if (n <= 0 || inc_x <= 0) return 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
        if (n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                nrm2 = nrm2_compute(n, x, inc_x);
index a11b184..e3bec4a 100644 (file)
@@ -321,13 +321,10 @@ BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        BLASLONG max_index = 0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                max_index = iamax_compute(n, x, inc_x);
index 8d70b05..b2e2828 100644 (file)
@@ -330,13 +330,10 @@ BLASLONG CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        BLASLONG max_index = 0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                max_index = izamax_compute(n, x, inc_x);
index 28fc34c..014c667 100644 (file)
@@ -230,13 +230,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        FLOAT asum = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                asum = sasum_compute(n, x, inc_x);
index b8df496..f96de44 100644 (file)
@@ -318,10 +318,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        if (n <= 0 || inc_x <= 0) return 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
        if (n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                nrm2_double = nrm2_compute(n, x, inc_x);
index 140e5a7..1d303a9 100644 (file)
@@ -230,13 +230,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
        FLOAT asum = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                asum = zasum_compute(n, x, inc_x);
index 70d6830..6185bc7 100644 (file)
@@ -317,13 +317,10 @@ OPENBLAS_COMPLEX_FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLA
        CIMAG(zdot) = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0 || inc_y == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || inc_y == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                zdot_compute(n, x, inc_x, y, inc_y, &zdot);
index 0595490..0dc9cd3 100644 (file)
@@ -29,13 +29,13 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "common.h"
 
 
-#if defined(BULLDOZER) 
+#if defined(BULLDOZER)
 #include "ddot_microk_bulldozer-2.c"
 #elif defined(STEAMROLLER)  || defined(EXCAVATOR)
 #include "ddot_microk_steamroller-2.c"
 #elif defined(PILEDRIVER)
 #include "ddot_microk_piledriver-2.c"
-#elif defined(NEHALEM) 
+#elif defined(NEHALEM)
 #include "ddot_microk_nehalem-2.c"
 #elif defined(HASWELL) || defined(ZEN) || defined (SKYLAKEX)
 #include "ddot_microk_haswell-2.c"
@@ -110,7 +110,7 @@ static FLOAT dot_compute(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLON
        FLOAT temp1 = 0.0;
        FLOAT temp2 = 0.0;
 
-        BLASLONG n1 = n & -4;  
+        BLASLONG n1 = n & -4;
 
        while(i < n1)
        {
@@ -169,13 +169,10 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
        FLOAT dot = 0.0;
 
 #if defined(SMP)
-       nthreads = num_cpu_avail(1);
-
-       if (inc_x == 0 || inc_y == 0)
-               nthreads = 1;
-
-       if (n <= 10000)
+       if (inc_x == 0 || inc_y == 0 || n <= 10000)
                nthreads = 1;
+       else
+               nthreads = num_cpu_avail(1);
 
        if (nthreads == 1) {
                dot = dot_compute(n, x, inc_x, y, inc_y);