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 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 operationStackTop = 0 # stores index of the last defined/valid value
@cuprintln("before loop") for varSetIndex in index:stride
for varSetIndex in index:stride:length(expressions)
@cuprintln("in loop with index '$varSetIndex'")
firstVariableIndex = ((varSetIndex - 1) * stepsize[3]) # Exclusive firstVariableIndex = ((varSetIndex - 1) * stepsize[3]) # Exclusive
for i in firstExprIndex:lastExprIndex for i in firstExprIndex:lastExprIndex

View File

@ -171,19 +171,28 @@ function get_operation(operator::Operator, left::Operand, right::Union{Operand,
elseif operator == DIVIDE elseif operator == DIVIDE
resultCode = "div.approx.f32 $resultRegister, $left, $right;" resultCode = "div.approx.f32 $resultRegister, $left, $right;"
elseif operator == POWER 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 elseif operator == ABS
resultCode = "abs.f32 $resultRegister, $left;" resultCode = "abs.f32 $resultRegister, $left;"
elseif operator == LOG 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 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 elseif operator == SQRT
resultCode = "sqrt.approx.f32 $resultRegister, $left;" resultCode = "sqrt.approx.f32 $resultRegister, $left;"
else else
throw(ArgumentError("Operator conversion to ptx not implemented for '$operator'")) throw(ArgumentError("Operator conversion to ptx not implemented for '$operator'"))
end end
return (resultCode, resultRegister) return (resultCode, resultRegister)
end end

View File

@ -24,8 +24,10 @@ parameters[2][2] = 0.0
postfixExpr = expr_to_postfix(expressions[1]) postfixExpr = expr_to_postfix(expressions[1])
postfixExprs = Vector([postfixExpr]) postfixExprs = Vector([postfixExpr])
push!(postfixExprs, expr_to_postfix(expressions[2])) 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) # CUDA.@sync interpret(postfixExprs, variables, parameters)
# This is just here for testing. This will be called inside the execute method in the Transpiler module # This is just here for testing. This will be called inside the execute method in the Transpiler module