Skip to content

Commit c0d570a

Browse files
authored
Merge pull request #7 from xianyi/develop
update
2 parents 2a1911c + 6b83079 commit c0d570a

19 files changed

+4762
-33
lines changed

.travis.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@ matrix:
1717
- COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=NEHALEM NUM_THREADS=32"
1818
script:
1919
- set -e
20-
- travis_wait 45 make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE
20+
- make QUIET_MAKE=1 $COMMON_FLAGS $BTYPE
2121
- make -C test $COMMON_FLAGS $BTYPE
2222
- make -C ctest $COMMON_FLAGS $BTYPE
2323
- make -C utest $COMMON_FLAGS $BTYPE
2424
env:
2525
- TARGET_BOX=LINUX64
2626
- BTYPE="BINARY=64"
2727

28-
# - <<: *test-ubuntu
29-
# os: linux-ppc64le
30-
# before_script:
31-
# - COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=POWER8 NUM_THREADS=32"
32-
# env:
33-
# # for matrix annotation only
34-
# - TARGET_BOX=PPC64LE_LINUX
35-
# - BTYPE="BINARY=64 USE_OPENMP=1"
28+
- <<: *test-ubuntu
29+
os: linux-ppc64le
30+
before_script:
31+
- COMMON_FLAGS="DYNAMIC_ARCH=1 TARGET=POWER8 NUM_THREADS=32"
32+
env:
33+
# for matrix annotation only
34+
- TARGET_BOX=PPC64LE_LINUX
35+
- BTYPE="BINARY=64 USE_OPENMP=1"
3636

3737
- <<: *test-ubuntu
3838
env:

Makefile.system

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,12 +322,13 @@ CCOMMON_OPT += -DMS_ABI
322322
endif
323323

324324
ifeq ($(C_COMPILER), GCC)
325-
#Test for supporting MS_ABI
325+
#Version tests for supporting specific features (MS_ABI, POWER9 intrinsics)
326326
GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
327327
GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
328+
GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5)
328329
GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
329330
ifeq ($(GCCVERSIONGT4), 1)
330-
# GCC Majar version > 4
331+
# GCC Major version > 4
331332
# It is compatible with MSVC ABI.
332333
CCOMMON_OPT += -DMS_ABI
333334
endif
@@ -554,8 +555,17 @@ endif
554555
ifeq ($(ARCH), power)
555556
DYNAMIC_CORE = POWER6
556557
DYNAMIC_CORE += POWER8
558+
ifneq ($(C_COMPILER), GCC)
557559
DYNAMIC_CORE += POWER9
558560
endif
561+
ifeq ($(C_COMPILER), GCC)
562+
ifeq ($(GCCVERSIONGT5), 1)
563+
DYNAMIC_CORE += POWER9
564+
else
565+
$(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
566+
endif
567+
endif
568+
endif
559569

560570
# If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
561571
ifndef DYNAMIC_CORE

cpuid_arm64.c

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,33 @@ void get_subdirname(void)
206206
printf("arm64");
207207
}
208208

209+
void get_cpucount(void)
210+
{
211+
int n=0;
212+
213+
#ifdef linux
214+
FILE *infile;
215+
char buffer[2048], *p,*t;
216+
p = (char *) NULL ;
217+
218+
infile = fopen("/proc/cpuinfo", "r");
219+
220+
while (fgets(buffer, sizeof(buffer), infile))
221+
{
222+
223+
if (!strncmp("processor", buffer, 9))
224+
n++;
225+
}
226+
227+
fclose(infile);
228+
229+
printf("#define NUM_CORES %d\n",n);
230+
#endif
231+
232+
}
233+
234+
235+
209236
void get_cpuconfig(void)
210237
{
211238

@@ -309,6 +336,7 @@ void get_cpuconfig(void)
309336
printf("#define DTB_SIZE 4096 \n");
310337
break;
311338
}
339+
get_cpucount();
312340
}
313341

314342

@@ -351,5 +379,3 @@ void get_features(void)
351379
#endif
352380
return;
353381
}
354-
355-

driver/others/dynamic_power.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
extern gotoblas_t gotoblas_POWER6;
55
extern gotoblas_t gotoblas_POWER8;
6+
#if (!defined C_GCC) || (GCC_VERSION >= 60000)
67
extern gotoblas_t gotoblas_POWER9;
8+
#endif
79

810
extern void openblas_warning(int verbose, const char *msg);
911

