Skip to content

Commit

Permalink
Try to fix multireduce tests
Browse files Browse the repository at this point in the history
It is undefined behavior to construct a uniform_int_distribution
with min > max
  • Loading branch information
MrBurmark committed Jul 25, 2024
1 parent 8b0b467 commit 87cb673
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,15 @@ ForallMultiReduceBasicTestImpl(const SEG_TYPE& seg,
test_range[i] = ~IDX_TYPE(0);
}

std::uniform_int_distribution<IDX_TYPE> work_per_iterate_distribution(0, num_bins);
{
std::uniform_int_distribution<IDX_TYPE> work_per_iterate_distribution(0, num_bins);

for (IDX_TYPE i = 0; i < idx_len; ++i) {
IDX_TYPE idx = seg_idx[i];
test_range[idx] = data_len;
data_len += work_per_iterate_distribution(rngen);
test_range[idx+1] = data_len;
for (IDX_TYPE i = 0; i < idx_len; ++i) {
IDX_TYPE idx = seg_idx[i];
test_range[idx] = data_len;
data_len += work_per_iterate_distribution(rngen);
test_range[idx+1] = data_len;
}
}

allocateForallTestData(data_len,
Expand All @@ -94,16 +96,19 @@ ForallMultiReduceBasicTestImpl(const SEG_TYPE& seg,
&check_bins,
&test_bins);

// use ints to initialize array here to avoid floating point precision issues
std::uniform_int_distribution<int> array_int_distribution(0, modval-1);
std::uniform_int_distribution<IDX_TYPE> bin_distribution(0, num_bins-1);
if (data_len > IDX_TYPE(0)) {

// use ints to initialize array here to avoid floating point precision issues
std::uniform_int_distribution<int> array_int_distribution(0, modval-1);
std::uniform_int_distribution<IDX_TYPE> bin_distribution(0, num_bins-1);

for (IDX_TYPE i = 0; i < data_len; ++i) {
test_array[i] = DATA_TYPE(array_int_distribution(rngen));

// this may use the same bin multiple times per iterate
test_bins[i] = bin_distribution(rngen);
for (IDX_TYPE i = 0; i < data_len; ++i) {
test_array[i] = DATA_TYPE(array_int_distribution(rngen));

// this may use the same bin multiple times per iterate
test_bins[i] = bin_distribution(rngen);
}
}

working_res.memcpy(working_range, test_range, sizeof(IDX_TYPE) * (idx_range+1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,17 @@ KernelMultiReduceNestedTestImpl(const SEGMENTS_TYPE& segments,
test_range[i] = ~IDX_TYPE(0);
}

std::uniform_int_distribution<IDX_TYPE> work_per_iterate_distribution(0, num_bins);

for (IDX_TYPE k : sk) {
for (IDX_TYPE j : sj) {
for (IDX_TYPE i : si) {
IDX_TYPE ii = (dimi * dimj * k) + (dimi * j) + i;
test_range[ii] = data_len;
data_len += work_per_iterate_distribution(rngen);
test_range[ii+1] = data_len;
{
std::uniform_int_distribution<IDX_TYPE> work_per_iterate_distribution(0, num_bins);

for (IDX_TYPE k : sk) {
for (IDX_TYPE j : sj) {
for (IDX_TYPE i : si) {
IDX_TYPE ii = (dimi * dimj * k) + (dimi * j) + i;
test_range[ii] = data_len;
data_len += work_per_iterate_distribution(rngen);
test_range[ii+1] = data_len;
}
}
}
}
Expand All @@ -108,16 +110,19 @@ KernelMultiReduceNestedTestImpl(const SEGMENTS_TYPE& segments,
&check_bins,
&test_bins);

// use ints to initialize array here to avoid floating point precision issues
std::uniform_int_distribution<int> array_int_distribution(0, modval-1);
std::uniform_int_distribution<IDX_TYPE> bin_distribution(0, num_bins-1);
if (data_len > IDX_TYPE(0)) {

// use ints to initialize array here to avoid floating point precision issues
std::uniform_int_distribution<int> array_int_distribution(0, modval-1);
std::uniform_int_distribution<IDX_TYPE> bin_distribution(0, num_bins-1);

for (IDX_TYPE i = 0; i < data_len; ++i) {
test_array[i] = DATA_TYPE(array_int_distribution(rngen));

// this may use the same bin multiple times per iterate
test_bins[i] = bin_distribution(rngen);
for (IDX_TYPE i = 0; i < data_len; ++i) {
test_array[i] = DATA_TYPE(array_int_distribution(rngen));

// this may use the same bin multiple times per iterate
test_bins[i] = bin_distribution(rngen);
}
}

working_res.memcpy(working_range, test_range, sizeof(IDX_TYPE) * (idx_range+1));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,15 +154,17 @@ LaunchMultiReduceNestedTestImpl(const SEGMENTS_TYPE& segments,
test_range[i] = ~IDX_TYPE(0);
}

std::uniform_int_distribution<IDX_TYPE> work_per_iterate_distribution(0, num_bins);

for (IDX_TYPE k : sk) {
for (IDX_TYPE j : sj) {
for (IDX_TYPE i : si) {
IDX_TYPE ii = (dimi * dimj * k) + (dimi * j) + i;
test_range[ii] = data_len;
data_len += work_per_iterate_distribution(rngen);
test_range[ii+1] = data_len;
{
std::uniform_int_distribution<IDX_TYPE> work_per_iterate_distribution(0, num_bins);

for (IDX_TYPE k : sk) {
for (IDX_TYPE j : sj) {
for (IDX_TYPE i : si) {
IDX_TYPE ii = (dimi * dimj * k) + (dimi * j) + i;
test_range[ii] = data_len;
data_len += work_per_iterate_distribution(rngen);
test_range[ii+1] = data_len;
}
}
}
}
Expand All @@ -179,16 +181,19 @@ LaunchMultiReduceNestedTestImpl(const SEGMENTS_TYPE& segments,
&check_bins,
&test_bins);

// use ints to initialize array here to avoid floating point precision issues
std::uniform_int_distribution<int> array_int_distribution(0, modval-1);
std::uniform_int_distribution<IDX_TYPE> bin_distribution(0, num_bins-1);
if (data_len > IDX_TYPE(0)) {

// use ints to initialize array here to avoid floating point precision issues
std::uniform_int_distribution<int> array_int_distribution(0, modval-1);
std::uniform_int_distribution<IDX_TYPE> bin_distribution(0, num_bins-1);

for (IDX_TYPE i = 0; i < data_len; ++i) {
test_array[i] = DATA_TYPE(array_int_distribution(rngen));

// this may use the same bin multiple times per iterate
test_bins[i] = bin_distribution(rngen);
for (IDX_TYPE i = 0; i < data_len; ++i) {
test_array[i] = DATA_TYPE(array_int_distribution(rngen));

// this may use the same bin multiple times per iterate
test_bins[i] = bin_distribution(rngen);
}
}

working_res.memcpy(working_range, test_range, sizeof(IDX_TYPE) * (idx_range+1));
Expand Down

0 comments on commit 87cb673

Please sign in to comment.