Fixed #14 the SEGFAULT bug on 64 cores. On SMP server, the number of CPUs or cores should be less than or equal to 64.
This commit is contained in:
parent
5e7f29b19e
commit
85f99d4769
|
@ -5,6 +5,9 @@ Version 0.1 alpha2(in development)
|
||||||
common:
|
common:
|
||||||
* Fixed blasint undefined bug in <cblas.h> file. Other software
|
* Fixed blasint undefined bug in <cblas.h> file. Other software
|
||||||
could include this header successfully(Refs issue #13 on github)
|
could include this header successfully(Refs issue #13 on github)
|
||||||
|
* Fixed the SEGFAULT bug on 64 cores. On SMP server, the number
|
||||||
|
of CPUs or cores should be less than or equal to 64.(Refs issue #14
|
||||||
|
on github)
|
||||||
x86/x86_64:
|
x86/x86_64:
|
||||||
*
|
*
|
||||||
MIPS64:
|
MIPS64:
|
||||||
|
|
4
README
4
README
|
@ -57,3 +57,7 @@ OpenBLAS users mailing list: http://list.rdcps.ac.cn/mailman/listinfo/openblas
|
||||||
|
|
||||||
8.ChangeLog
|
8.ChangeLog
|
||||||
Please see Changelog.txt to obtain the differences between GotoBLAS2 1.13 BSD version.
|
Please see Changelog.txt to obtain the differences between GotoBLAS2 1.13 BSD version.
|
||||||
|
|
||||||
|
9.Known Issues
|
||||||
|
* The number of CPUs/Cores should less than or equal to 8*sizeof(unsigned long). On 64 bits, the limit
|
||||||
|
is 64. On 32 bits, it is 32.
|
||||||
|
|
|
@ -172,12 +172,19 @@ static inline int rcount(unsigned long number) {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
Known issue: The number of CPUs/cores should less
|
||||||
|
than sizeof(unsigned long). On 64 bits, the limit
|
||||||
|
is 64. On 32 bits, it is 32.
|
||||||
|
***/
|
||||||
static inline unsigned long get_cpumap(int node) {
|
static inline unsigned long get_cpumap(int node) {
|
||||||
|
|
||||||
int infile;
|
int infile;
|
||||||
unsigned long affinity;
|
unsigned long affinity;
|
||||||
char name[160];
|
char name[160];
|
||||||
|
char cpumap[160];
|
||||||
char *p, *dummy;
|
char *p, *dummy;
|
||||||
|
int i=0;
|
||||||
|
|
||||||
sprintf(name, CPUMAP_NAME, node);
|
sprintf(name, CPUMAP_NAME, node);
|
||||||
|
|
||||||
|
@ -187,13 +194,19 @@ static inline unsigned long get_cpumap(int node) {
|
||||||
|
|
||||||
if (infile != -1) {
|
if (infile != -1) {
|
||||||
|
|
||||||
read(infile, name, sizeof(name));
|
read(infile, cpumap, sizeof(cpumap));
|
||||||
|
p = cpumap;
|
||||||
|
while (*p != '\n' && i<160){
|
||||||
|
if(*p != ',') {
|
||||||
|
name[i++]=*p;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
p = name;
|
p = name;
|
||||||
|
|
||||||
while ((*p == '0') || (*p == ',')) p++;
|
// while ((*p == '0') || (*p == ',')) p++;
|
||||||
|
|
||||||
affinity = strtol(p, &dummy, 16);
|
affinity = strtoul(p, &dummy, 16);
|
||||||
|
|
||||||
close(infile);
|
close(infile);
|
||||||
}
|
}
|
||||||
|
@ -347,6 +360,12 @@ static void disable_hyperthread(void) {
|
||||||
unsigned long share;
|
unsigned long share;
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
|
if(common->num_procs > 64){
|
||||||
|
fprintf(stderr, "\nOpenBLAS Warining : The number of CPU/Cores(%d) is beyond the limit(64). Terminated.\n", common->num_procs);
|
||||||
|
exit(1);
|
||||||
|
}else if(common->num_procs == 64){
|
||||||
|
common -> avail = 0xFFFFFFFFFFFFFFFFUL;
|
||||||
|
}else
|
||||||
common -> avail = (1UL << common -> num_procs) - 1;
|
common -> avail = (1UL << common -> num_procs) - 1;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
@ -376,6 +395,12 @@ static void disable_affinity(void) {
|
||||||
fprintf(stderr, "CPU mask : %04lx.\n\n", *(unsigned long *)&cpu_orig_mask[0]);
|
fprintf(stderr, "CPU mask : %04lx.\n\n", *(unsigned long *)&cpu_orig_mask[0]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if(common->final_num_procs > 64){
|
||||||
|
fprintf(stderr, "\nOpenBLAS Warining : The number of CPU/Cores(%d) is beyond the limit(64). Terminated.\n", common->final_num_procs);
|
||||||
|
exit(1);
|
||||||
|
}else if(common->final_num_procs == 64){
|
||||||
|
lprocmask = 0xFFFFFFFFFFFFFFFFUL;
|
||||||
|
}else
|
||||||
lprocmask = (1UL << common -> final_num_procs) - 1;
|
lprocmask = (1UL << common -> final_num_procs) - 1;
|
||||||
|
|
||||||
#ifndef USE_OPENMP
|
#ifndef USE_OPENMP
|
||||||
|
|
Loading…
Reference in New Issue