Files
elizaos--eliza/plugins/plugin-local-inference/native/vulkan/mul_mm_reg.comp
T
wehub-resource-sync 426e9eeabd
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
Chat shell gestures / Chat shell gesture + parity e2e (push) Has been cancelled
Cloud Gateway Discord / Test (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Has been cancelled
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Has been cancelled
Build Agent Image / build-and-push (push) Has been cancelled
Dev Smoke / bun run dev onboarding chat (push) Has been cancelled
Dev Smoke / Vite HMR dependency-level smoke (push) Has been cancelled
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Has been cancelled
Publish @elizaos/example-code / check_npm (push) Has been cancelled
Publish @elizaos/example-code / publish_npm (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / verify_version (push) Has been cancelled
Publish @elizaos/plugin-elizacloud / publish_npm (push) Has been cancelled
Sandbox Live Smoke / Sandbox live smoke (push) Has been cancelled
Snap Build & Test / Build Snap (amd64) (push) Has been cancelled
Snap Build & Test / Build Snap (arm64) (push) Has been cancelled
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Has been cancelled
Cloud Gateway Webhook / Test (push) Has been cancelled
Cloud Tests / lint-and-types (push) Has been cancelled
Cloud Tests / unit-tests (push) Has been cancelled
Cloud Tests / integration-tests (push) Has been cancelled
Cloud Tests / e2e-tests (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
Deploy Apps Worker (Product 2) / Determine environment (push) Has been cancelled
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Has been cancelled
Deploy Eliza Provisioning Worker / Determine environment (push) Has been cancelled
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Has been cancelled
Dev Smoke / Classify changed paths (push) Has been cancelled
supply-chain / sbom (push) Has been cancelled
supply-chain / vulnerability-scan (push) Has been cancelled
Build, Push & Deploy to Phala Cloud / build-and-push (push) Has been cancelled
Test Packaging / Validate Packaging Configs (push) Has been cancelled
Test Packaging / Build & Test PyPI Package (push) Has been cancelled
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Has been cancelled
Test Packaging / Pack & Test JS Tarballs (push) Has been cancelled
UI Fixture E2E / ui-fixture-e2e (push) Has been cancelled
UI Fixture E2E / fixture-e2e (push) Has been cancelled
UI Story Gate / story-gate (push) Has been cancelled
vault-ci / test (macos-latest) (push) Has been cancelled
vault-ci / test (ubuntu-latest) (push) Has been cancelled
vault-ci / test (windows-latest) (push) Has been cancelled
vault-ci / app-core wiring tests (push) Has been cancelled
verify-patches / verify patches/CHECKSUMS.sha256 (push) Has been cancelled
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Has been cancelled
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Has been cancelled
Voice Benchmark Smoke / voice bench smoke summary (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Has been cancelled
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Has been cancelled
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Has been cancelled
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00

74 lines
3.0 KiB
Plaintext

#version 450
// Register-blocked mul_mm for Mali (#9584/#9715). The naive shared-memory tile
// (mul_mm_tiled) is slower than scalar on Mali-G715 — staging + per-K-tile
// barriers cost more than the bandwidth they save, because the kernel still
// does 1 MAC per shared load (same arithmetic intensity as scalar, which Mali's
// UMA cache already serves well). The real cooperative-matrix-free win is
// REGISTER BLOCKING: a 64x64 workgroup tile where each of the 256 threads keeps
// a 4x4 accumulator, so each shared element feeds 4 MACs (8 reg-loads → 16 MACs
// per k step) — 8x the arithmetic intensity of scalar. C[M,N]=A[M,K]*B[K,N] f32.
#define TM 64 // workgroup output rows
#define TN 64 // workgroup output cols
#define TK 16 // K step staged into shared memory
#define WM 4 // per-thread output rows
#define WN 4 // per-thread output cols
// local = (TN/WN) x (TM/WM) = 16 x 16 = 256 threads
layout(local_size_x = 16, local_size_y = 16) in;
layout(std430, binding = 0) readonly buffer ABuf { float A[]; };
layout(std430, binding = 1) readonly buffer BBuf { float B[]; };
layout(std430, binding = 2) writeonly buffer CBuf { float C[]; };
layout(push_constant) uniform Push { uint M, N, K; } p;
shared float As[TM][TK]; // 64 x 16
shared float Bs[TK][TN]; // 16 x 64
void main() {
uint tx = gl_LocalInvocationID.x; // 0..15
uint ty = gl_LocalInvocationID.y; // 0..15
uint tid = ty * 16u + tx; // 0..255
uint rowBase = gl_WorkGroupID.y * TM;
uint colBase = gl_WorkGroupID.x * TN;
float acc[WM][WN];
for (int i = 0; i < WM; i++) for (int j = 0; j < WN; j++) acc[i][j] = 0.0;
uint nTiles = (p.K + TK - 1u) / TK;
for (uint t = 0; t < nTiles; ++t) {
uint kBase = t * TK;
// Collaboratively stage the A tile (TM*TK = 1024 = 256 threads * 4).
for (uint l = 0; l < 4u; ++l) {
uint idx = tid + l * 256u;
uint r = idx / TK, k = idx % TK;
uint gr = rowBase + r, gk = kBase + k;
As[r][k] = (gr < p.M && gk < p.K) ? A[gr * p.K + gk] : 0.0;
}
// ...and the B tile (TK*TN = 1024).
for (uint l = 0; l < 4u; ++l) {
uint idx = tid + l * 256u;
uint k = idx / TN, c = idx % TN;
uint gk = kBase + k, gc = colBase + c;
Bs[k][c] = (gk < p.K && gc < p.N) ? B[gk * p.N + gc] : 0.0;
}
barrier();
for (uint k = 0; k < TK; ++k) {
float aReg[WM], bReg[WN];
for (int i = 0; i < WM; i++) aReg[i] = As[ty * WM + uint(i)][k];
for (int j = 0; j < WN; j++) bReg[j] = Bs[k][tx * WN + uint(j)];
for (int i = 0; i < WM; i++)
for (int j = 0; j < WN; j++)
acc[i][j] += aReg[i] * bReg[j];
}
barrier();
}
for (int i = 0; i < WM; i++) for (int j = 0; j < WN; j++) {
uint gr = rowBase + ty * WM + uint(i);
uint gc = colBase + tx * WN + uint(j);
if (gr < p.M && gc < p.N) C[gr * p.N + gc] = acc[i][j];
}
}