Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
19 changes: 19 additions & 0 deletions 03_hadamard_tc/a962695448-rgb/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Keep the experimental source hash reproducible across platforms.
src/tune_launch.cu text eol=lf
platforms/iluvatar/shared_baseline.cu text eol=lf
platforms/iluvatar/hadamard_api.h text eol=lf
platforms/iluvatar/hadamard_api.cu text eol=lf
platforms/iluvatar/validate_and_benchmark.cu text eol=lf
platforms/iluvatar/run_platform.py text eol=lf
platforms/metax/hadamard_api.h text eol=lf
platforms/metax/hadamard_api.cu text eol=lf
platforms/metax/validate_and_benchmark.cu text eol=lf
platforms/metax/run_platform.py text eol=lf
platforms/biren/hadamard_api.h text eol=lf
platforms/biren/hadamard_api.su text eol=lf
platforms/biren/validate_and_benchmark.su text eol=lf
platforms/biren/run_platform.py text eol=lf
platforms/ascend/*.h text eol=lf
platforms/ascend/*.cpp text eol=lf
platforms/ascend/*.py text eol=lf
platforms/ascend/CMakeLists.txt text eol=lf
10 changes: 10 additions & 0 deletions 03_hadamard_tc/a962695448-rgb/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/build/
__pycache__/
*.pyc
*.nsys-rep
*.sqlite
/results/iluvatar/**/validate_and_benchmark
/results/metax/**/validate_and_benchmark
/results/biren/**/validate_and_benchmark
/results/ascend/**/validate_and_benchmark
/results/ascend/**/build/
64 changes: 64 additions & 0 deletions 03_hadamard_tc/a962695448-rgb/EVIDENCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# 验证证据与完整档案

本提交保留实现、必要测试、平台入口、简明报告及摩尔的核心复现材料。
完整开发分支和历史实验不随此次精简删除。

## 固定档案

