Skip to content

[SYCL] Update support of online_compiler; advance default GPU device #7674

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 7, 2022
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
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ class device_arch {

device_arch(int Val) : Val(Val) {}

// TODO1: the list must be extended with a bunch of new GPUs available.
// TODO2: the list of supported GPUs grows rapidly.
// The API must allow user to define the target GPU option even if it is
// not listed in this enumerator below.
enum gpu {
gpu_any = 1,
gpu_gen9 = 2,
Expand All @@ -42,7 +46,9 @@ class device_arch {
gpu_cfl = gpu_gen9_5,
gpu_gen11 = 4,
gpu_icl = gpu_gen11,
gpu_gen12 = 5
gpu_gen12 = 5,
gpu_tgl = gpu_gen12,
gpu_tgllp = gpu_gen12
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That enum is better, but IMO still not perfect solution because
a) that enum may need special conversion to string, e.g. intel_gpu_icllp -> "icllp"; intel_gpu_acm_g12 -> "something-else'.
b) ocloc allows specifying not only 1 device, but a set of them using comma, e.g. "-device icllp,tgllp", and also it allows range of devices, e.g. "-device icllp:" which means something like icllp and newer.

Taking (a) and (b) into account, wouln't it be convenient to let user have that great flexibility provided by 'oclocl'? If Yes, the best ways is to let user specify the 'device_option' or 'device_filter' of std::string type.

Copy link
Contributor

Choose a reason for hiding this comment

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

what problem are you trying to solve?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Local goal in this PR: online_compiler became unusable after recent changes in GPU RT on Gen12 Windows - it stopped supporting "-device skl", cfl, etc. This PR changes the default from "skl" and adds mapping from enum gpu::gpu_gen12 to string "tgllp".

Bigger goal for future PRs should be (IMO): to allow users to compile for target device or group of devices they need and not be limited with some pre-defined enum (either the one used today, or this one https://github.com/intel/llvm/blob/sycl/sycl/doc/extensions/experimental/sycl_ext_intel_device_architecture.asciidoc#new-enumeration-of-architectures)

};

enum cpu {
Expand Down
14 changes: 11 additions & 3 deletions sycl/source/detail/online_compiler/online_compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,

if (DeviceType == sycl::info::device_type::gpu) {
switch (DeviceArch) {
case device_arch::gpu_gen9:
Args.push_back("skl");
break;

case device_arch::gpu_gen9_5:
Args.push_back("cfl");
break;
Expand All @@ -37,13 +41,17 @@ prepareOclocArgs(sycl::info::device_type DeviceType, device_arch DeviceArch,
Args.push_back("icllp");
break;

case device_arch::gpu_gen12:
Args.push_back("tgllp");
break;

default:
Args.push_back("skl");
Args.push_back("tgllp");
}
} else {
// TODO: change that to generic device when ocloc adds support for it.
// For now "skl" is used as the lowest arch with GEN9 arch.
Args.push_back("skl");
// For now "tgllp" is used as the option supported on all known GPU RT.
Args.push_back("tgllp");
}

if (DeviceStepping != "") {
Expand Down