Skip to content

Commit a802496

Browse files
Merge pull request #377 from ChrisRackauckas-Claude/add-opencl-backend
Add OpenCL.jl backend for CPU-based GPU debugging
2 parents fed5f32 + 9629e9c commit a802496

File tree

6 files changed

+25
-2
lines changed

6 files changed

+25
-2
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ jobs:
3434
group:
3535
- CPU
3636
- JLArrays
37+
- OpenCL
3738
uses: "SciML/.github/.github/workflows/tests.yml@master"
3839
with:
3940
julia-version: "${{ matrix.version }}"

Project.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,15 @@ AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e"
3030
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
3131
JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb"
3232
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
33+
OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2"
3334
oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b"
3435

3536
[extensions]
3637
AMDGPUExt = ["AMDGPU"]
3738
CUDAExt = ["CUDA"]
3839
JLArraysExt = ["JLArrays"]
3940
MetalExt = ["Metal"]
41+
OpenCLExt = ["OpenCL"]
4042
oneAPIExt = ["oneAPI"]
4143

4244
[compat]
@@ -53,6 +55,7 @@ KernelAbstractions = "0.9"
5355
LinearSolve = "3"
5456
Metal = "1"
5557
MuladdMacro = "0.2"
58+
OpenCL = "0.9, 0.10"
5659
Parameters = "0.12"
5760
RecursiveArrayTools = "3"
5861
SciMLBase = "2.92"
@@ -70,5 +73,7 @@ CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
7073
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
7174
JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb"
7275
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
73-
oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b"
76+
OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2"
7477
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
78+
oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b"
79+
pocl_jll = "627d6b7a-bbe6-5189-83e7-98cc0a5aeadd"

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ SciML's GPU support extends to a wide array of hardware, including:
3636
| AMD | ROCm | [AMDGPU.jl](https://github.com/JuliaGPU/AMDGPU.jl) | `AMDGPU.ROCBackend()` |
3737
| Intel | OneAPI | [OneAPI.jl](https://github.com/JuliaGPU/oneAPI.jl) | `oneAPI.oneAPIBackend()` |
3838
| Apple (M-Series) | Metal | [Metal.jl](https://github.com/JuliaGPU/Metal.jl) | `Metal.MetalBackend()` |
39+
| CPU (fast kernels) | OpenCL | [OpenCL.jl](https://github.com/JuliaGPU/OpenCL.jl) | `OpenCL.CLBackend()` |
3940

4041
For this tutorial we will demonstrate the CUDA backend for NVIDIA GPUs, though any of the other GPUs can be
4142
used by simply swapping out the `backend` choice.

ext/OpenCLExt.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module OpenCLExt
2+
using OpenCL
3+
import DiffEqGPU
4+
5+
using .OpenCL
6+
import .OpenCL: OpenCLBackend
7+
8+
DiffEqGPU.maxthreads(::OpenCLBackend) = 256
9+
DiffEqGPU.maybe_prefer_blocks(::OpenCLBackend) = OpenCLBackend()
10+
11+
end

test/Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,17 @@ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
88
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
99
JLArrays = "27aeb0d3-9eb9-45fb-866b-73c2ecf80fcb"
1010
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
11+
OpenCL = "08131aa3-fb12-5dee-8b74-c09406e224a2"
1112
Optimization = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
1213
OptimizationOptimisers = "42dfb2eb-d2b4-4451-abcd-913932933ac1"
1314
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
1415
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1516
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
17+
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1618
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
1719
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1820
StochasticDiffEq = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"
19-
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
2021
TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
2122
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
2223
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
24+
pocl_jll = "627d6b7a-bbe6-5189-83e7-98cc0a5aeadd"

test/utils.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ elseif GROUP == "oneAPI"
1111
elseif GROUP == "Metal"
1212
using Metal
1313
Metal.MetalBackend()
14+
elseif GROUP == "OpenCL"
15+
using OpenCL, pocl_jll
16+
OpenCL.OpenCLBackend()
1417
elseif GROUP == "JLArrays"
1518
using JLArrays
1619
JLArrays.JLBackend()

0 commit comments

Comments
 (0)