1 // Copyright 2009-2020 Intel Corporation 2 // SPDX-License-Identifier: Apache-2.0 3 4 #include "TaskSys.h" 5 // ospray 6 #include "../../platform.h" 7 // stl 8 #include <thread> 9 10 namespace rkcommon { 11 namespace tasking { 12 namespace detail { 13 14 // TaskSys definitions ////////////////////////////////////////////////// 15 16 static std::unique_ptr<enki::TaskScheduler> g_ts; 17 18 // Interface definitions //////////////////////////////////////////////// 19 initTaskSystemInternal(int nThreads)20 void initTaskSystemInternal(int nThreads) 21 { 22 g_ts = std::unique_ptr<enki::TaskScheduler>(new enki::TaskScheduler()); 23 if (nThreads < 1) 24 nThreads = enki::GetNumHardwareThreads(); 25 g_ts->Initialize(nThreads); 26 } 27 numThreadsTaskSystemInternal()28 int numThreadsTaskSystemInternal() 29 { 30 return g_ts->GetNumTaskThreads(); 31 } 32 scheduleTaskInternal(Task * task)33 void scheduleTaskInternal(Task *task) 34 { 35 if (g_ts.get() == nullptr) 36 initTaskSystemInternal(-1); 37 38 g_ts->AddTaskSetToPipe(task); 39 } 40 waitInternal(Task * task)41 void waitInternal(Task *task) 42 { 43 g_ts->WaitforTask(task); 44 } 45 46 } // namespace detail 47 } // namespace tasking 48 } // namespace rkcommon 49