Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sycl/cmake/modules/FetchUnifiedRuntime.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ if(SYCL_UR_USE_FETCH_CONTENT)
CACHE PATH "Path to external '${name}' adapter source dir" FORCE)
endfunction()

set(UNIFIED_RUNTIME_REPO "https://github.com/oneapi-src/unified-runtime.git")
set(UNIFIED_RUNTIME_REPO "https://github.com/PietroGhg/unified-runtime.git")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/UnifiedRuntimeTag.cmake)

set(UMF_BUILD_EXAMPLES OFF CACHE INTERNAL "EXAMPLES")
Expand Down
8 changes: 4 additions & 4 deletions sycl/cmake/modules/UnifiedRuntimeTag.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# commit fa8cc8ec16c1a2cf0926cc64026edc6a254ff0c2
# Merge: 3d58884b 1984ceb1
# Author: aarongreig <[email protected]>
# Date: Fri Nov 1 10:03:37 2024 +0000
# Merge pull request #1833 from ayylol/old-opencl-check
# [OpenCL] Add OpenCL version check for independent forward progress query
set(UNIFIED_RUNTIME_TAG fa8cc8ec16c1a2cf0926cc64026edc6a254ff0c2)
# Date: Thu Oct 31 14:05:55 2024 +0000
# Merge pull request #2228 from nrspruit/copy_engine_refactor
# [L0] Refactor Copy Engine Usage checks for Performance
set(UNIFIED_RUNTIME_TAG pietro/events_rr)
75 changes: 49 additions & 26 deletions sycl/test/native_cpu/scalar_args.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,62 @@ const size_t N = 10;

template <typename T> class init_a;

template <typename T> bool test(queue myQueue) {
{
buffer<float, 1> a(range<1>{N});
const T test = rand() % 10;

myQueue.submit([&](handler &cgh) {
auto A = a.get_access<access::mode::write>(cgh);
cgh.parallel_for<init_a<T>>(range<1>{N},
[=](id<1> index) { A[index] = test; });
});

auto A = a.get_access<access::mode::read>();
std::cout << "Result:" << std::endl;
for (size_t i = 0; i < N; i++) {
if (A[i] != test) {
std::cout << "ERROR at pos " << i << " expected " << test << ", got "
<< A[i] << "\n";
return false;
}
}
template <typename T, int M>
bool compare(const sycl::vec<T, M> a, const sycl::vec<T, M> truth) {
bool res = true;
for (int i = 0; i < M; i++) {
res &= a[i] == truth[i];
}
return res;
}

std::cout << "Good computation!" << std::endl;
template <typename T> bool compare(const T a, const T truth) {
return a == truth;
}

template <typename T> bool check(buffer<T, 1> &result, const T truth) {
auto A = result.get_host_access();
for (size_t i = 0; i < N; i++) {
if (!compare(A[i], truth)) {
return false;
}
}
return true;
}

template <typename T> bool test(queue myQueue) {
buffer<T, 1> a(range<1>{N});
const T test{42};

myQueue.submit([&](handler &cgh) {
auto A = a.template get_access<access::mode::write>(cgh);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be worth replicating this test also for access::mode::read_write to see if timing/events handling is correct for different access modes.

cgh.parallel_for<init_a<T>>(range<1>{N},
[=](id<1> index) { A[index] = test; });
});

return check(a, test);
}

int main() {
queue q;
int res1 = test<int>(q);
int res2 = test<unsigned>(q);
int res3 = test<float>(q);
int res4 = test<double>(q);
if (!(res1 && res2 && res3 && res4)) {

std::vector<bool> res;
res.push_back(test<int>(q));
res.push_back(test<unsigned>(q));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Performance. Using a vector here likely causes allocations and there's the overhead of iterating over the vector.
It's probably faster to instead check the test values and return straight away if there's an error.

res.push_back(test<float>(q));
res.push_back(test<double>(q));
res.push_back(test<sycl::vec<int, 2>>(q));
res.push_back(test<sycl::vec<int, 3>>(q));
res.push_back(test<sycl::vec<int, 4>>(q));
res.push_back(test<sycl::vec<int, 8>>(q));
res.push_back(test<sycl::vec<int, 16>>(q));
res.push_back(test<sycl::vec<double, 2>>(q));
res.push_back(test<sycl::vec<double, 3>>(q));
res.push_back(test<sycl::vec<double, 4>>(q));
res.push_back(test<sycl::vec<double, 8>>(q));
res.push_back(test<sycl::vec<double, 16>>(q));

if (std::any_of(res.begin(), res.end(), [](bool b) { return !b; })) {
return 1;
}
return 0;
Expand Down
Loading