Skip to content

Commit

Permalink
[SYCL][Graph] Verbose E2E error messages
Browse files Browse the repository at this point in the history
The current error output from Graph E2E tests isn't
particularly informative on the data that caused an
assert to fail verification. As asserts are done on the
whole container, rather than individual values. This
change verifies each value individually so that a
more informative error message can be printed when
the assert fails. This is helpful for debugging
issues that appear in CI but are hard to reproduce locally.

Co-authored-by: Maxime France-Pillois <maxime.francepillois@codeplay.com>
  • Loading branch information
EwanC and mfrancepillois committed Oct 26, 2023
1 parent 8d7396d commit d65e8d9
Show file tree
Hide file tree
Showing 48 changed files with 198 additions and 133 deletions.
6 changes: 3 additions & 3 deletions sycl/test-e2e/Graph/Explicit/depends_on.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ int main() {

Queue.submit([&](handler &CGH) { CGH.ext_oneapi_graph(ExecGraph); }).wait();

constexpr int ref = 42 * 2;
constexpr int Ref = 42 * 2;
std::vector<int> Output(N);
Queue.memcpy(Output.data(), Arr, N * sizeof(int)).wait();
for (int i = 0; i < N; i++)
assert(Output[i] == ref);
for (size_t i = 0; i < N; i++)
assert(check_value(i, Output[i], Ref, "Ref"));

sycl::free(Arr, Queue);

Expand Down
3 changes: 2 additions & 1 deletion sycl/test-e2e/Graph/Explicit/enqueue_ordering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,9 @@ int main() {

Queue.wait();

const int Expected = 22;
for (size_t i = 0; i < N; i++) {
assert(Arr[i] == 22);
assert(check_value(i, Arr[i], Expected, "Expected"));
}

// Free the allocated memory
Expand Down
5 changes: 3 additions & 2 deletions sycl/test-e2e/Graph/Explicit/node_ordering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@ int main() {
std::vector<int> Output(N);
Queue.memcpy(Output.data(), X, N * sizeof(int)).wait();

for (int i = 0; i < N; i++)
assert(Output[i] == 8);
const int Expected = 8;
for (size_t i = 0; i < N; i++)
assert(check_value(i, Output[i], Expected, "Expected"));

sycl::free(X, Queue);

Expand Down
14 changes: 8 additions & 6 deletions sycl/test-e2e/Graph/Explicit/single_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,22 @@ int main() {

std::vector<int> Output(N);
Queue.memcpy(Output.data(), Arr, N * sizeof(int)).wait();
for (int i = 0; i < N; i++)
assert(Output[i] == 0);
int Expected = 0;
for (size_t i = 0; i < N; i++)
assert(check_value(i, Output[i], Expected, "Expected"));

auto ExecGraph = Graph.finalize();

Queue.memcpy(Output.data(), Arr, N * sizeof(int)).wait();
for (int i = 0; i < N; i++)
assert(Output[i] == 0);
for (size_t i = 0; i < N; i++)
assert(check_value(i, Output[i], Expected, "Expected"));

Queue.submit([&](handler &CGH) { CGH.ext_oneapi_graph(ExecGraph); }).wait();

Queue.memcpy(Output.data(), Arr, N * sizeof(int)).wait();
for (int i = 0; i < N; i++)
assert(Output[i] == 3);
Expected = 3;
for (size_t i = 0; i < N; i++)
assert(check_value(i, Output[i], Expected, "Expected"));

sycl::free(Arr, Queue);

Expand Down
6 changes: 4 additions & 2 deletions sycl/test-e2e/Graph/Inputs/add_nodes_after_finalize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,10 @@ int main() {
free(PtrC, Queue);
free(PtrOut, Queue);

assert(ReferenceC == DataC);
assert(ReferenceOut == DataOut);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));
assert(check_value(i, ReferenceOut[i], DataOut[i], "DataOut"));
}

return 0;
}
6 changes: 3 additions & 3 deletions sycl/test-e2e/Graph/Inputs/basic_buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ int main() {
host_accessor HostAccC(BufferC);

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == HostAccA[i]);
assert(ReferenceB[i] == HostAccB[i]);
assert(ReferenceC[i] == HostAccC[i]);
assert(check_value(i, ReferenceA[i], HostAccA[i], "HostAccA"));
assert(check_value(i, ReferenceB[i], HostAccB[i], "HostAccB"));
assert(check_value(i, ReferenceC[i], HostAccC[i], "HostAccC"));
}

return 0;
Expand Down
8 changes: 5 additions & 3 deletions sycl/test-e2e/Graph/Inputs/basic_usm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,11 @@ int main() {
free(PtrB, Queue);
free(PtrC, Queue);

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));
}

return 0;
}
8 changes: 5 additions & 3 deletions sycl/test-e2e/Graph/Inputs/basic_usm_host.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ int main() {
free(PtrB, Queue);
free(PtrC, Queue);

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));
}

