mirror of
https://github.com/codex-storage/constantine.git
synced 2025-01-13 20:44:49 +00:00
1f4bb174a3
* Add PoC of JIT exec on Nvidia GPUs [skip ci] * Split GPU bindings into low-level (ABI) and high-level [skip ci] * small typedef reorg [skip ci] * refine LLVM IR/Nvidia GPU hello worlds * [Nvidia GPU] PoC implementation of field addition [skip ci] * prod-ready field addition + tests on Nvidia GPUs via LLVM codegen
48 lines
1.5 KiB
Nim
48 lines
1.5 KiB
Nim
# Constantine
|
|
# Copyright (c) 2018-2019 Status Research & Development GmbH
|
|
# Copyright (c) 2020-Present Mamy André-Ratsimbazafy
|
|
# Licensed and distributed under either of
|
|
# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT).
|
|
# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0).
|
|
# at your option. This file may not be copied, modified, or distributed except according to those terms.
|
|
|
|
import ../../constantine/platforms/gpu/llvm
|
|
|
|
echo "LLVM JIT compiler Hello World"
|
|
|
|
let ctx = createContext()
|
|
let module = ctx.createModule("addition")
|
|
let i32 = ctx.int32_t()
|
|
|
|
let addType = function_t(i32, [i32, i32], isVarArg = LlvmBool(false))
|
|
let addBody = module.addFunction("add", addType)
|
|
|
|
let builder = ctx.createBuilder()
|
|
let blck = ctx.appendBasicBlock(addBody, "addBody")
|
|
builder.positionAtEnd(blck)
|
|
|
|
block:
|
|
let a = addBody.getParam(0)
|
|
let b = addBody.getParam(1)
|
|
let sum = builder.add(a, b, "sum")
|
|
builder.ret(sum)
|
|
|
|
module.verify(AbortProcessAction)
|
|
|
|
var engine: ExecutionEngineRef
|
|
block:
|
|
initializeFullNativeTarget()
|
|
createJITCompilerForModule(engine, module, optLevel = 0)
|
|
|
|
let jitAdd = cast[proc(a, b: int32): int32 {.noconv.}](
|
|
engine.getFunctionAddress("add"))
|
|
|
|
echo "jitAdd(1, 2) = ", jitAdd(1, 2)
|
|
doAssert jitAdd(1, 2) == 1 + 2
|
|
|
|
block:
|
|
# Cleanup
|
|
builder.dispose()
|
|
engine.dispose() # also destroys the module attached to it
|
|
ctx.dispose()
|
|
echo "LLVM JIT - SUCCESS" |