Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
1b46591
Add portable GPU attribute metadata
DeusSixik Jul 11, 2026
4d2dddd
Project portable GPU metadata to OpenCL attributes
DeusSixik Jul 11, 2026
7508192
Validate portable GPU metadata via OpenCL projection
DeusSixik Jul 11, 2026
1d03ae6
Update OpenCL promotion manifest for RTX 5070
DeusSixik Jul 11, 2026
f6f9dee
Document RTX 5070 production promotion checkpoint
DeusSixik Jul 11, 2026
5a5a154
Suggest portable replacements for raw OpenCL attributes
DeusSixik Jul 11, 2026
6d528c4
Document OpenCL escape hatch guidance
DeusSixik Jul 11, 2026
c171304
Add runtime extension participation artifact
DeusSixik Jul 11, 2026
899981f
Surface extension participation in OpenCL validation
DeusSixik Jul 11, 2026
5c62ad7
wip
DeusSixik Jul 11, 2026
9d3fe51
Surface extension participation across runtime promotion evidence
DeusSixik Jul 11, 2026
7b6d77f
wip
DeusSixik Jul 11, 2026
e137c69
wip
DeusSixik Jul 11, 2026
f8b3238
wip: Start work on IR-Optimizator
DeusSixik Jul 12, 2026
ca0e6fb
wip
DeusSixik Jul 12, 2026
a337a3b
wip
DeusSixik Jul 12, 2026
4257987
wip
DeusSixik Jul 12, 2026
9ad4b31
wip
DeusSixik Jul 12, 2026
3d1e2a4
Add OpenCL runtime IR optimizer evidence validator
DeusSixik Jul 12, 2026
71c2d4f
wip: read-only peephole plan validation telemetry propagation
DeusSixik Jul 12, 2026
498aa68
wip: read-only preflight
DeusSixik Jul 12, 2026
74cffd4
wip: Safe progress
DeusSixik Jul 12, 2026
234c048
wip: safe progress
DeusSixik Jul 13, 2026
5a8b736
wip: Add read-only layer & update formatter/default behavior
DeusSixik Jul 13, 2026
e153fad
wip: IR-Optimizator entry point
DeusSixik Jul 13, 2026
18b72fb
wip: IR-Optimizer type 1
DeusSixik Jul 13, 2026
58eab1f
feat: Add Clamp, mix, step optimization & local constant folding
DeusSixik Jul 14, 2026
42aab26
feat: IR-Optimizer v1
DeusSixik Jul 14, 2026
9b42838
Update ROADMAP.md
DeusSixik Jul 14, 2026
b39b72b
refactor: Clean API & add Services hook
DeusSixik Jul 15, 2026
3889c57
fix: Github workflow CI
DeusSixik Jul 15, 2026
157b71e
feat: Update PUBLISH & versions
DeusSixik Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 47 additions & 14 deletions .github/workflows/opencl-vendor-matrix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ on:
options:
- all
- nvidia
- nvidia-rtx5070
- nvidia-rtx3060
- amd
production_promotion_manifest_mode:
description: 'Manual production-promotion mode: skip, template, validate, or activate.'
Expand Down Expand Up @@ -67,12 +69,17 @@ jobs:
fail-fast: false
matrix: >-
${{ fromJSON(
github.event.inputs.validation_lane == 'nvidia' &&
github.event_name == 'workflow_dispatch' && github.event.inputs.validation_lane == 'nvidia-rtx5070' &&
'{"include":[{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 5070","artifact_suffix":"nvidia-rtx5070","runner_labels":["self-hosted","Windows","X64","nvidia","rtx5070"],"routine_task":":processor:openClNvidiaRoutine"}]}'
|| github.event.inputs.validation_lane == 'amd' &&
|| github.event_name == 'workflow_dispatch' && github.event.inputs.validation_lane == 'nvidia-rtx3060' &&
'{"include":[{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 3060","artifact_suffix":"nvidia-rtx3060","runner_labels":["self-hosted","Windows","X64","nvidia","rtx3060"],"routine_task":":processor:openClNvidiaRoutine"}]}'
||
github.event_name == 'workflow_dispatch' && github.event.inputs.validation_lane == 'nvidia' &&
'{"include":[{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 5070","artifact_suffix":"nvidia-rtx5070","runner_labels":["self-hosted","Windows","X64","nvidia","rtx5070"],"routine_task":":processor:openClNvidiaRoutine"},{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 3060","artifact_suffix":"nvidia-rtx3060","runner_labels":["self-hosted","Windows","X64","nvidia","rtx3060"],"routine_task":":processor:openClNvidiaRoutine"}]}'
|| github.event_name == 'workflow_dispatch' && github.event.inputs.validation_lane == 'amd' &&
'{"include":[{"vendor":"amd","vendor_name":"AMD","device_name":"RX 7800 XT","artifact_suffix":"amd-rx7800xt","runner_labels":["self-hosted","Windows","X64","amd","rx7800xt"],"routine_task":":processor:openClOperationalRoutine"}]}'
||
'{"include":[{"vendor":"amd","vendor_name":"AMD","device_name":"RX 7800 XT","artifact_suffix":"amd-rx7800xt","runner_labels":["self-hosted","Windows","X64","amd","rx7800xt"],"routine_task":":processor:openClOperationalRoutine"},{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 5070","artifact_suffix":"nvidia-rtx5070","runner_labels":["self-hosted","Windows","X64","nvidia","rtx5070"],"routine_task":":processor:openClNvidiaRoutine"}]}'
'{"include":[{"vendor":"amd","vendor_name":"AMD","device_name":"RX 7800 XT","artifact_suffix":"amd-rx7800xt","runner_labels":["self-hosted","Windows","X64","amd","rx7800xt"],"routine_task":":processor:openClOperationalRoutine"},{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 5070","artifact_suffix":"nvidia-rtx5070","runner_labels":["self-hosted","Windows","X64","nvidia","rtx5070"],"routine_task":":processor:openClNvidiaRoutine"},{"vendor":"nvidia","vendor_name":"NVIDIA","device_name":"RTX 3060","artifact_suffix":"nvidia-rtx3060","runner_labels":["self-hosted","Windows","X64","nvidia","rtx3060"],"routine_task":":processor:openClNvidiaRoutine"}]}'
) }}

