Introduce a portable EIGEN_SLEEP macro.

This commit is contained in:
Benoit Steiner 2016-12-09 14:52:15 -08:00
parent aafa97f4d2
commit 4deafd35b7
5 changed files with 15 additions and 20 deletions

View File

@ -53,8 +53,10 @@ typedef __int32 int32_t;
typedef unsigned __int32 uint32_t; typedef unsigned __int32 uint32_t;
typedef __int64 int64_t; typedef __int64 int64_t;
typedef unsigned __int64 uint64_t; typedef unsigned __int64 uint64_t;
#include <windows.h>
#else #else
#include <stdint.h> #include <stdint.h>
#include <unistd.h>
#endif #endif
#if __cplusplus > 199711 || EIGEN_COMP_MSVC >= 1900 #if __cplusplus > 199711 || EIGEN_COMP_MSVC >= 1900

View File

@ -88,11 +88,7 @@ static void initializeDeviceProp() {
#if __cplusplus >= 201103L #if __cplusplus >= 201103L
std::atomic_thread_fence(std::memory_order_acquire); std::atomic_thread_fence(std::memory_order_acquire);
#endif #endif
#if EIGEN_OS_WIN || EIGEN_OS_WIN64 EIGEN_SLEEP(1000);
Sleep(1000);
#else
sleep(1);
#endif
} }
} }
} }

View File

@ -51,4 +51,10 @@
#endif #endif
#if EIGEN_OS_WIN || EIGEN_OS_WIN64
#define EIGEN_SLEEP(n) Sleep(n)
#else
#define EIGEN_SLEEP(n) sleep(n*1000)
#endif
#endif #endif

View File

@ -10,8 +10,8 @@
#define EIGEN_USE_THREADS #define EIGEN_USE_THREADS
#include "main.h" #include "main.h"
#include <unistd.h>
#include "Eigen/CXX11/ThreadPool" #include "Eigen/CXX11/ThreadPool"
#include "Eigen/CXX11/Tensor"
static void test_create_destroy_empty_pool() static void test_create_destroy_empty_pool()
{ {
@ -109,7 +109,7 @@ static void test_cancel()
// Schedule a large number of closure that each sleeps for one second. This // Schedule a large number of closure that each sleeps for one second. This
// will keep the thread pool busy for much longer than the default test timeout. // will keep the thread pool busy for much longer than the default test timeout.
for (int i = 0; i < 1000; ++i) { for (int i = 0; i < 1000; ++i) {
tp.Schedule([]() { sleep(2); }); tp.Schedule([]() { EIGEN_SLEEP(2000); });
} }
// Cancel the processing of all the closures that are still pending. // Cancel the processing of all the closures that are still pending.

View File

@ -13,15 +13,6 @@
#include "main.h" #include "main.h"
#include <Eigen/CXX11/Tensor> #include <Eigen/CXX11/Tensor>
#if EIGEN_OS_WIN || EIGEN_OS_WIN64
#include <windows.h>
void sleep(int seconds) {
Sleep(seconds*1000);
}
#else
#include <unistd.h>
#endif
namespace { namespace {
@ -40,7 +31,7 @@ static void test_notification_single()
Eigen::Notification n; Eigen::Notification n;
std::function<void()> func = std::bind(&WaitAndAdd, &n, &counter); std::function<void()> func = std::bind(&WaitAndAdd, &n, &counter);
thread_pool.Schedule(func); thread_pool.Schedule(func);
sleep(1); EIGEN_SLEEP(1000);
// The thread should be waiting for the notification. // The thread should be waiting for the notification.
VERIFY_IS_EQUAL(counter, 0); VERIFY_IS_EQUAL(counter, 0);
@ -48,7 +39,7 @@ static void test_notification_single()
// Unblock the thread // Unblock the thread
n.Notify(); n.Notify();
sleep(1); EIGEN_SLEEP(1000);
// Verify the counter has been incremented // Verify the counter has been incremented
VERIFY_IS_EQUAL(counter, 1); VERIFY_IS_EQUAL(counter, 1);
@ -67,10 +58,10 @@ static void test_notification_multiple()
thread_pool.Schedule(func); thread_pool.Schedule(func);
thread_pool.Schedule(func); thread_pool.Schedule(func);
thread_pool.Schedule(func); thread_pool.Schedule(func);
sleep(1); EIGEN_SLEEP(1000);
VERIFY_IS_EQUAL(counter, 0); VERIFY_IS_EQUAL(counter, 0);
n.Notify(); n.Notify();
sleep(1); EIGEN_SLEEP(1000);
VERIFY_IS_EQUAL(counter, 4); VERIFY_IS_EQUAL(counter, 4);
} }