Skip to content

Commit

Permalink
Support MAC OS Sierra (#169)
Browse files Browse the repository at this point in the history
  • Loading branch information
gangliao authored and reyoung committed Oct 8, 2016
1 parent db38043 commit 0ab3322
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 13 deletions.
5 changes: 5 additions & 0 deletions cmake/flags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ foreach(flag ${COMMON_FLAGS})
safe_set_cxxflag(CMAKE_CXX_FLAGS ${flag})
endforeach()

# On Mac OS X build fat binaries with x86_64 architectures by default.
if (APPLE)
set (CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX" FORCE)
endif ()

# Release/Debug flags set by cmake. Such as -O3 -g -DNDEBUG etc.
# So, don't set these flags here.

Expand Down
6 changes: 5 additions & 1 deletion paddle/cuda/src/hl_cuda_device.cc
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,11 @@ bool hl_start_flag = false;

inline pid_t gettid() {
#if defined(__APPLE__) || defined(__OSX__)
pid_t tid = syscall(SYS_thread_selfid);
// syscall is deprecated: first deprecated in macOS 10.12.
// syscall is unsupported;
// syscall pid_t tid = syscall(SYS_thread_selfid);
uint64_t tid;
pthread_threadid_np(NULL, &tid);
#else
#ifndef __NR_gettid
#define __NR_gettid 224
Expand Down
3 changes: 2 additions & 1 deletion paddle/pserver/SocketChannel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,8 @@ void SocketChannel::writeMessage(const std::vector<struct iovec>& userIovs) {
std::vector<iovec> iovs;
iovs.reserve(userIovs.size() + 2);
iovs.push_back({&header, sizeof(header)});
iovs.push_back({&iovLengths[0], sizeof(iovLengths[0]) * header.numIovs});
iovs.push_back({&iovLengths[0], static_cast<size_t>(
sizeof(iovLengths[0]) * header.numIovs)});
iovs.insert(iovs.end(), userIovs.begin(), userIovs.end());

header.totalLength = 0;
Expand Down
2 changes: 2 additions & 0 deletions paddle/setup.py.in
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ from setuptools import setup, Extension
import numpy as np
import api.paddle_ld_flags
import platform
import os

system = platform.system().lower()

Expand Down Expand Up @@ -45,6 +46,7 @@ except:
if is_lin == True:
extra_links = ["-Xlinker", '-start-group'] + extra_links + ["-Xlinker", "-end-group"]
elif is_osx == True:
os.environ["ARCHFLAGS"] = "-arch x86_64"
extra_links = ["-Wl,-all_load"] + extra_links

include_dirs = [np.get_include(), "../"] # include numpy and paddle.
Expand Down
10 changes: 2 additions & 8 deletions paddle/utils/ThreadLocal.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ limitations under the License. */
#include <map>
#include <mutex>
#include <random>
#include "Util.h"
#include "Logging.h"

namespace paddle {
Expand Down Expand Up @@ -156,14 +157,7 @@ class ThreadLocalD {
static void dataDestructor(void* p) { delete (T*)p; }

void updateMap(T* p) {
#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
pid_t tid = getTID();
CHECK_NE(tid, -1);
std::lock_guard<std::mutex> guard(mutex_);
auto ret = threadMap_.insert(std::make_pair(tid, p));
Expand Down
6 changes: 5 additions & 1 deletion paddle/utils/Util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,11 @@ namespace paddle {

pid_t getTID() {
#if defined(__APPLE__) || defined(__OSX__)
pid_t tid = syscall(SYS_thread_selfid);
// syscall is deprecated: first deprecated in macOS 10.12.
// syscall is unsupported;
// syscall pid_t tid = syscall(SYS_thread_selfid);
uint64_t tid;
pthread_threadid_np(NULL, &tid);
#else
#ifndef __NR_gettid
#define __NR_gettid 224
Expand Down
20 changes: 18 additions & 2 deletions paddle/utils/arch/osx/Locks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ limitations under the License. */
#include "paddle/utils/Logging.h"
#include <dispatch/dispatch.h>
#include <libkern/OSAtomic.h>

#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
#include <os/lock.h>
#endif

namespace paddle {

class SemaphorePrivate {
Expand Down Expand Up @@ -50,21 +55,32 @@ void Semaphore::post() {

class SpinLockPrivate {
public:
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
os_unfair_lock lock_;
#else
SpinLockPrivate(): lock_(OS_SPINLOCK_INIT) {}

OSSpinLock lock_;
char padding_[64 - sizeof(OSSpinLock)]; // Padding to cache line size
#endif
char padding_[64 - sizeof(lock_)]; // Padding to cache line size
};

SpinLock::SpinLock(): m(new SpinLockPrivate()) {}
SpinLock::~SpinLock() { delete m; }

void SpinLock::lock() {
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
os_unfair_lock_lock(&m->lock_);
#else
OSSpinLockLock(&m->lock_);
#endif
}

void SpinLock::unlock() {
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
os_unfair_lock_unlock(&m->lock_);
#else
OSSpinLockUnlock(&m->lock_);
#endif
}


Expand Down

0 comments on commit 0ab3322

Please sign in to comment.