Daniel
81d0158e46
Some checks are pending
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, 1.10) (push) Waiting to run
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, 1.6) (push) Waiting to run
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, pre) (push) Waiting to run
54 lines
1.3 KiB
Julia
54 lines
1.3 KiB
Julia
module Interpreter
|
|
using CUDA
|
|
|
|
export CudaTest
|
|
|
|
@enum Operators Add=1 Subtract=2 Multiply=3 Division=4 Power=5 Abs=6 Log=7 Exp=8 Sqrt=9
|
|
|
|
function CudaTest()
|
|
N = 2^20
|
|
x = CUDA.fill(1.0f0, N)
|
|
y = CUDA.fill(2.0f0, N)
|
|
|
|
kernelAdd = @cuda launch=false InterpretExplicit!(Add, x, y)
|
|
config = launch_configuration(kernelAdd.fun)
|
|
threads = min(length(y), config.threads)
|
|
blocks = cld(length(y), threads)
|
|
|
|
kernelAdd(Add, x, y; threads, blocks)
|
|
println(y[1])
|
|
# @test all(Array(y) .== 3.0f0)
|
|
|
|
kernelSubtract = @cuda launch=false InterpretExplicit!(Subtract, x, y)
|
|
configSub = launch_configuration(kernelSubtract.fun)
|
|
threadsSub = min(length(y), configSub.threads)
|
|
blocksSub = cld(length(y), threadsSub)
|
|
CUDA.fill!(y, 2.0f0)
|
|
|
|
kernelSubtract(Subtract, x, y; threadsSub, blocksSub)
|
|
# @test all(Array(y) .== -1.0f0)
|
|
println(y[1])
|
|
end
|
|
|
|
|
|
# Kernel
|
|
function InterpretExplicit!(op::Operators, x, y)
|
|
index = (blockIdx().x - 1) * blockDim().x + threadIdx().x
|
|
stride = gridDim().x * blockDim().x
|
|
|
|
if op == Add
|
|
@cuprintln("Performing Addition") # Will only be displayed when the GPU is synchronized
|
|
for i = index:stride:length(y)
|
|
@inbounds y[i] += x[i]
|
|
end
|
|
return
|
|
elseif op == Subtract
|
|
@cuprintln("Performing Subtraction") # Will only be displayed when the GPU is synchronized
|
|
for i = index:stride:length(y)
|
|
@inbounds y[i] -= x[i]
|
|
end
|
|
return
|
|
end
|
|
end
|
|
|
|
end |