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
74 lines
3.0 KiB
Plaintext
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];
|
|
}
|
|
}
|