[INFRA] Import NVIDIA/CCCL upstream as optimization reference library
CCCL (CUDA C++ Core Libraries) provides: - CUB: device/block/warp-level GPU primitives (reduce, scan, sort, topk) - Thrust: high-level parallel algorithms (transform_reduce, sort, scan) - libcudacxx: CUDA C++ standard library (atomics, barriers, memory) - cudax: experimental features (memory resources, allocators) - Tuning policies: per-SM hardware-specific algorithm parameters Competition optimization vectors mapped to CCCL: - Output TPS (83% weight): warp_reduce, block_reduce, device_topk - Input TPS (14% weight): device_scan, block_load, prefetch - Cache TPS (3% weight): prefix caching strategy patterns - Memory (0.9 util): pooled/cached/buddy allocators Source: https://github.com/NVIDIA/cccl (shallow clone, HEAD only) License: Apache-2.0
This commit is contained in:
47
cccl_upstream/thrust/testing/trivial_sequence.cu
Normal file
47
cccl_upstream/thrust/testing/trivial_sequence.cu
Normal file
@@ -0,0 +1,47 @@
|
||||
#include <thrust/detail/trivial_sequence.h>
|
||||
#include <thrust/iterator/zip_iterator.h>
|
||||
#include <thrust/type_traits/is_contiguous_iterator.h>
|
||||
|
||||
#include <unittest/unittest.h>
|
||||
|
||||
template <typename Iterator>
|
||||
void test(Iterator first, Iterator last)
|
||||
{
|
||||
using System = typename thrust::iterator_system<Iterator>::type;
|
||||
System system;
|
||||
thrust::detail::trivial_sequence<Iterator, System> ts(system, first, last);
|
||||
using ValueType = typename ::cuda::std::iterator_traits<Iterator>::value_type;
|
||||
|
||||
ASSERT_EQUAL_QUIET((ValueType) ts.begin()[0], ValueType(0, 11));
|
||||
ASSERT_EQUAL_QUIET((ValueType) ts.begin()[1], ValueType(2, 11));
|
||||
ASSERT_EQUAL_QUIET((ValueType) ts.begin()[2], ValueType(1, 13));
|
||||
ASSERT_EQUAL_QUIET((ValueType) ts.begin()[3], ValueType(0, 10));
|
||||
ASSERT_EQUAL_QUIET((ValueType) ts.begin()[4], ValueType(1, 12));
|
||||
|
||||
ts.begin()[0] = ValueType(0, 0);
|
||||
ts.begin()[1] = ValueType(0, 0);
|
||||
ts.begin()[2] = ValueType(0, 0);
|
||||
ts.begin()[3] = ValueType(0, 0);
|
||||
ts.begin()[4] = ValueType(0, 0);
|
||||
|
||||
using TrivialIterator = typename thrust::detail::trivial_sequence<Iterator, System>::iterator_type;
|
||||
|
||||
ASSERT_EQUAL(thrust::is_contiguous_iterator_v<Iterator>, false);
|
||||
ASSERT_EQUAL(thrust::is_contiguous_iterator_v<TrivialIterator>, true);
|
||||
}
|
||||
|
||||
template <class Vector>
|
||||
void TestTrivialSequence()
|
||||
{
|
||||
Vector A{0, 2, 1, 0, 1};
|
||||
Vector B{11, 11, 13, 10, 12};
|
||||
|
||||
test(thrust::make_zip_iterator(A.begin(), B.begin()), thrust::make_zip_iterator(A.end(), B.end()));
|
||||
|
||||
Vector refA{0, 2, 1, 0, 1};
|
||||
ASSERT_EQUAL(A, refA);
|
||||
// ensure that values weren't modified
|
||||
Vector refB{11, 11, 13, 10, 12};
|
||||
ASSERT_EQUAL(B, refB);
|
||||
}
|
||||
DECLARE_VECTOR_UNITTEST(TestTrivialSequence);
|
||||
Reference in New Issue
Block a user