Files
project_6/cccl_upstream/thrust/testing/trivial_sequence.cu
EngineX CI 56fd68e7dd [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
2026-07-30 09:35:51 +00:00

48 lines
1.6 KiB
Plaintext

#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);