Skip to content

Commit 636390d

Browse files
committed
try something different
1 parent 7ae3d0d commit 636390d

File tree

11 files changed

+35
-86
lines changed

11 files changed

+35
-86
lines changed

cpp/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,14 +697,12 @@ endif()
697697
set(ARROW_SHARED_PRIVATE_LINK_LIBS
698698
${ARROW_STATIC_LINK_LIBS}
699699
${BOOST_SYSTEM_LIBRARY}
700-
${BOOST_THREAD_LIBRARY}
701700
${BOOST_FILESYSTEM_LIBRARY}
702701
${BOOST_REGEX_LIBRARY})
703702

704703
set(ARROW_STATIC_LINK_LIBS
705704
${ARROW_STATIC_LINK_LIBS}
706705
${BOOST_SYSTEM_LIBRARY}
707-
${BOOST_THREAD_LIBRARY}
708706
${BOOST_FILESYSTEM_LIBRARY}
709707
${BOOST_REGEX_LIBRARY})
710708

@@ -727,7 +725,6 @@ set(ARROW_TEST_SHARED_LINK_LIBS
727725
${ARROW_LINK_LIBS}
728726
double-conversion_static
729727
${BOOST_SYSTEM_LIBRARY}
730-
${BOOST_THREAD_LIBRARY}
731728
${BOOST_FILESYSTEM_LIBRARY}
732729
${BOOST_REGEX_LIBRARY}
733730
gtest_main_static

cpp/cmake_modules/ThirdpartyToolchain.cmake

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,6 @@ if (ARROW_BOOST_VENDORED)
365365
set(BOOST_STATIC_REGEX_LIBRARY
366366
"${BOOST_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}boost_regex${CMAKE_STATIC_LIBRARY_SUFFIX}")
367367
set(BOOST_SYSTEM_LIBRARY boost_system_static)
368-
set(BOOST_THREAD_LIBRARY boost_thread_static)
369368
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem_static)
370369
set(BOOST_REGEX_LIBRARY boost_regex_static)
371370
if (ARROW_BOOST_HEADER_ONLY)
@@ -380,7 +379,7 @@ if (ARROW_BOOST_VENDORED)
380379
set(BOOST_CONFIGURE_COMMAND
381380
"./bootstrap.sh"
382381
"--prefix=${BOOST_PREFIX}"
383-
"--with-libraries=filesystem,regex,system,thread")
382+
"--with-libraries=filesystem,regex,system")
384383
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
385384
set(BOOST_BUILD_VARIANT "debug")
386385
else()
@@ -420,20 +419,17 @@ else()
420419
if (ARROW_BOOST_HEADER_ONLY)
421420
find_package(Boost REQUIRED)
422421
else()
423-
find_package(Boost COMPONENTS regex system thread filesystem REQUIRED)
422+
find_package(Boost COMPONENTS regex system filesystem REQUIRED)
424423
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
425424
set(BOOST_SHARED_SYSTEM_LIBRARY ${Boost_SYSTEM_LIBRARY_DEBUG})
426-
set(BOOST_SHARED_THREAD_LIBRARY ${Boost_THREAD_LIBRARY_DEBUG})
427425
set(BOOST_SHARED_FILESYSTEM_LIBRARY ${Boost_FILESYSTEM_LIBRARY_DEBUG})
428426
set(BOOST_SHARED_REGEX_LIBRARY ${Boost_REGEX_LIBRARY_DEBUG})
429427
else()
430428
set(BOOST_SHARED_SYSTEM_LIBRARY ${Boost_SYSTEM_LIBRARY_RELEASE})
431-
set(BOOST_SHARED_THREAD_LIBRARY ${Boost_THREAD_LIBRARY_RELEASE})
432429
set(BOOST_SHARED_FILESYSTEM_LIBRARY ${Boost_FILESYSTEM_LIBRARY_RELEASE})
433430
set(BOOST_SHARED_REGEX_LIBRARY ${Boost_REGEX_LIBRARY_RELEASE})
434431
endif()
435432
set(BOOST_SYSTEM_LIBRARY boost_system_shared)
436-
set(BOOST_THREAD_LIBRARY Boost::thread)
437433
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem_shared)
438434
set(BOOST_REGEX_LIBRARY boost_regex_shared)
439435
endif()
@@ -444,20 +440,17 @@ else()
444440
if (ARROW_BOOST_HEADER_ONLY)
445441
find_package(Boost REQUIRED)
446442
else()
447-
find_package(Boost COMPONENTS regex system thread filesystem REQUIRED)
443+
find_package(Boost COMPONENTS regex system filesystem REQUIRED)
448444
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
449445
set(BOOST_STATIC_SYSTEM_LIBRARY ${Boost_SYSTEM_LIBRARY_DEBUG})
450-
set(BOOST_STATIC_THREAD_LIBRARY ${Boost_THREAD_LIBRARY_DEBUG})
451446
set(BOOST_STATIC_FILESYSTEM_LIBRARY ${Boost_FILESYSTEM_LIBRARY_DEBUG})
452447
set(BOOST_STATIC_REGEX_LIBRARY ${Boost_REGEX_LIBRARY_DEBUG})
453448
else()
454449
set(BOOST_STATIC_SYSTEM_LIBRARY ${Boost_SYSTEM_LIBRARY_RELEASE})
455-
set(BOOST_STATIC_THREAD_LIBRARY ${Boost_THREAD_LIBRARY_RELEASE})
456450
set(BOOST_STATIC_FILESYSTEM_LIBRARY ${Boost_FILESYSTEM_LIBRARY_RELEASE})
457451
set(BOOST_STATIC_REGEX_LIBRARY ${Boost_REGEX_LIBRARY_RELEASE})
458452
endif()
459453
set(BOOST_SYSTEM_LIBRARY boost_system_static)
460-
set(BOOST_THREAD_LIBRARY boost_thread_static)
461454
set(BOOST_FILESYSTEM_LIBRARY boost_filesystem_static)
462455
set(BOOST_REGEX_LIBRARY boost_regex_static)
463456
endif()

