LIVE / thrust /testing /event.cu
Xu Ma
update
1c3c0d9
raw
history blame
4.68 kB
#include <thrust/detail/config.h>
#if THRUST_CPP_DIALECT >= 2011 && !defined(THRUST_LEGACY_GCC)
#include <unittest/unittest.h>
#include <unittest/util_async.h>
#include <thrust/event.h>
///////////////////////////////////////////////////////////////////////////////
__host__
void test_event_default_constructed()
{
THRUST_STATIC_ASSERT(
(std::is_same<
thrust::event<decltype(thrust::device)>
, thrust::unique_eager_event<decltype(thrust::device)>
>::value)
);
THRUST_STATIC_ASSERT(
(std::is_same<
thrust::event<decltype(thrust::device)>
, thrust::device_event
>::value)
);
THRUST_STATIC_ASSERT(
(std::is_same<
thrust::device_event
, thrust::device_unique_eager_event
>::value)
);
thrust::device_event e0;
ASSERT_EQUAL(false, e0.valid_stream());
ASSERT_THROWS_EQUAL(
e0.wait()
, thrust::event_error
, thrust::event_error(thrust::event_errc::no_state)
);
ASSERT_THROWS_EQUAL(
e0.stream()
, thrust::event_error
, thrust::event_error(thrust::event_errc::no_state)
);
}
DECLARE_UNITTEST(test_event_default_constructed);
///////////////////////////////////////////////////////////////////////////////
__host__
void test_event_new_stream()
{
auto e0 = thrust::device_event(thrust::new_stream);
ASSERT_EQUAL(true, e0.valid_stream());
ASSERT_NOT_EQUAL_QUIET(nullptr, e0.stream().native_handle());
e0.wait();
ASSERT_EQUAL(true, e0.ready());
}
DECLARE_UNITTEST(test_event_new_stream);
///////////////////////////////////////////////////////////////////////////////
__host__
void test_event_linear_chaining()
{
constexpr std::int64_t n = 1024;
// Create a new stream.
auto e0 = thrust::when_all();
auto const e0_stream = e0.stream().native_handle();
ASSERT_EQUAL(true, e0.valid_stream());
ASSERT_NOT_EQUAL_QUIET(nullptr, e0_stream);
thrust::device_event e1;
for (std::int64_t i = 0; i < n; ++i)
{
ASSERT_EQUAL(true, e0.valid_stream());
ASSERT_EQUAL(false, e1.valid_stream());
ASSERT_EQUAL(false, e1.ready());
ASSERT_EQUAL_QUIET(e0_stream, e0.stream().native_handle());
e1 = thrust::when_all(e0);
ASSERT_EQUAL(false, e0.valid_stream());
ASSERT_EQUAL(false, e0.ready());
ASSERT_EQUAL(true, e1.valid_stream());
ASSERT_EQUAL(e0_stream, e1.stream().native_handle());
std::swap(e0, e1);
}
}
DECLARE_UNITTEST(test_event_linear_chaining);
///////////////////////////////////////////////////////////////////////////////
__host__
void test_event_when_all()
{
// Create events with new streams.
auto e0 = thrust::when_all();
auto e1 = thrust::when_all();
auto e2 = thrust::when_all();
auto e3 = thrust::when_all();
auto e4 = thrust::when_all();
auto e5 = thrust::when_all();
auto e6 = thrust::when_all();
auto e7 = thrust::when_all();
auto const e0_stream = e0.stream().native_handle();
ASSERT_EQUAL(true, e0.valid_stream());
ASSERT_EQUAL(true, e1.valid_stream());
ASSERT_EQUAL(true, e2.valid_stream());
ASSERT_EQUAL(true, e3.valid_stream());
ASSERT_EQUAL(true, e4.valid_stream());
ASSERT_EQUAL(true, e5.valid_stream());
ASSERT_EQUAL(true, e6.valid_stream());
ASSERT_EQUAL(true, e7.valid_stream());
ASSERT_NOT_EQUAL_QUIET(nullptr, e0_stream);
ASSERT_NOT_EQUAL_QUIET(nullptr, e1.stream().native_handle());
ASSERT_NOT_EQUAL_QUIET(nullptr, e2.stream().native_handle());
ASSERT_NOT_EQUAL_QUIET(nullptr, e3.stream().native_handle());
ASSERT_NOT_EQUAL_QUIET(nullptr, e4.stream().native_handle());
ASSERT_NOT_EQUAL_QUIET(nullptr, e5.stream().native_handle());
ASSERT_NOT_EQUAL_QUIET(nullptr, e6.stream().native_handle());
ASSERT_NOT_EQUAL_QUIET(nullptr, e7.stream().native_handle());
auto e8 = thrust::when_all(e0, e1, e2, e3, e4, e5, e6, e7);
ASSERT_EQUAL(false, e0.valid_stream());
ASSERT_EQUAL(false, e1.valid_stream());
ASSERT_EQUAL(false, e2.valid_stream());
ASSERT_EQUAL(false, e3.valid_stream());
ASSERT_EQUAL(false, e4.valid_stream());
ASSERT_EQUAL(false, e5.valid_stream());
ASSERT_EQUAL(false, e6.valid_stream());
ASSERT_EQUAL(false, e7.valid_stream());
ASSERT_EQUAL(true, e8.valid_stream());
ASSERT_EQUAL(e0_stream, e8.stream().native_handle());
e8.wait();
ASSERT_EQUAL(false, e0.ready());
ASSERT_EQUAL(false, e1.ready());
ASSERT_EQUAL(false, e2.ready());
ASSERT_EQUAL(false, e3.ready());
ASSERT_EQUAL(false, e4.ready());
ASSERT_EQUAL(false, e5.ready());
ASSERT_EQUAL(false, e6.ready());
ASSERT_EQUAL(false, e7.ready());
ASSERT_EQUAL(true, e8.ready());
}
DECLARE_UNITTEST(test_event_when_all);
///////////////////////////////////////////////////////////////////////////////
#endif