- [完整归档提交 3676727](https://github.com/a962695448-rgb/Learning-CUDA/tree/3676727fc21ea27bda668d743d10e52d7e138f68/03_hadamard_tc/a962695448-rgb)
- [历史 results 目录](https://github.com/a962695448-rgb/Learning-CUDA/tree/3676727fc21ea27bda668d743d10e52d7e138f68/03_hadamard_tc/a962695448-rgb/results)

该 results 目录的 2,586 个历史文件通过固定提交引用。日志、失败记录、数据和
实验脚本仍可在个人仓库查询;本 PR 的功能和测试不要求下载全部历史归档。
复现某次历史实验时,应使用该实验清单指定的源码、环境和输入;历史说明中的
results 路径属于完整档案检出。新运行可以在当前目录创建自己的结果目录。

## 重点审查入口

| 内容 | 入口与范围 |
|---|---|
| NVIDIA 最新生产验证 | [A100/4090 调用方式与自动规则](reports/a100-calling-validation.md),原始数据链接固定到对应档案 |
| 独立参考与线程配置 | [A100 跨卡报告](reports/a100-validation.md),包含固定 Dao 对照与全部负例 |
| 小维度行打包 | [A800/4090 报告](reports/packed-rows-validation.md),按设备和 Graph/普通调用分别说明 |
| N256 显式融合布局 | [4090](reports/fused-layout-validation.md)、[A100](reports/fused-layout-a100-validation.md) |
| 五种国产平台 | 各 platforms 子目录 README,分别列出 SDK、设备、正确性和本机基线 |
| 摩尔原始计时与再生成 | [公开复现材料](platforms/moore/repro/README.zh-CN.md),含 6,750 条计时、冻结对照和夹具生成器 |
| 代码来源与本轮检查 | [SUBMISSION_MANIFEST.json](SUBMISSION_MANIFEST.json) |

## 首轮精简提交的验证边界

初次精简阶段没有改变 CUDA/MUSA 等计算源码。保留代码的 Git blob SHA 与固定档案一致;
当时的工作是精简提交、整理文档链接和执行 CPU 检查。此前 GPU 结果仍归属于
其清单明确记录的实测版本,不将本轮整理写成新的 GPU 实验。

本地 CPU reference 检查、摩尔离线复算及数据完整性检查通过。原始 GPU 结果中
测试范围、跳过项、慢例及计时方式均保留,跨设备及不同计时口径不直接相除。

## 2026-09-17 独立量化入口

新增显式 packed 量化入口的完整范围见 [报告](reports/quantize-packed-20260917.md)。
[固定档案](https://github.com/a962695448-rgb/Learning-CUDA/tree/29bb34a0b2817e282a9554bd92c3911a3c010762/03_hadamard_tc/a962695448-rgb/results/quantize-packed-20260917) 包含最终双重性能门槛、正确性检查、源码和复现准备工具,也保存新增参数引入主机开销的初版实验。当前源文件与新测试哈希已在 SUBMISSION_MANIFEST.json 更新;未将先前的跨卡或国产平台记录当成本轮新入口的实测证据。

## 2026-09-17 单元素穷举与未采用候选

[报告](reports/singleton-quantization-20260917.md) 记录当前生产内核的完整单元素位型检查,以及未达收益门槛的符号简化候选。生产计算源码未变,新工具的指纹已登记;失败候选的源码和计时数据独立保留。

[本轮固定档案](https://github.com/a962695448-rgb/Learning-CUDA/tree/5e80eadd156c82a299e7cc7991bf46d1904243e6/03_hadamard_tc/a962695448-rgb/results/singleton-quantization-20260917) 保存完整原始结果与可验证的准备工具。

## 2026-09-17 成对量化

[最终报告](reports/paired-quantization-20260917.md) 记录 RTX4090 的分量编码、偏移、旧接口、长采样和 A/A 校准。新增 kernel 与测试的哈希已登记;三版源码及失败协议分别归档,不借用别的型号或历史源码作为本轮验证。

[本轮固定验证档案](https://github.com/a962695448-rgb/Learning-CUDA/tree/9b3bb79f3c67b6c5e284be7ded9559148b5ae448/03_hadamard_tc/a962695448-rgb/results/paired-quantization-20260917) 保留完整的所有阶段及原始判定。

## 2026-09-17 打包变换验证与成对候选

[本轮报告](reports/paired-hadamard-20260917.md) 列出基线验证与两个 REJECT 候选。计算/构建源码保持 b49fff4,新增验证器按实机通过的内容登记指纹;完整两版数据和源码通过报告中的固定归档链接复现。

## 2026-09-17 普通调用交叉诊断

[诊断报告](reports/host-attribution-20260917.md) 区分独立中位数与配对统计,并给出同源模块、缓冲池和测量顺序对照。固定证据通过报告链接访问;本次不新增生产计算变化或采纳结论。

## 2026-09-17 整合入口完整验证

[本轮报告](reports/integrated-pairs-20260917.md) 保存CLI六配置自测、接口回归和588设备/588主机对照。唯一未过判据为绝对耗时离散度;相对性能达标不自动覆盖该失败。原始数据可通过无损恢复工具逐文件校验。
34 changes: 34 additions & 0 deletions 03_hadamard_tc/a962695448-rgb/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
CUDA_HOME ?= $(HOME)/.local/opt/cuda-12.8
NVCC ?= $(CUDA_HOME)/bin/nvcc
ARCH ?= 89
CXX ?= g++
NVCCFLAGS ?= -O3 -std=c++17 -lineinfo -arch=sm_$(ARCH)

.PHONY: all self-test benchmark cpu-test clean FORCE
all: build/hadamard

build/config.txt: FORCE
@mkdir -p build
@printf '%s\n' '$(NVCC) $(NVCCFLAGS)' > build/config.tmp
@cmp -s build/config.tmp $@ || cp build/config.tmp $@
@rm -f build/config.tmp

build/hadamard: src/main.cu include/kernels.cuh include/contiguous256.cuh include/packed_rows.cuh include/row_policy.hpp include/reference.hpp build/config.txt
mkdir -p build
$(NVCC) $(NVCCFLAGS) -Iinclude src/main.cu -o $@

self-test: build/hadamard
./build/hadamard --self-test

benchmark: build/hadamard
./build/hadamard --benchmark --csv results/benchmark.csv

cpu-test: tests/cpu_reference_test.cpp include/reference.hpp tests/row_policy_test.cpp include/row_policy.hpp
mkdir -p build
$(CXX) -O3 -std=c++17 -Iinclude tests/cpu_reference_test.cpp -o build/cpu_reference_test
./build/cpu_reference_test
$(CXX) -O3 -std=c++17 -Iinclude tests/row_policy_test.cpp -o build/row_policy_test
./build/row_policy_test

clean:
rm -f build/hadamard build/cpu_reference_test build/row_policy_test build/config.txt build/config.tmp
134 changes: 134 additions & 0 deletions 03_hadamard_tc/a962695448-rgb/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# Hadamard 变换加速与 INT4 融合

2026 夏季训练营 Hadamard 项目的精简提交版本,提供 NVIDIA CUDA 实现、PyTorch
前向接口,以及五种国产平台的独立入口。完整开发记录见 [证据索引](EVIDENCE.md)。

## 功能与数值约定

- 对最后一维执行 Sylvester Hadamard 变换,支持 FP16/BF16 存储、FP32 内部计算。
- 最后一维支持 1~256 的二次幂;CLI 使用 batch、seq、heads、dim 描述四维输入。
- 同时提供普通 CUDA 基线、warp 寄存器实现和稠密 WMMA Tensor Core 对照。
- 支持分步与融合 INT4:先将变换结果舍入到公开存储类型,再按行缩放、最近偶数舍入、
截断到 [-7,7] 并打包;分步与融合的字节及 scales 要求精确一致。
- 默认 scale=1;归一化为 1/sqrt(dim)。全零行的量化 scale 为 1。

PyTorch 接受连续、非空的二维或四维 CUDA 张量,输出变换保持输入形状和 dtype。
打包结果为 uint8,最后一维为 ceil(dim/2);行 scales 为 FP32。
接口使用调用方当前 stream,提供前向计算;不支持自动求导、FP8、任意步长和 dim>256。

## 快速开始

以下命令从本目录执行。CPU reference 检查只需要 C++17:

~~~bash
make cpu-test
~~~

NVIDIA 构建需要 CUDA Toolkit 和 sm80+ GPU。按实际设备设置 ARCH:

~~~bash
# A100 使用 ARCH=80;RTX 4090/4060 使用 ARCH=89。
make CUDA_HOME=/usr/local/cuda ARCH=89
./build/hadamard --self-test
python3 scripts/run_validation.py --label validation-new --benchmark
~~~

PyTorch 扩展通过当前 PyTorch ABI 编译:

~~~bash
python3 scripts/build_torch_extension.py --verbose
~~~

~~~python
import torch
from scripts.build_torch_extension import load_extension

op = load_extension()
x = torch.randn((2, 16), device="cuda", dtype=torch.float16)
y = op.hadamard(x, 1.0)
packed, row_scales = op.hadamard_int4(x, 1.0)
split_packed, split_scales = op.quantize_int4(y)
assert torch.equal(packed, split_packed)
assert torch.equal(row_scales, split_scales)
~~~

Hadamard 与融合接口默认 row_layout 为 original、线程数为 128。packed/auto、256 线程和 contiguous256
融合布局均为显式选项,其设备及形状范围见 [完整接口与开发记录](docs/DEVELOPMENT.md)。
Tensor Core 对照在部分已测场景中慢于 warp,相关结果完整保留。

## 平台入口

| 平台 | 构建与验收说明 |
|---|---|
| NVIDIA CUDA | 本页、[A100/4090 生产验证](reports/a100-calling-validation.md) |
| 天数 MR-V100 / COREX | [原生 API、Warp64 与结果](platforms/iluvatar/README.md) |
| 沐曦 C500 / MACA,25% sGPU 配额 | [原生 API 与结果](platforms/metax/README.md) |
| 壁仞 106M / SUPA | [原生 API、BF16 舍入与结果](platforms/biren/README.md) |
| 昇腾 910B1 / CANN | [Ascend C API 与结果](platforms/ascend/README.md) |
| 摩尔 S4000 / MUSA | [报告](platforms/moore/REPORT.zh-CN.md)、[公开复现材料](platforms/moore/repro/README.zh-CN.md) |

这些后端使用各自的 SDK、编译器和设备 API,按对应 README 独立构建。

## 验证与性能范围

- NVIDIA 生产版本在 A100 与 4090 分别通过 1,876 组 CLI 输入的多种模式、
1,800 组固定版本第三方对照及接口/stream/偏移条件检查。
- 分步、融合 INT4 的输出字节和行 scales 精确一致;原始失败与负例均可追溯。
- 摩尔完整验证为 1,504 组输入、192 项 API 和 14 项 CLI 检查;精确量化优化的
三轮配对计时共 6,750 条,默认融合相对上一版在已测配置中为 2.012~2.898×。
- 各平台记录各自的硬件、SDK、版本和计时方式;Graph、event 与端到端数据分别解释。

以上为首轮跨平台基线的归档结果,版本、计数与限制见 [证据索引](EVIDENCE.md)。
后续增量优化与补测见下方专题报告,各次结论只覆盖对应源码、硬件和测试范围。

## 建议审查顺序

1. include/reference.hpp:独立参考、舍入和打包约定。
2. include/kernels.cuh 及其他内核头文件:CUDA 实现与显式调优策略。
3. src/main.cu、tests/cpu_reference_test.cpp:验证与基准入口。
4. src/torch_binding.cu:张量契约和前向接口。
5. 各国产平台目录与对应报告。

## 2026-09-16 执行上下文补测

新增 [120 组流与 CUDA Graph 回归](reports/execution-context-20260916.md):独立 CPU 参考、输入变化、输入不可变性,以及默认流错误/旧输出负例。RTX 4090 D 实测全部通过;原计算内核和性能结论保持各自的历史验证范围。

## RTX 4090 D 自动布局优化

[限定范围的 auto 路由](reports/4090d-routing-20260916.md) 在 dim 1/2/4/8/16、4096~65536 行上选用已有 packed kernel。180 组配置经过三轮配对及正确性验证,受测 auto 路径的 Graph 设备执行加速为 1.31~7.53×。默认 original 保持不变;该数字不代表普通 Python 调用或模型端到端收益。

## 复用输出缓冲区

新增 [三个 out 前向接口](reports/out-buffers-20260917.md),可复用预分配的输出。受测小、中批量的普通 Python 调用平均加速约 1.75~2.05×;输出由调用者持有,接口返回 None。原接口、默认参数及设备核函数源码保持不变。

## 小维度独立量化

新增显式 `quantize_int4_packed` 与 `quantize_int4_packed_out`,支持 N≤16。RTX4090D 的三轮分组设备加速约 2.87–3.17×,普通 allocating/out 调用整体几何平均约 1.36×/1.89×;原接口签名与默认路径保留。见 [使用方式、完整范围与原始实验取舍](reports/quantize-packed-20260917.md)。原始结果见[固定验证档案](https://github.com/a962695448-rgb/Learning-CUDA/tree/29bb34a0b2817e282a9554bd92c3911a3c010762/03_hadamard_tc/a962695448-rgb/results/quantize-packed-20260917)。

## 单元素量化穷举

新增 [FP16/BF16 单元素量化穷举](reports/singleton-quantization-20260917.md),覆盖 131,072 种存储编码和 128,768 个有限值的独立参考。计算简化候选未达到预设性能门槛,已保留实验记录并继续使用原生产内核。

## 成对独立量化

N=2/4/8/16 的显式 packed 量化改为每线程处理相邻两值,保持原 API。RTX4090 最终分组设备几何平均加速约 1.36–1.43×,普通 allocating/out 目标约 1.07×/1.12×;所有对照及 A/A 校准通过。见 [完整范围、失败记录与复现入口](reports/paired-quantization-20260917.md)。

## 打包变换边界验证与负实验

新增 [packed Hadamard 验证器及两版实验记录](reports/paired-hadamard-20260917.md)。基线通过 128 项有限分量/偏移配置与 24 项流/Graph 检查;两版成对变换候选均未通过普通调用门槛,生产计算源码保持 b49fff4。

## 普通调用计时诊断

[三进程交叉诊断](reports/host-attribution-20260917.md) 保存同源双模块、共享/轮换输出池和测量顺序的3240个计时块。四种配置未复现跨进程稳定超过5%的候选差异;它不替代完整矩阵,原来的两次未采用判定和生产计算保持原有范围。

## 整合入口候选的完整验证

[完整CLI/接口/性能验证](reports/integrated-pairs-20260917.md) 的正确性与所有相对性能限值通过,但一个共同波动区间未过预设绝对稳定性判据,最终仍为REJECT。生产内核保持原版,完整日志和时间线已归档。

## 相对稳定性前瞻确认

[三轮新采样确认](reports/relative-stability-confirm-20260918.md) 仍有一项配对比值波动超出预登记门槛,最终未采用。全部原始结果已归档;生产计算保持原有版本,停止对该候选重复确认。

## N32–256 半warp变换验证

[完整三轮记录](reports/wide-pairs-20260918.md) 包含416项有限分量、512项溢出兼容及全部入口回归。678设备与1356主机记录完整,部分配置退化超出门槛,因此保留原生产实现;融合目标分组的收益也按未采用候选记录。
Loading