finished implementing operators
Some checks failed
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, 1.10) (push) Has been cancelled
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, 1.6) (push) Has been cancelled
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, pre) (push) Has been cancelled

This commit is contained in:
Daniel 2025-01-05 11:19:03 +01:00
parent 094f8c9499
commit f7926c3438
3 changed files with 17 additions and 9 deletions

View File

@ -49,10 +49,7 @@ function interpret_expression(expressions::CuDeviceArray{ExpressionElement}, var
operationStack = MVector{MAX_STACK_SIZE, Float32}(undef) # Try to get this to function with variable size too, to allow better memory usage
operationStackTop = 0 # stores index of the last defined/valid value
@cuprintln("before loop")
for varSetIndex in index:stride:length(expressions)
@cuprintln("in loop with index '$varSetIndex'")
for varSetIndex in index:stride
firstVariableIndex = ((varSetIndex - 1) * stepsize[3]) # Exclusive
for i in firstExprIndex:lastExprIndex

View File

@ -171,19 +171,28 @@ function get_operation(operator::Operator, left::Operand, right::Union{Operand,
elseif operator == DIVIDE
resultCode = "div.approx.f32 $resultRegister, $left, $right;"
elseif operator == POWER
resultCode = " $resultRegister, $left;" # TODO
# x^y == 2^(y*log2(x)) as generated by nvcc for "pow(x, y)"
resultCode = "
lg2.approx.f32 $resultRegister, $left;
mul.f32 $resultRegister, $right, $resultRegister;
ex2.approx.f32 $resultRegister, $resultRegister;"
elseif operator == ABS
resultCode = "abs.f32 $resultRegister, $left;"
elseif operator == LOG
resultCode = "lg2.approx.f32 $resultRegister, $left;"
# log(x) == log2(x) * ln(2) as generated by nvcc for "log(x)"
resultCode = "
lg2.approx.f32 $resultRegister, $left;
mul.f32 $resultRegister, $resultRegister, 0.693147182;"
elseif operator == EXP
resultCode = " $resultRegister, $left;" # TODO
# e^x == 2^(x/ln(2)) as generated by nvcc for "exp(x)"
resultCode = "
mul.f32 $resultRegister, $left, 1.44269502;
ex2.approx.f32 $resultRegister, $resultRegister;"
elseif operator == SQRT
resultCode = "sqrt.approx.f32 $resultRegister, $left;"
else
throw(ArgumentError("Operator conversion to ptx not implemented for '$operator'"))
end
return (resultCode, resultRegister)
end

View File

@ -24,8 +24,10 @@ parameters[2][2] = 0.0
postfixExpr = expr_to_postfix(expressions[1])
postfixExprs = Vector([postfixExpr])
push!(postfixExprs, expr_to_postfix(expressions[2]))
push!(postfixExprs, expr_to_postfix(:(5^3)))
generatedCode = Transpiler.transpile(postfixExpr)
# generatedCode = Transpiler.transpile(postfixExpr)
generatedCode = Transpiler.transpile(postfixExprs[3]) # TEMP
# CUDA.@sync interpret(postfixExprs, variables, parameters)
# This is just here for testing. This will be called inside the execute method in the Transpiler module