From: Zhang Xianyi Date: Tue, 2 Jul 2013 06:17:55 +0000 (+0800) Subject: Refs #221. Set stack limit to 16MB to prevent a SEGFAULT bug on Mac OS X with DYNAMIC... X-Git-Tag: v0.2.9.rc1~73 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=32dbeb636dd8f4a9a3ad6fe076366a99be80bb71;p=platform%2Fupstream%2Fopenblas.git Refs #221. Set stack limit to 16MB to prevent a SEGFAULT bug on Mac OS X with DYNAMIC_ARCH=1 & NUM_THREADS=256. --- diff --git a/driver/others/memory.c b/driver/others/memory.c index 2070adf..21ee93d 100644 --- a/driver/others/memory.c +++ b/driver/others/memory.c @@ -105,6 +105,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #if defined(OS_FREEBSD) || defined(OS_DARWIN) #include +#include #endif #if defined(OS_WINDOWS) && (defined(__MINGW32__) || defined(__MINGW64__)) @@ -216,6 +217,24 @@ int get_num_procs(void) { } return nums; } + +void set_stack_limit(int limitMB){ + int result=0; + struct rlimit rl; + rlim_t StackSize; + + StackSize=limitMB*1024*1024; + result=getrlimit(RLIMIT_STACK, &rl); + if(result==0){ + if(rl.rlim_cur < StackSize){ + rl.rlim_cur=StackSize; + result=setrlimit(RLIMIT_STACK, &rl); + if(result !=0){ + fprintf(stderr, "OpenBLAS: set stack limit error =%d\n", result); + } + } + } +} #endif /* @@ -1248,11 +1267,18 @@ void CONSTRUCTOR gotoblas_init(void) { if (gotoblas_initialized) return; + #ifdef PROFILE moncontrol (0); #endif #ifdef DYNAMIC_ARCH +#if defined(SMP) && defined(OS_DARWIN) && MAX_CPU_NUMBER > 128 + //Set stack limit to 16MB on Mac OS X + //when NUM_THREADS>128 and DYNAMIC_ARCH=1. + //Prevent the SEGFAULT bug. + set_stack_limit(16); +#endif gotoblas_dynamic_init(); #endif