13 #include <type_traits>
21 namespace benchmarks {
25 const std::pair<core::Scalar, core::Scalar>& range,
34 scalar_t low = range.first.To<scalar_t>();
35 scalar_t high = range.second.To<scalar_t>();
37 using uniform_distribution = std::conditional_t<
38 std::is_same<scalar_t, bool>::value,
39 std::uniform_int_distribution<uint16_t>,
41 std::is_same<scalar_t, uint8_t>::value,
42 std::uniform_int_distribution<uint16_t>,
44 std::is_same<scalar_t, int8_t>::value,
45 std::uniform_int_distribution<int16_t>,
47 std::is_integral<scalar_t>::value,
48 std::uniform_int_distribution<scalar_t>,
50 std::is_floating_point<
52 std::uniform_real_distribution<
57 std::vector<std::default_random_engine> rng;
58 for (int64_t i = 0; i < num_threads; ++i) {
59 rng.emplace_back(seed + i);
61 uniform_distribution
dist(low, high);
64 int64_t start = random.
NumElements() * i / num_threads;
65 int64_t end = std::min<int64_t>(
68 for (int64_t idx = start; idx < end; ++idx) {
69 *
static_cast<scalar_t*
>(random_it.
GetPtr(idx)) =
dist(rng[i]);
74 return random.
To(device);
#define DISPATCH_DTYPE_TO_TEMPLATE_WITH_BOOL(DTYPE,...)
CLOUDVIEWER_HOST_DEVICE void * GetPtr(int64_t workload_idx) const
int64_t NumElements() const
static Tensor Empty(const SizeVector &shape, Dtype dtype, const Device &device=Device("CPU:0"))
Create a tensor with uninitialized values.
Tensor To(Dtype dtype, bool copy=false) const
static double dist(double x1, double y1, double x2, double y2)
core::Tensor Rand(const core::SizeVector &shape, size_t seed, const std::pair< core::Scalar, core::Scalar > &range, core::Dtype dtype, const core::Device &device)
Returns a Tensor with random values within the range range .
void ParallelFor(const Device &device, int64_t n, const func_t &func)
int EstimateMaxThreads()
Estimate the maximum number of threads to be used in a parallel region.
Generic file read and write utility for python interface.