return 0;
}
8 changes: 5 additions & 3 deletions sycl/test-e2e/Graph/Inputs/basic_usm_mixed.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,11 @@ int main() {
free(PtrB, Queue);
free(PtrC, Queue);

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));
}

return 0;
}
8 changes: 5 additions & 3 deletions sycl/test-e2e/Graph/Inputs/basic_usm_shared.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ int main() {
free(PtrB, Queue);
free(PtrC, Queue);

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));
}

return 0;
}
8 changes: 5 additions & 3 deletions sycl/test-e2e/Graph/Inputs/basic_usm_system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ int main() {
free(PtrB, Queue);
delete[] PtrC;

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));
}

return 0;
}
8 changes: 4 additions & 4 deletions sycl/test-e2e/Graph/Inputs/buffer_copy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ int main() {

// Create reference data for output
std::vector<T> ReferenceA(DataA), ReferenceB(DataB), ReferenceC(DataC);
for (unsigned i = 0; i < Iterations; i++) {
for (size_t i = 0; i < Iterations; i++) {
for (size_t j = 0; j < Size; j++) {
ReferenceA[j] = ReferenceB[j];
ReferenceA[j] += ModValue;
Expand Down Expand Up @@ -120,9 +120,9 @@ int main() {
host_accessor HostAccC(BufferC);

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == HostAccA[i]);
assert(ReferenceB[i] == HostAccB[i]);
assert(ReferenceC[i] == HostAccC[i]);
assert(check_value(i, ReferenceA[i], HostAccA[i], "HostAccA"));
assert(check_value(i, ReferenceB[i], HostAccB[i], "HostAccB"));
assert(check_value(i, ReferenceC[i], HostAccC[i], "HostAccC"));
}

return 0;
Expand Down
9 changes: 5 additions & 4 deletions sycl/test-e2e/Graph/Inputs/buffer_copy_2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ int main() {

// Create reference data for output
std::vector<T> ReferenceA(DataA), ReferenceB(DataB), ReferenceC(DataC);
for (unsigned i = 0; i < Iterations; i++) {
for (size_t i = 0; i < Iterations; i++) {
for (size_t j = 0; j < Size * Size; j++) {
ReferenceA[j] = ReferenceB[j];
ReferenceA[j] += ModValue;
Expand Down Expand Up @@ -116,9 +116,10 @@ int main() {

for (size_t i = 0; i < Size; i++) {
for (size_t j = 0; j < Size; j++) {
assert(ReferenceA[i * Size + j] == HostAccA[i][j]);
assert(ReferenceB[i * Size + j] == HostAccB[i][j]);
assert(ReferenceC[i * Size + j] == HostAccC[i][j]);
const size_t index = i * Size + j;
assert(check_value(index, ReferenceA[index], HostAccA[i][j], "HostAccA"));
assert(check_value(index, ReferenceB[index], HostAccB[i][j], "HostAccB"));
assert(check_value(index, ReferenceC[index], HostAccC[i][j], "HostAccC"));
}
}

Expand Down
2 changes: 1 addition & 1 deletion sycl/test-e2e/Graph/Inputs/buffer_copy_host2target.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ int main() {
host_accessor HostAccA(BufferA);

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == HostAccA[i]);
assert(check_value(i, ReferenceA[i], HostAccA[i], "HostAccA"));
}

return 0;
Expand Down
3 changes: 2 additions & 1 deletion sycl/test-e2e/Graph/Inputs/buffer_copy_host2target_2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ int main() {

for (size_t i = 0; i < Size; i++) {
for (size_t j = 0; j < Size; j++) {
assert(ReferenceA[i * Size + j] == HostAccA[i][j]);
const size_t index = i * Size + j;
assert(check_value(index, ReferenceA[index], HostAccA[i][j], "HostAccA"));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ int main() {
host_accessor HostAccA(BufferA);

for (size_t i = 0; i < Size + Offset; i++) {
assert(ReferenceA[i] == HostAccA[i]);
assert(check_value(i, ReferenceA[i], HostAccA[i], "HostAccA"));
}

return 0;
Expand Down
4 changes: 2 additions & 2 deletions sycl/test-e2e/Graph/Inputs/buffer_copy_offsets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ int main() {
host_accessor HostAccB(BufferB);

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == HostAccA[i]);
assert(ReferenceB[i] == HostAccB[i]);
assert(check_value(i, ReferenceA[i], HostAccA[i], "HostAccA"));
assert(check_value(i, ReferenceB[i], HostAccB[i], "HostAccB"));
}

return 0;
Expand Down
4 changes: 2 additions & 2 deletions sycl/test-e2e/Graph/Inputs/buffer_copy_target2host.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ int main() {
}

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == DataA[i]);
assert(ReferenceB[i] == DataB[i]);
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
}

return 0;
Expand Down
4 changes: 2 additions & 2 deletions sycl/test-e2e/Graph/Inputs/buffer_copy_target2host_2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ int main() {
host_accessor HostAccA(BufferA);

for (size_t i = 0; i < Size * Size; i++) {
assert(ReferenceA[i] == DataA[i]);
assert(ReferenceB[i] == DataB[i]);
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
}

return 0;
Expand Down
4 changes: 2 additions & 2 deletions sycl/test-e2e/Graph/Inputs/buffer_copy_target2host_offset.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ int main() {
}

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == DataA[i]);
assert(ReferenceB[i] == DataB[i]);
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
}

return 0;
Expand Down
8 changes: 5 additions & 3 deletions sycl/test-e2e/Graph/Inputs/buffer_ordering.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ int main() {
});
});

const int Zero = 0;
for (size_t i = 0; i < N; i++) {
assert(Arr[i] == 0);
assert(check_value(i, Arr[i], Zero, "Zero"));
}

// Buffer elements set to 4
Expand All @@ -60,7 +61,7 @@ int main() {
auto ExecGraph = Graph.finalize();

for (size_t i = 0; i < N; i++) {
assert(Arr[i] == 0);
assert(check_value(i, Arr[i], Zero, "Zero"));
}

// Buffer elements set to 8
Expand Down Expand Up @@ -96,8 +97,9 @@ int main() {
Queue.wait();
}

const int Expected = 22;
for (size_t i = 0; i < N; i++) {
assert(Arr[i] == 22);
assert(check_value(i, Arr[i], Expected, "Expected"));
}

return 0;
Expand Down
16 changes: 9 additions & 7 deletions sycl/test-e2e/Graph/Inputs/double_buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ int main() {
add_nodes(GraphUpdate, Queue, Size, PtrA, PtrB, PtrC);

event Event;
for (unsigned i = 0; i < Iterations; i++) {
for (size_t i = 0; i < Iterations; i++) {
Event = Queue.submit([&](handler &CGH) {
CGH.depends_on(Event);
CGH.ext_oneapi_graph(ExecGraph);
Expand Down Expand Up @@ -90,13 +90,15 @@ int main() {
free(PtrB2, Queue);
free(PtrC2, Queue);

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));

assert(ReferenceA2 == DataA2);
assert(ReferenceB2 == DataB2);
assert(ReferenceC2 == DataC2);
assert(check_value(i, ReferenceA2[i], DataA2[i], "DataA2"));
assert(check_value(i, ReferenceB2[i], DataB2[i], "DataB2"));
assert(check_value(i, ReferenceC2[i], DataC2[i], "DataC2"));
}

return 0;
}
5 changes: 3 additions & 2 deletions sycl/test-e2e/Graph/Inputs/empty_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ int main() {
std::vector<int> HostData(N);
Queue.memcpy(HostData.data(), Arr, N * sizeof(int)).wait();

for (int i = 0; i < N; i++)
assert(HostData[i] == 1);
const int Expected = 1;
for (size_t i = 0; i < N; i++)
assert(check_value(i, HostData[i], Expected, "Expected"));

sycl::free(Arr, Queue);

Expand Down
6 changes: 3 additions & 3 deletions sycl/test-e2e/Graph/Inputs/event_status_querying.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,9 @@ int main() {
host_accessor HostAccC(BufferC);

for (size_t i = 0; i < Size; i++) {
assert(ReferenceA[i] == HostAccA[i]);
assert(ReferenceB[i] == HostAccB[i]);
assert(ReferenceC[i] == HostAccC[i]);
assert(check_value(i, ReferenceA[i], HostAccA[i], "HostAccA"));
assert(check_value(i, ReferenceB[i], HostAccB[i], "HostAccB"));
assert(check_value(i, ReferenceC[i], HostAccC[i], "HostAccC"));
}

return 0;
Expand Down
16 changes: 9 additions & 7 deletions sycl/test-e2e/Graph/Inputs/executable_graph_update.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,15 @@ int main() {
free(PtrB2, Queue);
free(PtrC2, Queue);

assert(ReferenceA == DataA);
assert(ReferenceB == DataB);
assert(ReferenceC == DataC);

assert(ReferenceA == DataA2);
assert(ReferenceB == DataB2);
assert(ReferenceC == DataC2);
for (size_t i = 0; i < Size; i++) {
assert(check_value(i, ReferenceA[i], DataA[i], "DataA"));
assert(check_value(i, ReferenceB[i], DataB[i], "DataB"));
assert(check_value(i, ReferenceC[i], DataC[i], "DataC"));

assert(check_value(i, ReferenceA[i], DataA2[i], "DataA2"));
assert(check_value(i, ReferenceB[i], DataB2[i], "DataB2"));
assert(check_value(i, ReferenceC[i], DataC2[i], "DataC2"));
}

return 0;
}
Loading

0 comments on commit d65e8d9

Please sign in to comment.