From 1d4bc47805252b7b8859cc6d65bbad508aa95028 Mon Sep 17 00:00:00 2001 From: liaogang Date: Mon, 26 Sep 2016 17:27:43 +0800 Subject: [PATCH] support gettid() on MAC OS X --- paddle/cuda/src/hl_cuda_device.cc | 13 ++++++++++++- paddle/utils/Thread.h | 13 ++++++++++++- paddle/utils/ThreadLocal.h | 10 +++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/paddle/cuda/src/hl_cuda_device.cc b/paddle/cuda/src/hl_cuda_device.cc index f07538d6ba7..acd8e2fe6af 100644 --- a/paddle/cuda/src/hl_cuda_device.cc +++ b/paddle/cuda/src/hl_cuda_device.cc @@ -209,7 +209,18 @@ __thread cudaStream_t default_stream = 0; __thread bool g_sync_flag = true; bool hl_start_flag = false; -#define gettid() syscall(SYS_gettid) +inline pid_t gettid() { +#if defined(__APPLE__) || defined(__OSX__) + pid_t tid = syscall(SYS_thread_selfid); +#else + #ifndef __NR_gettid + #define __NR_gettid 224 + #endif + pid_t tid = syscall(__NR_gettid); +#endif + CHECK_NE(tid, -1); + return tid; +} void hl_init(int device) { CHECK(hl_start_flag) diff --git a/paddle/utils/Thread.h b/paddle/utils/Thread.h index 3e1d95ab1fc..f1352e75d73 100644 --- a/paddle/utils/Thread.h +++ b/paddle/utils/Thread.h @@ -18,7 +18,18 @@ limitations under the License. */ #include #include -inline pid_t gettid() { return syscall(SYS_gettid); } +inline pid_t gettid() { +#if defined(__APPLE__) || defined(__OSX__) + pid_t tid = syscall(SYS_thread_selfid); +#else + #ifndef __NR_gettid + #define __NR_gettid 224 + #endif + pid_t tid = syscall(__NR_gettid); +#endif + CHECK_NE(tid, -1); + return tid; +} #include "Queue.h" #include "ThreadLocal.h" diff --git a/paddle/utils/ThreadLocal.h b/paddle/utils/ThreadLocal.h index e782868f69a..686a1a99a4a 100644 --- a/paddle/utils/ThreadLocal.h +++ b/paddle/utils/ThreadLocal.h @@ -156,7 +156,15 @@ private: static void dataDestructor(void* p) { delete (T*)p; } void updateMap(T* p) { - pid_t tid = syscall(SYS_gettid); +#if defined(__APPLE__) || defined(__OSX__) + pid_t tid = syscall(SYS_thread_selfid); +#else + #ifndef __NR_gettid + #define __NR_gettid 224 + #endif + pid_t tid = syscall(__NR_gettid); +#endif + CHECK_NE(tid, -1); std::lock_guard guard(mutex_); auto ret = threadMap_.insert(std::make_pair(tid, p)); if (!ret.second) { -- GitLab