Skip to content

-fsycl-targets is order dependent #1194

Closed
@fwyzard

Description

@fwyzard

It looks like the behaviour of the -fsycl-targets flag is somewhat dependent on the order of the targets.

Passing -fsycl-targets=nvptx64-unknown-unknown-sycldevice,spir64-unknown-unknown-sycldevice results in a binary that can run on both backends, CUDA and OpenCL:

$ /data/user/fwyzard/sycl/build/bin/clang++ -O2 -g -Wno-unknown-cuda-version -fsycl -fsycl-targets=nvptx64-unknown-unknown-sycldevice,spir64-unknown-unknown-sycldevice --cuda-path=/usr/local/cuda simple-sycl-app.cpp -o simple-sycl-app

$ SYCL_BE=PI_OPENCL ./simple-sycl-app
Available SYCL devices:
  - Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz, driver version 2020.9.1.0.18
  - Intel(R) Gen9 HD Graphics NEO, driver version 20.07.15711
  - Tesla K40c, driver version CUDA 10.20
  - SYCL host device, driver version 1.2

Running on SYCL device Intel(R) Gen9 HD Graphics NEO, driver version 20.07.15711
element 0 is 0
element 1 is 1
element 2 is 2
element 3 is 3
The results are correct!

$ SYCL_BE=PI_CUDA ./simple-sycl-app
Available SYCL devices:
  - Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz, driver version 2020.9.1.0.18
  - Intel(R) Gen9 HD Graphics NEO, driver version 20.07.15711
  - Tesla K40c, driver version CUDA 10.20
  - SYCL host device, driver version 1.2

Running on SYCL device Tesla K40c, driver version CUDA 10.20
element 0 is 26
element 1 is 26
element 2 is 26
element 3 is 26
The results are correct!

Passing -fsycl-targets=spir64-unknown-unknown-sycldevice,nvptx64-unknown-unknown-sycldevice results in a binary that can run only on the OpenCL backend:

$ /data/user/fwyzard/sycl/build/bin/clang++ -O2 -g -Wno-unknown-cuda-version -fsycl -fsycl-targets=spir64-unknown-unknown-sycldevice,nvptx64-unknown-unknown-sycldevice --cuda-path=/usr/local/cuda simple-sycl-app.cpp -o simple-sycl-app

$ SYCL_BE=PI_OPENCL ./simple-sycl-app
Available SYCL devices:
  - Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz, driver version 2020.9.1.0.18
  - Intel(R) Gen9 HD Graphics NEO, driver version 20.07.15711
  - Tesla K40c, driver version CUDA 10.20
  - SYCL host device, driver version 1.2

Running on SYCL device Intel(R) Gen9 HD Graphics NEO, driver version 20.07.15711
element 0 is 0
element 1 is 1
element 2 is 2
element 3 is 3
The results are correct!

$ SYCL_BE=PI_CUDA ./simple-sycl-app
Available SYCL devices:
  - Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz, driver version 2020.9.1.0.18
  - Intel(R) Gen9 HD Graphics NEO, driver version 20.07.15711
  - Tesla K40c, driver version CUDA 10.20
  - SYCL host device, driver version 1.2

Running on SYCL device Tesla K40c, driver version CUDA 10.20
terminate called after throwing an instance of 'cl::sycl::feature_not_supported'
  what():  Online compilation is not supported in this context 0 (CL_SUCCESS)
Aborted (core dumped)

Running on Ubuntu 18.04 with the sycl branch as of 80b0306.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions