Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.
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
53 changes: 53 additions & 0 deletions SYCL/Plugin/interop-level-zero-interop-task-mem.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// REQUIRES: level_zero, level_zero_dev_kit
// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %level_zero_options %s -o %t.out
// RUN: %GPU_RUN_PLACEHOLDER %t.out

// Test for Level Zero interop_task.

#include <CL/sycl.hpp>
// clang-format off
#include <level_zero/ze_api.h>
#include <CL/sycl/backend/level_zero.hpp>
// clang-format on
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Could you clarify why clang-format comments are needed here, please?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

clang-format puts <level_zero/ze_api.h> after <CL/sycl/backend/level_zero.hpp> and compilation fails because backend/level_zero.hpp uses Level-zero types and expects ze_api.h included before

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I see. Alternative way to handle this is to put an empty line between ze_api.h and level_zero.hpp includes:

// Native API header
#include <level_zero/ze_api.h>

// SYCL API headers
#include <CL/sycl.hpp>
#include <CL/sycl/backend/level_zero.hpp>


using namespace sycl;

constexpr size_t SIZE = 16;

int main() {
queue queue{};

try {
buffer<uint8_t, 1> buffer(SIZE);
image<2> image(image_channel_order::rgba, image_channel_type::fp32,
{SIZE, SIZE});

ze_context_handle_t ze_context =
queue.get_context().get_native<backend::level_zero>();

queue
.submit([&](handler &cgh) {
auto buffer_acc = buffer.get_access<access::mode::write>(cgh);
auto image_acc = image.get_access<float4, access::mode::write>(cgh);
cgh.interop_task([&](const interop_handler &ih) {
void *device_ptr = ih.get_mem<backend::level_zero>(buffer_acc);
size_t size = 0;
zeMemGetAddressRange(ze_context, device_ptr, NULL, &size);
assert(size == SIZE);

ze_image_handle_t ze_image =
ih.get_mem<backend::level_zero>(image_acc);
assert(ze_image != nullptr);
});
})
.wait();
} catch (exception const &e) {
std::cout << "SYCL exception caught: " << e.what() << std::endl;
return e.get_cl_code();
} catch (const char *msg) {
std::cout << "Exception caught: " << msg << std::endl;
return 1;
}

return 0;
}
52 changes: 52 additions & 0 deletions SYCL/Plugin/interop-opencl-interop-task-mem.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// REQUIRES: opencl
Comment thread
mikhail-nikolskiy marked this conversation as resolved.
Outdated

// RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple %s -o %t.out
Comment thread
vladimirlaz marked this conversation as resolved.
Outdated
// RUN: %GPU_RUN_PLACEHOLDER %t.out

// Test for OpenCL interop_task.

#include <CL/opencl.h>
#include <CL/sycl.hpp>
#include <CL/sycl/backend/opencl.hpp>

using namespace sycl;

constexpr size_t SIZE = 16;

int main() {
queue queue{};

try {
buffer<uint8_t, 1> buffer(SIZE);
image<2> image(image_channel_order::rgba, image_channel_type::fp32,
{SIZE, SIZE});

queue
.submit([&](handler &cgh) {
auto buffer_acc = buffer.get_access<access::mode::write>(cgh);
auto image_acc = image.get_access<float4, access::mode::write>(cgh);
cgh.interop_task([=](const interop_handler &ih) {
cl_mem buffer_mem = ih.get_mem<backend::opencl>(buffer_acc);
size_t size = 0;
clGetMemObjectInfo(buffer_mem, CL_MEM_SIZE, sizeof(size),
(void *)&size, nullptr);
assert(size == SIZE);

cl_mem mem = ih.get_mem<backend::opencl>(image_acc);
size_t width = 0;
clGetImageInfo(mem, CL_IMAGE_WIDTH, sizeof(width), (void *)&width,
nullptr);
assert(width == SIZE);
});
})
.wait();
} catch (exception const &e) {
std::cout << "SYCL exception caught: " << e.what() << std::endl;
return e.get_cl_code();
} catch (const char *msg) {
std::cout << "Exception caught: " << msg << std::endl;
return 1;
}

return 0;
}