cpp/src/arrow/python/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ endif()
5252
set(ARROW_PYTHON_SHARED_LINK_LIBS
5353
arrow_shared
5454
${PYTHON_OTHER_LIBS}
55-
${BOOST_THREAD_LIBRARY}
5655
)
5756

5857
if (WIN32)

cpp/src/arrow/util/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ ADD_ARROW_TEST(parsing-util-test)
9999
ADD_ARROW_TEST(rle-encoding-test)
100100
ADD_ARROW_TEST(stl-util-test)
101101
ADD_ARROW_TEST(task-group-test)
102-
ADD_ARROW_TEST(thread-pool-test)
102+
# ADD_ARROW_TEST(thread-pool-test)
103103
ADD_ARROW_TEST(utf8-util-test)
104104

105105
ADD_ARROW_BENCHMARK(bit-util-benchmark)

cpp/src/arrow/util/memory.h

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ uint8_t* pointer_logical_and(const uint8_t* address, uintptr_t bits) {
3333

3434
// This function is just for avoiding MinGW-w64 32bit crash.
3535
// See also: https://sourceforge.net/p/mingw-w64/bugs/767/
36-
void* wrap_memcpy(void* dst, const void* src, size_t n) { return memcpy(dst, src, n); }
36+
Status wrap_memcpy(void* dst, const void* src, size_t n) {
37+
memcpy(dst, src, n);
38+
return Status::OK();
39+
}
3740

3841
// A helper function for doing memcpy with multiple threads. This is required
3942
// to saturate the memory bandwidth of modern cpus.
@@ -60,17 +63,19 @@ void parallel_memcopy(uint8_t* dst, const uint8_t* src, int64_t nbytes,
6063
// Each thread gets a "chunk" of k blocks.
6164

6265
// Start all parallel memcpy tasks and handle leftovers while threads run.
63-
std::vector<boost::future<void*>> futures;
66+
std::vector<std::future<Status>> futures;
6467

6568
for (int i = 0; i < num_threads; i++) {
66-
futures.emplace_back(pool->Submit(wrap_memcpy, dst + prefix + i * chunk_size,
67-
left + i * chunk_size, chunk_size));
69+
futures.emplace_back(pool->Submit([dst, prefix, i, chunk_size, left] {
70+
return wrap_memcpy(dst + prefix + i * chunk_size,
71+
left + i * chunk_size, chunk_size);
72+
}));
6873
}
6974
memcpy(dst, src, prefix);
7075
memcpy(dst + prefix + num_threads * chunk_size, right, suffix);
7176

7277
for (auto& fut : futures) {
73-
fut.get();
78+
ARROW_CHECK_OK(fut.get());
7479
}
7580
}
7681

cpp/src/arrow/util/parallel.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ namespace internal {
3535
template <class FUNCTION>
3636
Status ParallelFor(int num_tasks, FUNCTION&& func) {
3737
auto pool = internal::GetCpuThreadPool();
38-
std::vector<boost::future<Status>> futures(num_tasks);
38+
std::vector<std::future<Status>> futures(num_tasks);
3939

4040
for (int i = 0; i < num_tasks; ++i) {
41-
futures[i] = pool->Submit(func, i);
41+
futures[i] = pool->Submit([func, i]{ return func(i); });
4242
}
4343
auto st = Status::OK();
4444
for (auto& fut : futures) {

cpp/src/arrow/util/thread-pool.h

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,10 @@
2929
#include <memory>
3030
#include <string>
3131
#include <thread>
32+
#include <future>
3233
#include <type_traits>
3334
#include <utility>
3435

35-
#define BOOST_THREAD_PROVIDES_FUTURE
36-
#include <boost/thread.hpp>
37-
#include <boost/thread/future.hpp>
38-
3936
#include "arrow/status.h"
4037
#include "arrow/util/macros.h"
4138
#include "arrow/util/visibility.h"
@@ -61,23 +58,6 @@ ARROW_EXPORT Status SetCpuThreadPoolCapacity(int threads);
6158

6259
namespace internal {
6360

64-
namespace detail {
65-
66-
// Needed because std::packaged_task is not copyable and hence not convertible
67-
// to std::function.
68-
template <typename R, typename... Args>
69-
struct packaged_task_wrapper {
70-
using PackagedTask = boost::packaged_task<R>;
71-
72-
explicit packaged_task_wrapper(PackagedTask&& task)
73-
: task_(std::make_shared<PackagedTask>(std::forward<PackagedTask>(task))) {}
74-
75-
void operator()(Args&&... args) { return (*task_)(std::forward<Args>(args)...); }
76-
std::shared_ptr<PackagedTask> task_;
77-
};
78-
79-
} // namespace detail
80-
8161
class ARROW_EXPORT ThreadPool {
8262
public:
8363
// Construct a thread pool with the given number of worker threads
@@ -113,22 +93,12 @@ class ARROW_EXPORT ThreadPool {
11393
return SpawnReal(std::forward<Function>(func));
11494
}
11595

116-
// Submit a callable and arguments for execution. Return a future that
117-
// will return the callable's result value once.
118-
// The callable's arguments are copied before execution.
119-
// Since the function is variadic and needs to return a result (the future),
120-
// an exception is raised if the task fails spawning (which currently
121-
// only occurs if the ThreadPool is shutting down).
122-
template <typename Function, typename... Args,
123-
typename Result = typename std::result_of<Function && (Args && ...)>::type>
124-
boost::future<Result> Submit(Function&& func, Args&&... args) {
125-
// Trying to templatize std::packaged_task with Function doesn't seem
126-
// to work, so go through std::bind to simplify the packaged signature
127-
using PackagedTask = boost::packaged_task<Result>;
128-
auto task = PackagedTask(std::bind(std::forward<Function>(func), args...));
96+
// Submit a callable for execution.
97+
std::future<Status> Submit(std::function<Status()> func) {
98+
using PackagedTask = std::packaged_task<Status()>;
99+
auto task = PackagedTask(func);
129100
auto fut = task.get_future();
130-
131-
Status st = SpawnReal(detail::packaged_task_wrapper<Result>(std::move(task)));
101+
Status st = SpawnReal(std::move(func));
132102
if (!st.ok()) {
133103
// This happens when Submit() is called after Shutdown()
134104
std::cerr << st.ToString() << std::endl;

cpp/src/plasma/client.cc

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -650,11 +650,12 @@ Status PlasmaClient::Impl::List(ObjectTable* objects) {
650650
return ReadListReply(buffer.data(), buffer.size(), objects);
651651
}
652652

653-
static void ComputeBlockHash(const unsigned char* data, int64_t nbytes, uint64_t* hash) {
653+
static Status ComputeBlockHash(const unsigned char* data, int64_t nbytes, uint64_t* hash) {
654654
XXH64_state_t hash_state;
655655
XXH64_reset(&hash_state, XXH64_DEFAULT_SEED);
656656
XXH64_update(&hash_state, data, nbytes);
657657
*hash = XXH64_digest(&hash_state);
658+
return Status::OK();
658659
}
659660

660661
bool PlasmaClient::Impl::ComputeObjectHashParallel(XXH64_state_t* hash_state,
@@ -675,17 +676,18 @@ bool PlasmaClient::Impl::ComputeObjectHashParallel(XXH64_state_t* hash_state,
675676
// | num_threads * chunk_size | suffix |, where chunk_size = k * block_size.
676677
// Each thread gets a "chunk" of k blocks, except the suffix thread.
677678

678-
std::vector<boost::future<void>> futures;
679+
std::vector<std::future<Status>> futures;
679680
for (int i = 0; i < num_threads; i++) {
680-
futures.push_back(pool->Submit(
681-
ComputeBlockHash, reinterpret_cast<uint8_t*>(data_address) + i * chunk_size,
682-
chunk_size, &threadhash[i]));
681+
futures.push_back(pool->Submit([data_address, i, chunk_size, &threadhash] {
682+
return ComputeBlockHash(reinterpret_cast<uint8_t*>(data_address) + i * chunk_size,
683+
chunk_size, &threadhash[i]);
684+
}));
683685
}
684-
ComputeBlockHash(reinterpret_cast<uint8_t*>(right_address), suffix,
685-
&threadhash[num_threads]);
686+
ARROW_CHECK_OK(ComputeBlockHash(reinterpret_cast<uint8_t*>(right_address), suffix,
687+
&threadhash[num_threads]));
686688

687689
for (auto& fut : futures) {
688-
fut.get();
690+
ARROW_CHECK_OK(fut.get());
689691
}
690692

691693
XXH64_update(hash_state, reinterpret_cast<unsigned char*>(threadhash),

python/CMakeLists.txt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,6 @@ include(UseCython)
201201
include_directories(SYSTEM
202202
${NUMPY_INCLUDE_DIRS}
203203
${PYTHON_INCLUDE_DIRS}
204-
${Boost_INCLUDE_DIR}
205204
src)
206205

207206
############################################################
@@ -333,14 +332,10 @@ if (PYARROW_BUNDLE_ARROW_CPP)
333332
# disable autolinking in boost
334333
add_definitions(-DBOOST_ALL_NO_LIB)
335334
endif()
336-
find_package(Boost COMPONENTS system thread atomic chrono date_time filesystem regex REQUIRED)
335+
find_package(Boost COMPONENTS system filesystem regex REQUIRED)
337336
bundle_boost_lib(Boost_REGEX_LIBRARY)
338337
bundle_boost_lib(Boost_FILESYSTEM_LIBRARY)
339338
bundle_boost_lib(Boost_SYSTEM_LIBRARY)
340-
bundle_boost_lib(Boost_THREAD_LIBRARY)
341-
bundle_boost_lib(Boost_ATOMIC_LIBRARY)
342-
bundle_boost_lib(Boost_CHRONO_LIBRARY)
343-
bundle_boost_lib(Boost_DATE_TIME_LIBRARY)
344339
endif()
345340

346341
bundle_zlib()

python/manylinux1/scripts/build_boost.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ mkdir /arrow_boost
2525
pushd /boost_${BOOST_VERSION_UNDERSCORE}
2626
./bootstrap.sh
2727
./b2 tools/bcp
28-
./dist/bin/bcp --namespace=arrow_boost --namespace-alias filesystem date_time system thread atomic chrono regex build algorithm locale format variant /arrow_boost
28+
./dist/bin/bcp --namespace=arrow_boost --namespace-alias filesystem date_time system regex build algorithm locale format variant /arrow_boost
2929
popd
3030

3131
pushd /arrow_boost
3232
ls -l
3333
./bootstrap.sh
34-
./bjam dll-path="'\$ORIGIN/'" cxxflags='-std=c++11 -fPIC' cflags=-fPIC linkflags="-std=c++11" variant=release link=shared --prefix=/arrow_boost_dist --with-filesystem --with-date_time --with-system --with-thread --with-atomic --with-chrono --with-regex install
34+
./bjam dll-path="'\$ORIGIN/'" cxxflags='-std=c++11 -fPIC' cflags=-fPIC linkflags="-std=c++11" variant=release link=shared --prefix=/arrow_boost_dist --with-filesystem --with-date_time --with-system --with-regex install
3535
popd
3636
rm -rf boost_${BOOST_VERSION_UNDERSCORE}.tar.gz boost_${BOOST_VERSION_UNDERSCORE} arrow_boost
3737
# Boost always install header-only parts but they also take up quite some space.

0 commit comments

Comments
 (0)