From: Marco Costalba Date: Tue, 12 Mar 2019 07:35:10 +0000 (+0100) Subject: Increase thread stack for OS X (#2035) X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=bad18bccb60c874410edd3f61624696d3abc3cbc Increase thread stack for OS X (#2035) On OS X threads other than the main thread are created with a reduced stack size of 512KB by default, this is dangerously low for deep searches, so adjust it to TH_STACK_SIZE. The implementation calls pthread_create() with proper stack size parameter. Verified for no regression at STC enabling the patch on all platforms where pthread is supported. LLR: 2.95 (-2.94,2.94) [-3.00,1.00] Total: 50873 W: 9768 L: 9700 D: 31405 No functional change. --- diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 01bbc7ef..7864486c 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -32,7 +32,7 @@ #include "../movegen.h" #include "../position.h" #include "../search.h" -#include "../thread_win32.h" +#include "../thread_win32_osx.h" #include "../types.h" #include "../uci.h" diff --git a/src/thread.h b/src/thread.h index 686441cb..af506609 100644 --- a/src/thread.h +++ b/src/thread.h @@ -32,7 +32,7 @@ #include "pawns.h" #include "position.h" #include "search.h" -#include "thread_win32.h" +#include "thread_win32_osx.h" /// Thread class keeps together all the thread-related stuff. We use @@ -46,7 +46,7 @@ class Thread { ConditionVariable cv; size_t idx; bool exit = false, searching = true; // Set before starting std::thread - std::thread stdThread; + NativeThread stdThread; public: explicit Thread(size_t); diff --git a/src/thread_win32.h b/src/thread_win32_osx.h similarity index 66% rename from src/thread_win32.h rename to src/thread_win32_osx.h index 5c914df3..88900540 100644 --- a/src/thread_win32.h +++ b/src/thread_win32_osx.h @@ -18,8 +18,8 @@ along with this program. If not, see . */ -#ifndef THREAD_WIN32_H_INCLUDED -#define THREAD_WIN32_H_INCLUDED +#ifndef THREAD_WIN32_OSX_H_INCLUDED +#define THREAD_WIN32_OSX_H_INCLUDED /// STL thread library used by mingw and gcc when cross compiling for Windows /// relies on libwinpthread. Currently libwinpthread implements mutexes directly @@ -33,6 +33,7 @@ #include #include +#include #if defined(_WIN32) && !defined(_MSC_VER) @@ -67,4 +68,45 @@ typedef std::condition_variable ConditionVariable; #endif -#endif // #ifndef THREAD_WIN32_H_INCLUDED +/// On OSX threads other than the main thread are created with a reduced stack +/// size of 512KB by default, this is dangerously low for deep searches, so +/// adjust it to TH_STACK_SIZE. The implementation calls pthread_create() with +/// proper stack size parameter. + +#if defined(__APPLE__) + +#include + +static const size_t TH_STACK_SIZE = 2 * 1024 * 1024; + +template > +void* start_routine(void* ptr) +{ + P* p = reinterpret_cast(ptr); + (p->first->*(p->second))(); // Call member function pointer + delete p; + return NULL; +} + +class NativeThread { + + pthread_t thread; + +public: + template> + explicit NativeThread(void(T::*fun)(), T* obj) { + pthread_attr_t attr_storage, *attr = &attr_storage; + pthread_attr_init(attr); + pthread_attr_setstacksize(attr, TH_STACK_SIZE); + pthread_create(&thread, attr, start_routine, new P(obj, fun)); + } + void join() { pthread_join(thread, NULL); } +}; + +#else // Default case: use STL classes + +typedef std::thread NativeThread; + +#endif + +#endif // #ifndef THREAD_WIN32_OSX_H_INCLUDED