oracle/graal · critical · GraalError
No backend available for specified GPU architecture \"%s\"
Error message
No backend available for specified GPU architecture \"%s\"
What it means
After the host backend is created, HotSpotGraalRuntime iterates the JVMCI runtimes's non-host JVMCIBackends (e.g. GPU architectures registered by external JVMCI providers) and needs a HotSpotBackendFactory for each; a missing factory throws GraalError 'No backend available for specified GPU architecture "arch"' during initialization.
Source
Thrown at compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/HotSpotGraalRuntime.java:189
HotSpotBackendFactory factory = backendMap.getBackendFactory(hostArchitecture);
if (factory == null) {
throw new GraalError("No backend available for host architecture \"%s\"", hostArchitecture);
}
if (replayCompilationSupport != null) {
factory = replayCompilationSupport.decorateBackendFactory(factory, jvmciRuntime);
}
hostBackend = registerBackend(factory.createBackend(this, compilerConfiguration, jvmciRuntime, null));
}
for (JVMCIBackend jvmciBackend : jvmciRuntime.getJVMCIBackends().values()) {
if (jvmciBackend == hostJvmciBackend) {
continue;
}
Architecture gpuArchitecture = jvmciBackend.getTarget().arch;
HotSpotBackendFactory factory = backendMap.getBackendFactory(gpuArchitecture);
if (factory == null) {
throw new GraalError("No backend available for specified GPU architecture \"%s\"", gpuArchitecture);
}
try (InitTimer t = timer("create backend:", gpuArchitecture)) {
registerBackend(factory.createBackend(this, compilerConfiguration, null, hostBackend));
}
}
// Complete initialization of backends
try (InitTimer st = timer(hostBackend.getTarget().arch.getName(), ".completeInitialization")) {
hostBackend.completeInitialization(jvmciRuntime, options);
}
for (HotSpotBackend backend : backends.getValues()) {
if (backend != hostBackend) {
try (InitTimer st = timer(backend.getTarget().arch.getName(), ".completeInitialization")) {
backend.completeInitialization(jvmciRuntime, options);
}
}
}
View on GitHub (pinned to a66e9ccd1d)
Solutions
- Add/enable the Graal backend module matching the registered GPU architecture, or upgrade the provider+Graal pair so they align
- Remove/disable the JVMCI provider registering the GPU backend you do not intend to use
- Select a compiler configuration whose BackendMap includes the GPU architecture
Defensive patterns
Strategy: validation
Validate before calling
for (JVMCIBackend b : jvmciRuntime.getJVMCIBackends().values()) {
if (b != host && backendMap.getBackendFactory(b.getTarget().arch) == null) { /* unregister or refuse before init */ }
} Prevention
- Match GPU provider versions to the Graal build
- Remove unused GPU JVMCI providers from the module path
- Test startup with the exact module graph you will deploy
When it happens
Trigger: A JVMCI runtime that registers a secondary (non-host) backend — typically a GPU arch via an external JVMCI/Graal-GPU provider — while the selected compiler configuration's BackendMap has no factory for that architecture; thrown inside the backend-registration loop of the HotSpotGraalRuntime constructor.
Common situations: Installing a GPU-accelerated JVMCI provider without the matching Graal GPU backend module; version skew between the provider and the Graal build; configurations that deliberately restrict backends while optional GPU providers are present.
Related errors
- No backend available for host architecture \"%s\"
- No options specified for MethodFilter:
- Compiler configuration '%s' not found. Available configurati
- No %s providers found
- %s garbage collector is not supported by Graal
AI-assisted analysis of oracle/graal@a66e9ccd1d (2026-08-14).
Data as JSON: /api/errors/c088b9303f232d90.
Report an issue: GitHub.