runs-on: ${{ matrix.runner_labels }}
Expand All @@ -82,11 +89,12 @@ jobs:
JTG_VALIDATION_VENDOR: ${{ matrix.vendor }}
JTG_VALIDATION_DEVICE: ${{ matrix.device_name }}
JTG_OPENCL_CI: 'true'
JTG_SOURCE_PROMOTION_BASELINE_MODE: ${{ github.event.inputs.source_promotion_baseline_mode || 'advisory' }}
JTG_LAUNCH_ADVISORY_NEGATIVE_FIXTURE: ${{ github.event.inputs.launch_advisory_negative_fixture || 'false' }}
JTG_PRODUCTION_PROMOTION_MANIFEST_MODE: ${{ github.event.inputs.production_promotion_manifest_mode || 'skip' }}
JTG_PRODUCTION_PROMOTION_MANIFEST_FILE: ${{ github.event.inputs.production_promotion_manifest_file || 'promotion/opencl/backend-source-promotion-manifest.properties' }}
JTG_PRODUCTION_PROMOTION_CANDIDATE_GIT_SHA: ${{ github.event.inputs.production_promotion_candidate_git_sha || '' }}
JTG_WORKFLOW_EVENT: ${{ github.event_name }}
JTG_SOURCE_PROMOTION_BASELINE_MODE: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.source_promotion_baseline_mode || 'advisory' }}
JTG_LAUNCH_ADVISORY_NEGATIVE_FIXTURE: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.launch_advisory_negative_fixture || 'false' }}
JTG_PRODUCTION_PROMOTION_MANIFEST_MODE: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.production_promotion_manifest_mode || 'skip' }}
JTG_PRODUCTION_PROMOTION_MANIFEST_FILE: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.production_promotion_manifest_file || 'promotion/opencl/backend-source-promotion-manifest.properties' }}
JTG_PRODUCTION_PROMOTION_CANDIDATE_GIT_SHA: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.production_promotion_candidate_git_sha || '' }}
GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.console=plain

steps:
Expand Down Expand Up @@ -143,37 +151,53 @@ jobs:
run: .\gradlew.bat ${{ matrix.routine_task }} --console=plain --no-daemon

- name: Generate production-promotion manifest template
if: steps.opencl_validation.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'template'
if: github.event_name == 'workflow_dispatch' && steps.opencl_validation.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'template'
id: production_promotion_manifest_template
continue-on-error: true
shell: cmd
run: .\gradlew.bat :processor:writeOpenClBackendSourcePromotionManifestTemplate "-PopenClPromotionGitSha=%GITHUB_SHA%" --console=plain --no-daemon

