This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works
Concern SPI (no HotSpot type), Where TornadoBackendProvider.createBackend(OptionValues, TornadoVMConfigAccess), Notes backends construct reflection providers directly
TornadoBackendProvider has a createBackend method
Holds
Read Oct 3
OCLHotSpotBackendFactory.createJITCompiler → new TornadoMetaAccessProvider(), new TornadoConstantReflectionProvider(snippetReflection) (no HotSpotJVMCIRuntime param).
3 rules from this sentence
OCLHotSpotBackendFactory depends on TornadoMetaAccessProvider
Holds
OCLHotSpotBackendFactory depends on TornadoConstantReflectionProvider
Holds
OCLHotSpotBackendFactory has createJITCompiler
Holds
Read Oct 3
The *GraphBuilderPlugins.registerInvocationPlugins signature must take jdk.vm.ci.meta.MetaAccessProvider, not HotSpotMetaAccessProvider.
OCLGraphBuilderPlugins has registerInvocationPlugins
Holds
Read Oct 3
OCLFieldBuffer resolves the object type via TornadoCoreRuntime.getTornadoRuntime().getMetaAccess() and the reflection ResolvedJavaType (no HotSpotResolvedJavaType cast).
OCLFieldBuffer depends on TornadoCoreRuntime
Holds
Read Oct 3
graal/phases/TornadoOpenCLIntrinsicsReplacements (registered in OCLHighTier right after HighTierLoweringPhase).
OCLHighTier depends on TornadoOpenCLIntrinsicsReplacements
Holds
Read Oct 3
Also OCLLoweringProvider#isLocalArrayInput matches surviving contains("LocalArray") invokes at lowering time.
OCLLoweringProvider has isLocalArrayInput
Holds
Read Oct 3
OCLBackend.emitMethodParameterscontinues past a KernelContext/AtomicInteger parameter so it is not emitted as a __global buffer arg.
2 rules from this sentence
OCLBackend depends on KernelContext
Holds
OCLBackend has emitMethodParameters
Holds
Read Oct 3
OCLNodeLIRBuilder.emitPrologue — a KernelContext/AtomicInteger parameter whose only remaining usages are FrameStates (deopt) must not load a buffer;
OCLNodeLIRBuilder has emitPrologue
Holds
Read Oct 3
OCLLoweringProvider uses (int) TornadoOptions.PANAMA_OBJECT_HEADER_SIZE for panama array element addresses;
OCLLoweringProvider depends on TornadoOptions
Holds
Read Oct 3
OCLAssembler.formatConstant escapes a TornadoObjectConstant wrapping a String as a C string literal (a HotSpotObjectConstant no longer appears on the reflection path).
OCLGraphBuilderPlugins has registerNativeArrayAccessPlugins
Holds
Read Oct 3
cuDNN also exposes cudnnSoftmax, cudnnRelu/cudnnSigmoid/cudnnTanh, cudnnMaxPool2d, and fused FP16 scaled-dot-product (flash) attention via sdpaForward — see the full provider catalog linked below.
6 rules from this sentence
CuDnn has cudnnSoftmax
Holds
CuDnn has cudnnRelu
Holds
CuDnn has cudnnSigmoid
Holds
CuDnn has cudnnTanh
Holds
CuDnn has cudnnMaxPool2d
Holds
CuDnn has sdpaForward
Holds
Read Oct 3
Note that the TornadoVM profiler works only if enabled in the execution plan (via the withProfiler method).
TornadoExecutionPlan has a withProfiler method
Holds
Read Oct 3
NOTE: The methods init() and clear() are essential because, contrary to their counterpart primitive arrays which are initialized by default with 0, the new types contain garbage values when first created.
14 rules from this sentence
ByteArray has an init method
Holds
ByteArray has a clear method
Holds
CharArray has an init method
Holds
CharArray has a clear method
Holds
DoubleArray has an init method
Holds
DoubleArray has a clear method
Holds
FloatArray has an init method
HoldsPR #1069 · Sep 30
FloatArray has a clear method
HoldsPR #1069 · Sep 30
IntArray has an init method
Holds
IntArray has a clear method
Holds
LongArray has an init method
Holds
LongArray has a clear method
Holds
ShortArray has an init method
Holds
ShortArray has a clear method
Holds
Read Oct 3
local only means the operation is supported when the array was allocated with KernelContext.allocateIntLocalArray(int);
KernelContext has an allocateIntLocalArray method
Holds
Read Oct 3
The Task-Graph API also defines a method, named transferToDevice to set which arrays need to be copied to the target accelerator.
TaskGraph has a transferToDevice method
HoldsPR #1069 · Sep 30
Read Oct 3
Similar to transferToDevice, the TaskGraph API also offers a call to sync the data back from the device to the host. The API call is transferToHost with the following parameters:
TaskGraph has transferToHost
HoldsPR #1069 · Sep 30
Read Oct 3
TornadoVM supports batch processing through the following API call withBatch of the TornadoExecutionPlan API.
TornadoExecutionPlan has withBatch
HoldsPR #1069 · Sep 30
Read Oct 3
Tile exposes getDType, getRank, getDimension and getElement (JVM path only, for tests and host debugging);
4 rules from this sentence
Tile has getDType
HoldsPR #1069 · Sep 30
Tile has getRank
HoldsPR #1069 · Sep 30
Tile has getDimension
HoldsPR #1069 · Sep 30
Tile has getElement
HoldsPR #1069 · Sep 30
Read Oct 3
TensorView exposes getDType, getRank, getExtent, and getElementOffset/getRowStride for a strided view;
5 rules from this sentence
TensorView has getDType
HoldsPR #1069 · Sep 30
TensorView has getRank
HoldsPR #1069 · Sep 30
TensorView has getExtent
HoldsPR #1069 · Sep 30
TensorView has getElementOffset
HoldsPR #1069 · Sep 30
TensorView has getRowStride
HoldsPR #1069 · Sep 30
Read Oct 3
PartitionView adds getTileDimension and getBlockCount.
2 rules from this sentence
PartitionView has getTileDimension
HoldsPR #1069 · Sep 30
PartitionView has getBlockCount
HoldsPR #1069 · Sep 30
Read Oct 3
DType names F16, BF16, F32, F64, TF32, FP8_E4M3, FP8_E5M2, S8, S32 and the comparison-only PRED.
Factory cusparseSpMM(rows, k, n, nnz, csrRowOffsets, csrColInd, csrValues, b, c), Operation C = A·B , dense B / C row-major
Cusparse has a cusparseSpMM method
Holds
Read Oct 3
Option withPreCompilation(), What it does JIT every task graph up front For hybrid plans this also runs each provider's prepare() , so native contexts, plans and workspaces exist before the first execution — the same reason it is a prerequisite for graph capture, Backends all
TornadoExecutionPlan has a withPreCompilation method
Holds
Read Oct 3
Option withIntraPlanConcurrency(), What it does Routes DAG-independent work (H2D, kernels, D2H) to separate role streams so it can overlap, with ordering preserved through device events derived from the bytecode dependency DAG Off by default, Backends CUDA no-op on OpenCL/Metal
TornadoExecutionPlan has a withIntraPlanConcurrency method
Holds
Read Oct 3
Option withStagedTransfers(), What it does Stages non-batched read-only transfers through pinned host memory instead of the direct path, Backends CUDA no-op on OpenCL/Metal
TornadoExecutionPlan has a withStagedTransfers method
Holds
Read Oct 3
Option withMemoryLimit("8GB"), What it does Caps device memory for the plan Worth setting explicitly when library workspaces sit alongside large operands, Backends all
TornadoExecutionPlan has a withMemoryLimit method
Holds
Read Oct 3
Option withWarmUpIterations(n), What it does Runs the whole plan n times first — transfers, compilation and execution — before the measured run, Backends all
TornadoExecutionPlan has a withWarmUpIterations method
Holds
Read Oct 3
TornadoExecutionPlan.transferToDevice(Object...) uploads the current host contents of specific objects without running the plan.
TornadoExecutionPlan has a transferToDevice method
Holds
Read Oct 3
…and add the same class name to src/main/resources/META-INF/services/uk.ac.manchester.tornado.runtime.library.spi.TornadoLibraryProvider.
TornadoLibraryProvider is in uk.ac.manchester.tornado.runtime.library.spi
Holds
Read Oct 3
LibraryContext — marker;
LibraryContext is in uk.ac.manchester.tornado.runtime.library.spi
TornadoNativeStreamSupport — getNativeStream(planId) / getNativeContext(planId), implemented by the CUDA backend device.
2 rules from this sentence
TornadoNativeStreamSupport has a getNativeStream method
Holds
TornadoNativeStreamSupport has a getNativeContext method
Holds
Read Oct 3
Factory cublasSgemv, cuBLAS function cublasSgemv, Types FloatArray, Semantics y = α·op(A)·x + β·y
CuBlas has a cublasSgemv method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory cublasSgemm, cuBLAS function cublasSgemm, Types FloatArray, Semantics C = α·op(A)·op(B) + β·C
CuBlas has a cublasSgemm method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory cublasSgemmTF32, cuBLAS function cublasSgemm + TF32 math mode, Types FloatArray, Semantics Same as cublasSgemm , executed on TF32 Tensor Cores (~1e-4 rel error, up to 1.6x faster)
CuBlas has a cublasSgemmTF32 method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory cublasSgemmStridedBatched, cuBLAS function cublasSgemmStridedBatched, Types FloatArray, Semantics C[i] = α·op(A[i])·op(B[i]) + β·C[i] for a whole batch in one call operand i lives at base + i stride in one flat array
CuBlas has a cublasSgemmStridedBatched method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory cublasGemmExFP16, cuBLAS function cublasGemmEx, Types HalfFloatArray in/out, Semantics FP16 GEMM with FP32 Tensor Core accumulation
CuBlas has a cublasGemmExFP16 method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory cublasGemmExFP16FP32, cuBLAS function cublasGemmEx, Types HalfFloatArray in, FloatArray out, Semantics FP16 inputs, FP32 output (standard inference config)
CuBlas has a cublasGemmExFP16FP32 method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory CuBlasLt.ltMatmulFP32, cuBLAS function cublasLtMatmul, Types FloatArray, Semantics FP32 matmul (heuristic algorithm, plan cached per shape)
Factory CuBlasLt.ltMatmulBiasFP16, cuBLAS function cublasLtMatmul + BIAS, Types HalfFloatArray, Semantics C = op(A)·op(B) + bias, fused
CuBlasLt has a ltMatmulBiasFP16 method
HoldsPR #1069 · Sep 30
Read Oct 3
Factory CuBlasLt.ltMatmulGeluBiasFP16, cuBLAS function cublasLtMatmul + GELU_BIAS, Types HalfFloatArray, Semantics C = GELU(op(A)·op(B) + bias), fully fused transformer MLP block
CuBlasLt has a ltMatmulGeluBiasFP16 method
HoldsPR #1069 · Sep 30
Read Oct 3
CUDA Graphs: supported — plans (whose creation allocates a device work area) are built in the provider's prepare() hook, which the runtime invokes before capture starts, so the FFT pipeline is captured and replayed like any other library task (see TestCuFft#testRoundTripWithCudaGraph).
CuFftLibraryProvider has a prepare method
Holds
Read Oct 3
Factory Cusparse.cusparseSpMV(rows, cols, nnz, csrRowOffsets, csrColInd, csrValues, x, y), Operation y = A · x
Cusparse has a cusparseSpMV method
Holds
Read Oct 3
Factory Cusparse.cusparseSpMM(rows, k, n, nnz, csrRowOffsets, csrColInd, csrValues, B, C), Operation C = A · B (dense B k×n, C rows×n)
Cusparse has a cusparseSpMM method
Holds
Read Oct 3
those have no C ABI to call, so here they are Java records in registries, and the long handles the backend passes around for programs, kernels and events are registry keys rather than raw pointers (real Metal objects -- devices, queues, buffers, libraries, pipelines, command buffers -- stay raw pointers).
Metal depends on MetalObjects
HoldsPR #1069 · Sep 30
Read Oct 3
The backend classes (Metal, MetalPlatform, MetalDevice, MetalContext, MetalCommandQueue, MetalProgram, MetalKernel, MetalEvent, NativeCommandQueue) delegate to it in place of their old native methods.
7 rules from this sentence
MetalPlatform depends on MetalObjects
HoldsPR #1069 · Sep 30
MetalDevice depends on MetalObjects
HoldsPR #1069 · Sep 30
MetalContext depends on MetalObjects
HoldsPR #1069 · Sep 30
MetalCommandQueue depends on MetalObjects
HoldsPR #1069 · Sep 30
MetalProgram depends on MetalObjects
HoldsPR #1069 · Sep 30
MetalKernel depends on MetalObjects
HoldsPR #1069 · Sep 30
MetalEvent depends on MetalObjects
HoldsPR #1069 · Sep 30
139 rules from 9 docs
See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.