Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

[SYCL][L0] Rewrite interop test with new API #461

Merged
merged 2 commits into from
Sep 16, 2021
Merged
Changes from 1 commit
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
47 changes: 33 additions & 14 deletions SYCL/Plugin/interop-level-zero.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,25 @@
#include <CL/sycl.hpp>
// clang-format off
#include <level_zero/ze_api.h>
#include <CL/sycl/backend/level_zero.hpp>
#include <sycl/ext/oneapi/backend/level_zero.hpp>
// clang-format on

using namespace cl::sycl;

int main() {
queue Queue{};

auto Event = Queue.single_task([=]() {});
auto Context = Queue.get_info<info::queue::context>();
auto Device = Queue.get_info<info::queue::device>();
auto Platform = Device.get_info<info::device::platform>();

// Get native Level Zero handles
auto ZePlatform = Platform.get_native<backend::level_zero>();
auto ZeDevice = Device.get_native<backend::level_zero>();
auto ZeContext = Context.get_native<backend::level_zero>();
auto ZeQueue = Queue.get_native<backend::level_zero>();
auto ZePlatform = get_native<backend::ext_oneapi_level_zero>(Platform);
auto ZeDevice = get_native<backend::ext_oneapi_level_zero>(Device);
auto ZeContext = get_native<backend::ext_oneapi_level_zero>(Context);
auto ZeQueue = get_native<backend::ext_oneapi_level_zero>(Queue);
auto ZeEvent = get_native<backend::ext_oneapi_level_zero>(Event);

// Create native Level-Zero context.
// It then will be owned/destroyed by SYCL RT.
Expand All @@ -32,17 +35,33 @@ int main() {
zeContextCreate(ZePlatform, &ZeContextDesc, &ZeContextInterop);

// Re-create SYCL objects from native Level Zero handles
auto PlatformInterop = level_zero::make<platform>(ZePlatform);
auto DeviceInterop = level_zero::make<device>(PlatformInterop, ZeDevice);
auto ContextInterop = level_zero::make<context>(PlatformInterop.get_devices(),
ZeContextInterop);
auto QueueInterop = level_zero::make<queue>(ContextInterop, ZeQueue);
auto PlatformInterop =
make_platform<backend::ext_oneapi_level_zero>(ZePlatform);
auto DeviceInterop = make_device<backend::ext_oneapi_level_zero>(ZeDevice);

backend_input_t<backend::ext_oneapi_level_zero, context> ContextInteropInput =
{ZeContextInterop, Context.get_devices()};
auto ContextInterop =
make_context<backend::ext_oneapi_level_zero>(ContextInteropInput);

backend_input_t<backend::ext_oneapi_level_zero, queue> QueueInteropInput = {
ZeQueue};
auto QueueInterop = make_queue<backend::ext_oneapi_level_zero>(
QueueInteropInput, ContextInterop);

backend_input_t<backend::ext_oneapi_level_zero, event> EventInteropInput = {
ZeEvent};
auto EventInterop = make_event<backend::ext_oneapi_level_zero>(
EventInteropInput, ContextInterop);

// Check native handles
assert(ZePlatform == PlatformInterop.get_native<backend::level_zero>());
assert(ZeDevice == DeviceInterop.get_native<backend::level_zero>());
assert(ZeContextInterop == ContextInterop.get_native<backend::level_zero>());
assert(ZeQueue == QueueInterop.get_native<backend::level_zero>());
assert(ZePlatform ==
get_native<backend::ext_oneapi_level_zero>(PlatformInterop));
assert(ZeDevice == get_native<backend::ext_oneapi_level_zero>(DeviceInterop));
assert(ZeContextInterop ==
get_native<backend::ext_oneapi_level_zero>(ContextInterop));
assert(ZeQueue == get_native<backend::ext_oneapi_level_zero>(QueueInterop));
assert(ZeEvent == get_native<backend::ext_oneapi_level_zero>(EventInterop));

// Verify re-created objects
int Arr[] = {2};
Expand Down