3#include <thrust/copy.h>
4#include <thrust/count.h>
5#include <thrust/device_vector.h>
6#include <thrust/execution_policy.h>
11__host__ __device__ __forceinline__
bool
12is_factor_active(
const uint8_t active_val,
const uint8_t level) {
13 constexpr uint8_t NOT_MSB = 0x7F;
14 return (active_val & NOT_MSB) <= level && ((active_val & 0x80) == 0);
18__host__ __device__ __forceinline__
bool
19is_vertex_active(
const uint8_t *active_state,
const size_t vertex_id) {
20 return !(active_state[vertex_id] > 0);
25build_active_indices(
const thrust::device_vector<uint8_t> &active,
26 thrust::device_vector<size_t> &active_indices,
27 const size_t count,
const uint8_t level) {
30 const size_t active_count =
31 thrust::count_if(thrust::device, active.begin(), active.end(),
32 [level] __device__(
const uint8_t a) {
33 return is_factor_active(a, level);
37 active_indices.clear();
38 active_indices.resize(active_count);
41 thrust::copy_if(thrust::device, thrust::make_counting_iterator<size_t>(0),
42 thrust::make_counting_iterator<size_t>(count), active.begin(),
43 active_indices.begin(), [level] __device__(
const uint8_t a) {
44 return is_factor_active(a, level);
The top-level namespace for Graphite.
Definition eigen_solver.cpp:4