- name: Validate production-promotion manifest
- name: Validate manual production-promotion inputs
if: >-
github.event_name == 'workflow_dispatch' &&
steps.opencl_validation.outcome == 'success' &&
(env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'validate' || env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate')
id: production_promotion_inputs
continue-on-error: true
shell: cmd
run: |
if "%JTG_PRODUCTION_PROMOTION_CANDIDATE_GIT_SHA%"=="" (
echo production_promotion_candidate_git_sha is required for manual validate/activate modes.
exit /b 1
)
echo Manual production-promotion inputs look complete.

- name: Validate production-promotion manifest
if: >-
github.event_name == 'workflow_dispatch' &&
steps.production_promotion_inputs.outcome == 'success' &&
(env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'validate' || env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate')
id: production_promotion_manifest_validation
continue-on-error: true
shell: cmd
run: .\gradlew.bat :processor:validateOpenClBackendSourcePromotionManifest "-PopenClPromotionManifestFile=%JTG_PRODUCTION_PROMOTION_MANIFEST_FILE%" "-PopenClPromotionGitSha=%JTG_PRODUCTION_PROMOTION_CANDIDATE_GIT_SHA%" --console=plain --no-daemon

- name: Validate controlled production activation gate
if: steps.production_promotion_manifest_validation.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate'
if: github.event_name == 'workflow_dispatch' && steps.production_promotion_manifest_validation.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate'
id: production_promotion_activation_gate
continue-on-error: true
shell: cmd
run: .\gradlew.bat :processor:validateOpenClBackendSourcePromotionActivationGate "-PopenClPromotionManifestFile=%JTG_PRODUCTION_PROMOTION_MANIFEST_FILE%" "-PopenClPromotionGitSha=%JTG_PRODUCTION_PROMOTION_CANDIDATE_GIT_SHA%" --console=plain --no-daemon

- name: Run controlled production activation-token smoke
if: steps.production_promotion_activation_gate.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate'
if: github.event_name == 'workflow_dispatch' && steps.production_promotion_activation_gate.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate'
id: production_promotion_activation_token_smoke
continue-on-error: true
shell: cmd
run: .\gradlew.bat :processor:openClProductionActivationTokenSmokeTest "-PopenClPromotionManifestFile=%JTG_PRODUCTION_PROMOTION_MANIFEST_FILE%" "-PopenClPromotionGitSha=%JTG_PRODUCTION_PROMOTION_CANDIDATE_GIT_SHA%" --console=plain --no-daemon

- name: Run production activation-token negative controls
if: steps.production_promotion_activation_token_smoke.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate'
if: github.event_name == 'workflow_dispatch' && steps.production_promotion_activation_token_smoke.outcome == 'success' && env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate'
id: production_promotion_activation_token_negative
continue-on-error: true
shell: cmd
Expand Down Expand Up @@ -334,6 +358,7 @@ jobs:
PRODUCTION_EXPLAINABILITY_SUMMARY_OUTCOME: ${{ steps.production_explainability_summary.outcome }}
SOURCE_PROMOTION_BASELINE_OUTCOME: ${{ steps.source_promotion_baseline.outcome }}
SOURCE_PROMOTION_SUMMARY_OUTCOME: ${{ steps.source_promotion_summary.outcome }}
PRODUCTION_PROMOTION_INPUTS_OUTCOME: ${{ steps.production_promotion_inputs.outcome }}
PRODUCTION_PROMOTION_MANIFEST_TEMPLATE_OUTCOME: ${{ steps.production_promotion_manifest_template.outcome }}
PRODUCTION_PROMOTION_MANIFEST_VALIDATION_OUTCOME: ${{ steps.production_promotion_manifest_validation.outcome }}
PRODUCTION_PROMOTION_ACTIVATION_GATE_OUTCOME: ${{ steps.production_promotion_activation_gate.outcome }}
Expand All @@ -358,6 +383,7 @@ jobs:
echo ^| Production explainability summary ^| %PRODUCTION_EXPLAINABILITY_SUMMARY_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
echo ^| Source-promotion baseline ^| %SOURCE_PROMOTION_BASELINE_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
echo ^| Source-promotion summary ^| %SOURCE_PROMOTION_SUMMARY_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
echo ^| Promotion input guard ^| %PRODUCTION_PROMOTION_INPUTS_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
echo ^| Promotion manifest template ^| %PRODUCTION_PROMOTION_MANIFEST_TEMPLATE_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
echo ^| Promotion manifest validation ^| %PRODUCTION_PROMOTION_MANIFEST_VALIDATION_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
echo ^| Controlled activation gate ^| %PRODUCTION_PROMOTION_ACTIVATION_GATE_OUTCOME% ^|>>"%GITHUB_STEP_SUMMARY%"
Expand Down Expand Up @@ -399,16 +425,23 @@ jobs:
steps.launch_advisory_negative_fixture_check.outcome != 'success'
) ||
(
github.event_name == 'workflow_dispatch' &&
env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'template' &&
steps.production_promotion_manifest_template.outcome != 'success'
) ||
(
github.event_name == 'workflow_dispatch' &&
env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'validate' &&
steps.production_promotion_manifest_validation.outcome != 'success'
(
steps.production_promotion_inputs.outcome != 'success' ||
steps.production_promotion_manifest_validation.outcome != 'success'
)
) ||
(
github.event_name == 'workflow_dispatch' &&
env.JTG_PRODUCTION_PROMOTION_MANIFEST_MODE == 'activate' &&
(
steps.production_promotion_inputs.outcome != 'success' ||
steps.production_promotion_manifest_validation.outcome != 'success' ||
steps.production_promotion_activation_gate.outcome != 'success' ||
steps.production_promotion_activation_token_smoke.outcome != 'success' ||
Expand Down
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ Add JavaToGpu as both a dependency and an annotation processor:

```groovy
dependencies {
implementation 'io.github.deussixik:javatogpu:0.1.0-alpha.1'
annotationProcessor 'io.github.deussixik:javatogpu:0.1.0-alpha.1'
implementation 'io.github.deussixik:javatogpu:0.1.0-alpha.2'
annotationProcessor 'io.github.deussixik:javatogpu:0.1.0-alpha.2'
}
```

Optional stricter IR validation:

```groovy
dependencies {
annotationProcessor 'io.github.deussixik:javatogpu-ir-validation:0.1.0-alpha.1'
annotationProcessor 'io.github.deussixik:javatogpu-ir-validation:0.1.0-alpha.2'
}

tasks.withType(JavaCompile).configureEach {
Expand Down Expand Up @@ -103,6 +103,8 @@ Advanced topics:
- [Language Contract](docs/Language-Contract.md)
- [OpenCL Data Model](docs/OpenCL-Data-Model.md)
- [IR Validation](docs/IR-Validation.md)
- [IR Optimizer](docs/IR-Optimizer.md)
- IR Vendor Optimizer is documented in the IR Optimizer guide as a separate optional provider artifact.
- [Validation and Operations](docs/Validation-and-Operations.md)
- [Diagnostics Reference](docs/Diagnostics-Reference.md)
- [ASM Contract](docs/ASM-Contract.md)
Expand Down Expand Up @@ -134,10 +136,20 @@ processor/build/reports/opencl/

Start with `validation-report.md` when checking a run.

Run the optional IR optimizer journal example:

```powershell
.\gradlew.bat :examples-app:runOptimizationJournalExample --console=plain
```

The example is documented in [examples-app/IR_OPTIMIZER_JOURNAL_EXAMPLE.md](examples-app/IR_OPTIMIZER_JOURNAL_EXAMPLE.md) and shows how to opt into the optimizer module while dumping original and optimized IR artifacts plus the optional ServiceLoader-backed runtime lifecycle event journal for review. It also includes a small custom `GpuRuntimeLifecycleService` example so downstream modules can add tracing or metrics without manual callback registration.

## Project Layout

- `processor` - annotation processor, compiler, OpenCL emitter, runtime, launchers, tests, and validation buckets.
- `ir-validation` - optional stricter IR validation module.
- `ir-optimizer` - optional backend-neutral IR optimizer skeleton and future transform module.
- `ir-vendor-optimizer` - optional vendor-specific IR optimizer provider skeleton; it plugs into the vendor proposal SPI and is not loaded by the default runtime optimizer bridge.
- `examples-app` - example kernels and usage patterns.
- `test-app` - consumer-style sample application.
- `docs` - public documentation.
Expand All @@ -149,9 +161,11 @@ Published artifacts:
```text
io.github.deussixik:javatogpu
io.github.deussixik:javatogpu-ir-validation
io.github.deussixik:javatogpu-ir-optimizer
io.github.deussixik:javatogpu-ir-vendor-optimizer
```

Publishing is configured for the main processor artifact and the optional IR validation artifact. Keep Maven Central credentials and signing keys outside the repository. See [Publishing Guide](docs/Publishing.md).
Publishing is configured for the main processor artifact, optional IR validation artifact, optional backend-neutral IR optimizer artifact, and optional vendor optimizer provider artifact. Keep Maven Central credentials and signing keys outside the repository. See [Publishing Guide](docs/Publishing.md).

## License

Expand Down
Loading
Loading