Add CPU Interpreter and a test case.

This commit is contained in:
Gabriel Kronberger
2025-02-19 16:38:11 +01:00
parent 8bad911585
commit 942adb8612
6 changed files with 441 additions and 2 deletions

View File

@ -2,7 +2,12 @@ module ExpressionExecutorCuda
include("ExpressionProcessing.jl")
include("Interpreter.jl")
export interpret_gpu
module CpuInterpreter
include("Code.jl")
include("CpuInterpreter.jl")
end
export interpret_gpu,interpret_cpu
export evaluate_gpu
export test
@ -22,8 +27,21 @@ function evaluate_gpu(exprs::Vector{Expr}, X::Matrix{Float32}, p::Vector{Vector{
# Look into this to maybe speed up PTX generation: https://cuda.juliagpu.org/stable/tutorials/introduction/#Parallelization-on-the-CPU
end
end
# Evaluate Expressions on the CPU
function interpret_cpu(exprs::Vector{Expr}, X::Matrix{Float32}, p::Vector{Vector{Float32}})::Matrix{Float32}
@assert axes(exprs) == axes(p)
nrows = size(X, 1)
# each column of the matrix has the result for an expr
res = Matrix{Float32}(undef, nrows, length(exprs))
for i in eachindex(exprs)
CpuInterpreter.interpret!((@view res[:,i]), exprs[i], X, p[i])
end
res
end
# Flow
@ -35,3 +53,5 @@ end
# The following can be done on the CPU
# convert expression to postfix notation (mandatory)
# optional: replace every parameter with the correct value (should only improve performance if data transfer is the bottleneck)
end