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

[SYCL] Test build options processing #302

Merged
merged 6 commits into from
Jun 15, 2021
Merged
Show file tree
Hide file tree
Changes from all 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
25 changes: 25 additions & 0 deletions SYCL/KernelAndProgram/kernel-bundle-merge-options-env.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// RUN: %clangxx -fsycl %s -o %t.out %debug_option
// RUN: %GPU_RUN_PLACEHOLDER SYCL_PI_TRACE=-1 SYCL_PROGRAM_COMPILE_OPTIONS=-DENV_COMPILE_OPTS SYCL_PROGRAM_LINK_OPTIONS=-DENV_LINK_OPTS %t.out %GPU_CHECK_PLACEHOLDER
// REQUIRES: gpu
// UNSUPPORTED: cuda
#include "kernel-bundle-merge-options.hpp"

// CHECK: piProgramBuild
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <const char *>: -DENV_COMPILE_OPTS -vc-codegen

// TODO: Uncomment when build options are properly passed to compile and link
// commands for kernel_bundle
// xCHECK: piProgramCompile(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -DENV_COMPILE_OPTS -vc-codegen

// xCHECK: piProgramLink(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -DENV_LINK_OPTS -vc-codegen
28 changes: 28 additions & 0 deletions SYCL/KernelAndProgram/kernel-bundle-merge-options.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// RUN: %clangxx -fsycl %s -o %t.out %debug_option
// RUN: %GPU_RUN_PLACEHOLDER SYCL_PI_TRACE=-1 %t.out %GPU_CHECK_PLACEHOLDER
// REQUIRES: gpu
// UNSUPPORTED: cuda

// Debug option -g is not passed to device code compiler when CL-style driver
// is used and /DEBUG options is passed.
// XFAIL: cl_options
#include "kernel-bundle-merge-options.hpp"

// CHECK: piProgramBuild
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <const char *>: -g -vc-codegen

// TODO: Uncomment when build options are properly passed to compile and link
// commands for kernel_bundle
// xCHECK: piProgramCompile(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -g -vc-codegen
// xCHECK: piProgramLink(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -g -vc-codegen
38 changes: 38 additions & 0 deletions SYCL/KernelAndProgram/kernel-bundle-merge-options.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#define SYCL2020_DISABLE_DEPRECATION_WARNINGS
#include <CL/sycl.hpp>
#include <sycl/ext/intel/experimental/esimd.hpp>

class KernelName;

int main() {
sycl::queue Queue;

sycl::device Dev = Queue.get_device();

sycl::context Ctx = Queue.get_context();

sycl::kernel_bundle KernelBundle =
sycl::get_kernel_bundle<sycl::bundle_state::input>(Ctx, {Dev});

if (0)
Queue.submit([&](sycl::handler &CGH) {
CGH.single_task<KernelName>(
[=]() SYCL_ESIMD_KERNEL {}); // Actual kernel does not matter
});

try {
auto ExecBundle = sycl::build(KernelBundle);
} catch (...) {
// Ignore all exceptions
}

try {
auto KernelBundleObject =
sycl::compile(KernelBundle, KernelBundle.get_devices());

auto KernelBundleExecutable =
sycl::link({KernelBundleObject}, KernelBundleObject.get_devices());
} catch (...) {
// Ignore all exceptions
}
}
24 changes: 24 additions & 0 deletions SYCL/KernelAndProgram/program-merge-options-env.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// RUN: %clangxx -fsycl %s -o %t.out %debug_option
// RUN: env SYCL_PI_TRACE=-1 SYCL_PROGRAM_COMPILE_OPTIONS=-DENV_COMPILE_OPTS SYCL_PROGRAM_LINK_OPTIONS=-DENV_LINK_OPTS SYCL_DEVICE_FILTER=%sycl_be %t.out | FileCheck %s
// REQUIRES: gpu
// UNSUPPORTED: cuda
#include "program-merge-options.hpp"

// CHECK: piProgramBuild
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <const char *>: -DENV_COMPILE_OPTS -vc-codegen

// TODO: Uncomment when build options are properly passed to compile and link
// commands for program
// xCHECK: piProgramCompile(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -DENV_COMPILE_OPTS -vc-codegen
// xCHECK: piProgramLink(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -DENV_LINK_OPTS -vc-codegen
28 changes: 28 additions & 0 deletions SYCL/KernelAndProgram/program-merge-options.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// RUN: %clangxx -fsycl %s -o %t.out %debug_option
// RUN: env SYCL_PI_TRACE=-1 SYCL_DEVICE_FILTER=%sycl_be %t.out | FileCheck %s
// REQUIRES: gpu
// UNSUPPORTED: cuda

// Debug option -g is not passed to device code compiler when CL-style driver
// is used and /DEBUG options is passed.
// XFAIL: cl_options
#include "program-merge-options.hpp"

// CHECK: piProgramBuild
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <unknown>
// CHECK-NEXT: <const char *>: -DBUILD_OPTS -g -vc-codegen

// TODO: Uncomment when build options are properly passed to compile and link
// commands for program
// xCHECK: piProgramCompile(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -DCOMPILE_OPTS -vc-codegen
// xCHECK: piProgramLink(
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <unknown>
// xCHECK-NEXT: <const char *>: -cl-fast-relaxed-math -vc-codegen
32 changes: 32 additions & 0 deletions SYCL/KernelAndProgram/program-merge-options.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#define SYCL2020_DISABLE_DEPRECATION_WARNINGS

#include <CL/sycl.hpp>
#include <sycl/ext/intel/experimental/esimd.hpp>

class KernelName;
void submitKernel() {
cl::sycl::queue q;
q.submit([&](cl::sycl::handler &cgh) {
cgh.single_task<KernelName>([]() SYCL_ESIMD_KERNEL {});
});
}

int main() {
const cl::sycl::string_class CompileOpts{"-DCOMPILE_OPTS"};
const cl::sycl::string_class LinkOpts{"-cl-fast-relaxed-math"};
const cl::sycl::string_class BuildOpts{"-DBUILD_OPTS"};

try {
cl::sycl::context Ctx;
cl::sycl::program PrgA{Ctx};

PrgA.build_with_kernel_type<KernelName>(BuildOpts);

cl::sycl::program PrgB{Ctx};
PrgB.compile_with_kernel_type<KernelName>(CompileOpts);

PrgB.link(LinkOpts);
} catch (...) {
// Ignore all exceptions
}
}