Skip to content

Commit 7d81acc

Browse files
authored
Merge pull request #3 from xianyi/develop
rebase
2 parents 980ab34 + 18d8a67 commit 7d81acc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+4952
-373
lines changed

Makefile.system

+12-17
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,10 @@ DYNAMIC_CORE += EMAG8180
625625
DYNAMIC_CORE += THUNDERX3T110
626626
endif
627627

628+
ifeq ($(ARCH), mips64)
629+
DYNAMIC_CORE = LOONGSON3R3 LOONGSON3R4
630+
endif
631+
628632
ifeq ($(ARCH), zarch)
629633
DYNAMIC_CORE = ZARCH_GENERIC
630634

@@ -672,7 +676,7 @@ DYNAMIC_CORE += POWER9
672676
else
673677
$(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
674678
endif
675-
LDVERSIONGTEQ35 := $(shell expr `ld --version | head -1 | cut -f2 -d "." | cut -f1 -d "-"` >= 35)
679+
LDVERSIONGTEQ35 := $(shell expr `$(CC) -Wl,--version 2> /dev/null | head -1 | cut -f2 -d "." | cut -f1 -d "-"` \>= 35)
676680
ifeq ($(GCCVERSIONGTEQ11)$(LDVERSIONGTEQ35), 11)
677681
DYNAMIC_CORE += POWER10
678682
CCOMMON_OPT += -DHAVE_P10_SUPPORT
@@ -787,14 +791,9 @@ CCOMMON_OPT += -mabi=32
787791
BINARY_DEFINED = 1
788792
endif
789793

790-
ifeq ($(CORE), LOONGSON3A)
791-
CCOMMON_OPT += -march=mips64
792-
FCOMMON_OPT += -march=mips64
793-
endif
794-
795-
ifeq ($(CORE), LOONGSON3B)
796-
CCOMMON_OPT += -march=mips64
797-
FCOMMON_OPT += -march=mips64
794+
ifeq ($(CORE), $(filter $(CORE),LOONGSON3R3 LOONGSON3R4))
795+
CCOMMON_OPT += -march=loongson3a
796+
FCOMMON_OPT += -march=loongson3a
798797
endif
799798

800799
ifeq ($(CORE), MIPS24K)
@@ -1078,11 +1077,11 @@ FCOMMON_OPT += -n32
10781077
else
10791078
FCOMMON_OPT += -n64
10801079
endif
1081-
ifeq ($(CORE), LOONGSON3A)
1080+
ifeq ($(CORE), LOONGSON3R3)
10821081
FCOMMON_OPT += -loongson3 -static
10831082
endif
10841083

1085-
ifeq ($(CORE), LOONGSON3B)
1084+
ifeq ($(CORE), LOONGSON3R4)
10861085
FCOMMON_OPT += -loongson3 -static
10871086
endif
10881087

@@ -1108,11 +1107,11 @@ CCOMMON_OPT += -n32
11081107
else
11091108
CCOMMON_OPT += -n64
11101109
endif
1111-
ifeq ($(CORE), LOONGSON3A)
1110+
ifeq ($(CORE), LOONGSON3R3)
11121111
CCOMMON_OPT += -loongson3 -static
11131112
endif
11141113

1115-
ifeq ($(CORE), LOONGSON3B)
1114+
ifeq ($(CORE), LOONGSON3R4)
11161115
CCOMMON_OPT += -loongson3 -static
11171116
endif
11181117

@@ -1223,10 +1222,8 @@ ifdef SMP
12231222
CCOMMON_OPT += -DSMP_SERVER
12241223

12251224
ifeq ($(ARCH), mips64)
1226-
ifneq ($(CORE), LOONGSON3B)
12271225
USE_SIMPLE_THREADED_LEVEL3 = 1
12281226
endif
1229-
endif
12301227

12311228
ifeq ($(USE_OPENMP), 1)
12321229
# USE_SIMPLE_THREADED_LEVEL3 = 1
@@ -1342,11 +1339,9 @@ endif
13421339

13431340
ifneq ($(ARCH), x86_64)
13441341
ifneq ($(ARCH), x86)
1345-
ifneq ($(CORE), LOONGSON3B)
13461342
NO_AFFINITY = 1
13471343
endif
13481344
endif
1349-
endif
13501345

13511346
ifdef NO_AFFINITY
13521347
ifeq ($(NO_AFFINITY), 0)

c_check

+1-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ if (($architecture eq "mips") || ($architecture eq "mips64")) {
199199
} else {
200200
$tmpf = new File::Temp( SUFFIX => '.c' , UNLINK => 1 );
201201
$code = '"addvi.b $w0, $w1, 1"';
202-
$msa_flags = "-mmsa -mfp64 -msched-weight -mload-store-pairs";
202+
$msa_flags = "-mmsa -mfp64 -mload-store-pairs";
203203
print $tmpf "#include <msa.h>\n\n";
204204
print $tmpf "void main(void){ __asm__ volatile($code); }\n";
205205

common_linux.h

-8
Original file line numberDiff line numberDiff line change
@@ -75,18 +75,10 @@ static inline int my_mbind(void *addr, unsigned long len, int mode,
7575
// https://lsbbugs.linuxfoundation.org/show_bug.cgi?id=3482
7676
return 0;
7777
#else
78-
#if defined (LOONGSON3B)
79-
#if defined (__64BIT__)
80-
return syscall(SYS_mbind, addr, len, mode, nodemask, maxnode, flags);
81-
#else
82-
return 0; //NULL Implementation on Loongson 3B 32bit.
83-
#endif
84-
#else
8578
//Fixed randomly SEGFAULT when nodemask==NULL with above Linux 2.6.34
8679
// unsigned long null_nodemask=0;
8780
return syscall(SYS_mbind, addr, len, mode, nodemask, maxnode, flags);
8881
#endif
89-
#endif
9082
}
9183

9284
static inline int my_set_mempolicy(int mode, const unsigned long *addr, unsigned long flag) {

common_mips64.h

+2-7
Original file line numberDiff line numberDiff line change
@@ -229,12 +229,7 @@ REALNAME: ;\
229229

230230
#define BUFFER_SIZE ( 32 << 21)
231231

232-
#if defined(LOONGSON3A)
233-
#define PAGESIZE (16UL << 10)
234-
#define FIXED_PAGESIZE (16UL << 10)
235-
#endif
236-
237-
#if defined(LOONGSON3B)
232+
#if defined(LOONGSON3R3) || defined(LOONGSON3R4)
238233
#define PAGESIZE (16UL << 10)
239234
#define FIXED_PAGESIZE (16UL << 10)
240235
#endif
@@ -250,7 +245,7 @@ REALNAME: ;\
250245
#define MAP_ANONYMOUS MAP_ANON
251246
#endif
252247

253-
#if defined(LOONGSON3A) || defined(LOONGSON3B)
248+
#if defined(LOONGSON3R3) || defined(LOONGSON3R4)
254249
#define PREFETCHD_(x) ld $0, x
255250
#define PREFETCHD(x) PREFETCHD_(x)
256251
#else

cpuid_mips64.c

+29-62
Original file line numberDiff line numberDiff line change
@@ -70,68 +70,33 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7070
/* or implied, of The University of Texas at Austin. */
7171
/*********************************************************************/
7272

73-
#define CPU_UNKNOWN 0
74-
#define CPU_SICORTEX 1
75-
#define CPU_LOONGSON3A 2
76-
#define CPU_LOONGSON3B 3
77-
#define CPU_I6400 4
78-
#define CPU_P6600 5
79-
#define CPU_I6500 6
73+
#define CPU_UNKNOWN 0
74+
#define CPU_SICORTEX 1
75+
#define CPU_LOONGSON3R3 2
76+
#define CPU_LOONGSON3R4 3
77+
#define CPU_I6400 4
78+
#define CPU_P6600 5
79+
#define CPU_I6500 6
8080

8181
static char *cpuname[] = {
8282
"UNKNOWN",
8383
"SICORTEX",
84-
"LOONGSON3A",
85-
"LOONGSON3B",
84+
"LOONGSON3R3",
85+
"LOONGSON3R4",
8686
"I6400",
8787
"P6600",
8888
"I6500"
8989
};
9090

9191
int detect(void){
9292

93-
#ifdef __linux
93+
#ifdef linux
9494
FILE *infile;
9595
char buffer[512], *p;
9696

9797
p = (char *)NULL;
98-
infile = fopen("/proc/cpuinfo", "r");
99-
while (fgets(buffer, sizeof(buffer), infile)){
100-
if (!strncmp("cpu", buffer, 3)){
101-
p = strchr(buffer, ':') + 2;
102-
#if 0
103-
fprintf(stderr, "%s\n", p);
104-
#endif
105-
break;
106-
}
107-
}
108-
109-
fclose(infile);
110-
111-
if(p != NULL){
112-
if (strstr(p, "Loongson-3A")){
113-
return CPU_LOONGSON3A;
114-
}else if(strstr(p, "Loongson-3B")){
115-
return CPU_LOONGSON3B;
116-
}else if (strstr(p, "Loongson-3")){
117-
infile = fopen("/proc/cpuinfo", "r");
118-
p = (char *)NULL;
119-
while (fgets(buffer, sizeof(buffer), infile)){
120-
if (!strncmp("system type", buffer, 11)){
121-
p = strchr(buffer, ':') + 2;
122-
break;
123-
}
124-
}
125-
fclose(infile);
126-
if (strstr(p, "loongson3a"))
127-
return CPU_LOONGSON3A;
128-
}else{
129-
return CPU_SICORTEX;
130-
}
131-
}
13298
//Check model name for Loongson3
13399
infile = fopen("/proc/cpuinfo", "r");
134-
p = (char *)NULL;
135100
while (fgets(buffer, sizeof(buffer), infile)){
136101
if (!strncmp("model name", buffer, 10)){
137102
p = strchr(buffer, ':') + 2;
@@ -140,14 +105,16 @@ int detect(void){
140105
}
141106
fclose(infile);
142107
if(p != NULL){
143-
if (strstr(p, "Loongson-3A")){
144-
return CPU_LOONGSON3A;
145-
}else if(strstr(p, "Loongson-3B")){
146-
return CPU_LOONGSON3B;
147-
}
108+
if (strstr(p, "Loongson-3A3000") || strstr(p, "Loongson-3B3000")){
109+
return CPU_LOONGSON3R3;
110+
}else if(strstr(p, "Loongson-3A4000") || strstr(p, "Loongson-3B4000")){
111+
return CPU_LOONGSON3R4;
112+
} else{
113+
return CPU_SICORTEX;
148114
}
149115
#endif
150116
return CPU_UNKNOWN;
117+
}
151118
}
152119

153120
char *get_corename(void){
@@ -159,10 +126,10 @@ void get_architecture(void){
159126
}
160127

161128
void get_subarchitecture(void){
162-
if(detect()==CPU_LOONGSON3A) {
163-
printf("LOONGSON3A");
164-
}else if(detect()==CPU_LOONGSON3B){
165-
printf("LOONGSON3B");
129+
if(detect()==CPU_LOONGSON3R3) {
130+
printf("LOONGSON3R3");
131+
}else if(detect()==CPU_LOONGSON3R4){
132+
printf("LOONGSON3R4");
166133
}else if(detect()==CPU_I6400){
167134
printf("I6400");
168135
}else if(detect()==CPU_P6600){
@@ -179,17 +146,17 @@ void get_subdirname(void){
179146
}
180147

181148
void get_cpuconfig(void){
182-
if(detect()==CPU_LOONGSON3A) {
183-
printf("#define LOONGSON3A\n");
149+
if(detect()==CPU_LOONGSON3R3) {
150+
printf("#define LOONGSON3R3\n");
184151
printf("#define L1_DATA_SIZE 65536\n");
185152
printf("#define L1_DATA_LINESIZE 32\n");
186153
printf("#define L2_SIZE 512488\n");
187154
printf("#define L2_LINESIZE 32\n");
188155
printf("#define DTB_DEFAULT_ENTRIES 64\n");
189156
printf("#define DTB_SIZE 4096\n");
190157
printf("#define L2_ASSOCIATIVE 4\n");
191-
}else if(detect()==CPU_LOONGSON3B){
192-
printf("#define LOONGSON3B\n");
158+
}else if(detect()==CPU_LOONGSON3R4){
159+
printf("#define LOONGSON3R4\n");
193160
printf("#define L1_DATA_SIZE 65536\n");
194161
printf("#define L1_DATA_LINESIZE 32\n");
195162
printf("#define L2_SIZE 512488\n");
@@ -237,10 +204,10 @@ void get_cpuconfig(void){
237204
}
238205

239206
void get_libname(void){
240-
if(detect()==CPU_LOONGSON3A) {
241-
printf("loongson3a\n");
242-
}else if(detect()==CPU_LOONGSON3B) {
243-
printf("loongson3b\n");
207+
if(detect()==CPU_LOONGSON3R3) {
208+
printf("loongson3r3\n");
209+
}else if(detect()==CPU_LOONGSON3R4) {
210+
printf("loongson3r4\n");
244211
}else if(detect()==CPU_I6400) {
245212
printf("i6400\n");
246213
}else if(detect()==CPU_P6600) {

driver/level3/level3.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,10 @@ int CNAME(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
339339
#else
340340
if (min_jj >= 3*GEMM_UNROLL_N) min_jj = 3*GEMM_UNROLL_N;
341341
else
342-
if (min_jj >= 2*GEMM_UNROLL_N) min_jj = 2*GEMM_UNROLL_N;
342+
/*
343+
if (min_jj >= 2*GEMM_UNROLL_N) min_jj = 2*GEMM_UNROLL_N;
343344
else
345+
*/
344346
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
345347
#endif
346348

driver/level3/level3_thread.c

+2
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,10 @@ static int inner_thread(blas_arg_t *args, BLASLONG *range_m, BLASLONG *range_n,
373373
#else
374374
if (min_jj >= 3*GEMM_UNROLL_N) min_jj = 3*GEMM_UNROLL_N;
375375
else
376+
/*
376377
if (min_jj >= 2*GEMM_UNROLL_N) min_jj = 2*GEMM_UNROLL_N;
377378
else
379+
*/
378380
if (min_jj > GEMM_UNROLL_N) min_jj = GEMM_UNROLL_N;
379381
#endif
380382
/* Copy part of local region of B into workspace */

driver/others/Makefile

+8
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@ else
2424
ifeq ($(ARCH),zarch)
2525
COMMONOBJS += dynamic_zarch.$(SUFFIX)
2626
else
27+
ifeq ($(ARCH),mips64)
28+
COMMONOBJS += dynamic_mips64.$(SUFFIX)
29+
else
2730
COMMONOBJS += dynamic.$(SUFFIX)
2831
endif
2932
endif
3033
endif
34+
endif
3135
else
3236
COMMONOBJS += parameter.$(SUFFIX)
3337
endif
@@ -92,10 +96,14 @@ else
9296
ifeq ($(ARCH),zarch)
9397
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_zarch.$(SUFFIX)
9498
else
99+
ifeq ($(ARCH),mips64)
100+
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic_mips64.$(SUFFIX)
101+
else
95102
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) dynamic.$(SUFFIX)
96103
endif
97104
endif
98105
endif
106+
endif
99107
else
100108
HPLOBJS = memory.$(SUFFIX) xerbla.$(SUFFIX) parameter.$(SUFFIX)
101109
endif

driver/others/blas_server.c

+2
Original file line numberDiff line numberDiff line change
@@ -967,9 +967,11 @@ void goto_set_num_threads(int num_threads) {
967967
blas_cpu_number = num_threads;
968968

969969
#if defined(ARCH_MIPS64)
970+
#ifndef DYNAMIC_ARCH
970971
//set parameters for different number of threads.
971972
blas_set_parameter();
972973
#endif
974+
#endif
973975

974976
}
975977

0 commit comments

Comments
 (0)