@@ -19,7 +21,9 @@ static char *corename[] = {
1921
char *gotoblas_corename(void) {
2022
if (gotoblas == &gotoblas_POWER6) return corename[1];
2123
if (gotoblas == &gotoblas_POWER8) return corename[2];
24+
#if (!defined C_GCC) || (GCC_VERSION >= 60000)
2225
if (gotoblas == &gotoblas_POWER9) return corename[3];
26+
#endif
2327
return corename[0];
2428
}
2529

@@ -29,8 +33,10 @@ static gotoblas_t *get_coretype(void) {
2933
return &gotoblas_POWER6;
3034
if (__builtin_cpu_is("power8"))
3135
return &gotoblas_POWER8;
36+
#if (!defined C_GCC) || (GCC_VERSION >= 60000)
3237
if (__builtin_cpu_is("power9"))
3338
return &gotoblas_POWER9;
39+
#endif
3440
return NULL;
3541
}
3642

@@ -53,7 +59,9 @@ static gotoblas_t *force_coretype(char * coretype) {
5359
{
5460
case 1: return (&gotoblas_POWER6);
5561
case 2: return (&gotoblas_POWER8);
62+
#if (!defined C_GCC) || (GCC_VERSION >= 60000)
5663
case 3: return (&gotoblas_POWER9);
64+
#endif
5765
default: return NULL;
5866
}
5967
snprintf(message, 128, "Core not found: %s\n", coretype);

kernel/Makefile.L3

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ ifeq ($(TARGET), LOONGSON3B)
2424
USE_TRMM = 1
2525
endif
2626

27-
ifeq ($(CORE), GENERIC)
27+
ifneq ($(DYNAMIC_ARCH), 1)
28+
ifeq ($(TARGET), GENERIC)
2829
USE_TRMM = 1
2930
endif
31+
endif
3032

3133
ifeq ($(CORE), HASWELL)
3234
USE_TRMM = 1

kernel/power/KERNEL.POWER8

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
8989
#SMINKERNEL = ../arm/min.c
9090
#DMINKERNEL = ../arm/min.c
9191
#
92-
ISAMAXKERNEL = isamax.c
92+
ISAMAXKERNEL = isamax_power8.S
9393
IDAMAXKERNEL = idamax.c
94-
ICAMAXKERNEL = icamax.c
94+
ICAMAXKERNEL = icamax_power8.S
9595
IZAMAXKERNEL = izamax.c
9696
#
97-
ISAMINKERNEL = isamin.c
97+
ISAMINKERNEL = isamin_power8.S
9898
IDAMINKERNEL = idamin.c
99-
ICAMINKERNEL = icamin.c
99+
ICAMINKERNEL = icamin_power8.S
100100
IZAMINKERNEL = izamin.c
101101
#
102102
#ISMAXKERNEL = ../arm/imax.c
@@ -112,7 +112,7 @@ ZASUMKERNEL = zasum.c
112112
#
113113
SAXPYKERNEL = saxpy.c
114114
DAXPYKERNEL = daxpy.c
115-
CAXPYKERNEL = caxpy.c
115+
CAXPYKERNEL = caxpy_power8.S
116116
ZAXPYKERNEL = zaxpy.c
117117
#
118118
SCOPYKERNEL = scopy.c

kernel/power/KERNEL.POWER9

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
8989
#SMINKERNEL = ../arm/min.c
9090
#DMINKERNEL = ../arm/min.c
9191
#
92-
ISAMAXKERNEL = isamax.c
92+
ISAMAXKERNEL = isamax_power9.S
9393
IDAMAXKERNEL = idamax.c
94-
ICAMAXKERNEL = icamax.c
94+
ICAMAXKERNEL = icamax_power9.S
9595
IZAMAXKERNEL = izamax.c
9696
#
97-
ISAMINKERNEL = isamin.c
97+
ISAMINKERNEL = isamin_power9.S
9898
IDAMINKERNEL = idamin.c
99-
ICAMINKERNEL = icamin.c
99+
ICAMINKERNEL = icamin_power9.S
100100
IZAMINKERNEL = izamin.c
101101
#
102102
#ISMAXKERNEL = ../arm/imax.c
@@ -112,7 +112,7 @@ ZASUMKERNEL = zasum.c
112112
#
113113
SAXPYKERNEL = saxpy.c
114114
DAXPYKERNEL = daxpy.c
115-
CAXPYKERNEL = caxpy.c
115+
CAXPYKERNEL = caxpy_power9.S
116116
ZAXPYKERNEL = zaxpy.c
117117
#
118118
SCOPYKERNEL = scopy.c
@@ -123,7 +123,7 @@ ZCOPYKERNEL = zcopy.c
123123
SDOTKERNEL = sdot.c
124124
DDOTKERNEL = ddot.c
125125
DSDOTKERNEL = sdot.c
126-
CDOTKERNEL = cdot.c
126+
CDOTKERNEL = cdot_power9.S
127127
ZDOTKERNEL = zdot.c
128128
#
129129
SNRM2KERNEL = ../arm/nrm2.c

0 commit comments

Comments
 (0)