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
113 lines
3.6 KiB
Plaintext
113 lines
3.6 KiB
Plaintext
// Multi-block-per-workgroup variant of turbo4.comp. Identical decode math;
|
|
// one workgroup processes BLOCKS_PER_WG consecutive KV indices serially in a
|
|
// 32-thread loop. BLOCKS_PER_WG is a SPIR-V specialization constant
|
|
// (constant_id = 0); default 1 == turbo4.comp behaviour. local_size stays 32
|
|
// (portable shared-memory tree reduction, no subgroup assumptions).
|
|
//
|
|
// Dispatch: grid_x = ceil(n_kv / BLOCKS_PER_WG), tg_x = 32.
|
|
|
|
#version 450
|
|
#extension GL_EXT_shader_16bit_storage : require
|
|
#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
|
|
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
|
|
|
|
layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
|
|
|
|
layout(constant_id = 0) const uint BLOCKS_PER_WG = 1u;
|
|
|
|
layout(std430, binding = 0) readonly buffer QBuf { float q[]; };
|
|
layout(std430, binding = 1) readonly buffer KBuf { uint k_packed[]; };
|
|
layout(std430, binding = 2) writeonly buffer OutBuf { float scores[]; };
|
|
|
|
layout(push_constant) uniform Push {
|
|
uint head_dim; // must be 128
|
|
uint n_kv;
|
|
uint kv_stride_blocks; // 4 for d=128
|
|
uint q_head;
|
|
uint head_offset_bytes;
|
|
} push;
|
|
|
|
const uint TURBO4_BLOCK_BYTES = 18u;
|
|
|
|
const float TURBO_CENTROIDS_4BIT[16] = float[16](
|
|
-2.7321365, -2.0685055, -1.6175243, -1.2557391,
|
|
-0.9419147, -0.6564307, -0.3878412, -0.1283243,
|
|
0.1283243, 0.3878412, 0.6564307, 0.9419147,
|
|
1.2557391, 1.6175243, 2.0685055, 2.7321365
|
|
);
|
|
|
|
float fp16_to_fp32(uint h16) {
|
|
uint sign = (h16 & 0x8000u) << 16;
|
|
uint exp = (h16 >> 10) & 0x1Fu;
|
|
uint mant = h16 & 0x3FFu;
|
|
uint u;
|
|
if (exp == 0u) {
|
|
if (mant == 0u) { u = sign; }
|
|
else {
|
|
uint e = 1u;
|
|
while ((mant & 0x400u) == 0u) { mant <<= 1; e += 1u; }
|
|
mant &= 0x3FFu;
|
|
u = sign | ((127u - 15u - e + 1u) << 23) | (mant << 13);
|
|
}
|
|
} else if (exp == 0x1Fu) {
|
|
u = sign | 0x7F800000u | (mant << 13);
|
|
} else {
|
|
u = sign | ((exp + 127u - 15u) << 23) | (mant << 13);
|
|
}
|
|
return uintBitsToFloat(u);
|
|
}
|
|
|
|
uint read_byte(uint b) {
|
|
uint w = k_packed[b >> 2];
|
|
return (w >> ((b & 3u) * 8u)) & 0xFFu;
|
|
}
|
|
uint read_u16(uint b) {
|
|
return read_byte(b) | (read_byte(b + 1u) << 8u);
|
|
}
|
|
|
|
shared float partials[32];
|
|
|
|
float reduce_sum_32(float v, uint tid) {
|
|
partials[tid] = v;
|
|
barrier();
|
|
for (uint stride = 16u; stride > 0u; stride >>= 1) {
|
|
if (tid < stride) {
|
|
partials[tid] += partials[tid + stride];
|
|
}
|
|
barrier();
|
|
}
|
|
return partials[0];
|
|
}
|
|
|
|
void main() {
|
|
uint tid = gl_LocalInvocationID.x;
|
|
uint elem0 = tid * 4u;
|
|
uint blk_idx = elem0 >> 5;
|
|
uint within0 = elem0 & 31u;
|
|
uint q_base = push.q_head * push.head_dim + elem0;
|
|
|
|
uint kv_base = gl_WorkGroupID.x * BLOCKS_PER_WG;
|
|
for (uint b = 0u; b < BLOCKS_PER_WG; ++b) {
|
|
uint kv_idx = kv_base + b;
|
|
if (kv_idx >= push.n_kv) return;
|
|
|
|
uint group_off = push.head_offset_bytes +
|
|
kv_idx * push.kv_stride_blocks * TURBO4_BLOCK_BYTES;
|
|
uint blk_off = group_off + blk_idx * TURBO4_BLOCK_BYTES;
|
|
float norm = fp16_to_fp32(read_u16(blk_off + 0u));
|
|
|
|
float acc = 0.0;
|
|
for (uint local = 0u; local < 4u; local += 1u) {
|
|
uint within = within0 + local;
|
|
uint qs_byte = read_byte(blk_off + 2u + (within & 15u));
|
|
uint idx = within < 16u ? (qs_byte & 0xFu) : (qs_byte >> 4);
|
|
acc = fma(q[q_base + local], TURBO_CENTROIDS_4BIT[idx] * norm, acc);
|
|
}
|
|
|
|
float sum = reduce_sum_32(acc, tid);
|
|
if (tid == 0u) {
|
|
scores[push.q_head * push.n_kv + kv_idx] = sum;
|
|
}
|
|
}
|
|
}
|