ワンクリックで
ptxir-serialization
PTXIR 二进制序列化格式 — 预解析 PTX kernel 的快速加载与存储,绕过 ANTLR 解析开销
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
PTXIR 二进制序列化格式 — 预解析 PTX kernel 的快速加载与存储,绕过 ANTLR 解析开销
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
PTX-EMU 项目经验沉淀 — 跨模块状态翻译、递归锁、分 Phase commit、基线 worktree、qualifier 类型判断等具体失败模式与可复用 checklist。来自 2026-06 barrier module 迁移 + 2026-07 cute_rmsnorm float 类型判断实战
ADR 合规检查 — 开发完成后对照 ADR 检查清单验证实现是否符合架构决策
Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.
PTX-EMU 专用调试技能 - 自动化调试配置选择和场景化调试方法
| name | ptxir-serialization |
| description | PTXIR 二进制序列化格式 — 预解析 PTX kernel 的快速加载与存储,绕过 ANTLR 解析开销 |
| when_to_use | PTX-EMU 项目中出现: - "PTX 加载慢", "解析太慢", "cache PTX" - "ptxir", "序列化", "反序列化", "PTXIR" - "保存解析结果", "快速加载 kernel" |
| skills_required | [] |
PTXIR (PTX Intermediate Representation) is a binary serialization format for PTX-EMU's StatementContext IR. It enables fast loading of pre-parsed PTX kernels, bypassing ANTLR parsing overhead (~200ms → ~5ms).
┌─────────────────────────────────┐
│ PTXIRHeader (24B) │
├─────────────────────────────────┤
│ Section TOC (6B * N) │
├─────────────────────────────────┤
│ REGDECL Section │
├─────────────────────────────────┤
│ KERNEL Section │
├─────────────────────────────────┤
│ STRING_TABLE Section │
└─────────────────────────────────┘
struct PtxirHeader {
char magic[4]; // "PTXIR"
uint16_t version; // 1
uint16_t flags; // reserved
uint16_t section_count; // number of sections
uint32_t string_offset; // string table offset
uint32_t string_size; // string table size
};
| Type | Value | Description |
|---|---|---|
| REGDECL | 1 | Register declarations (operand table) |
| KERNEL | 2 | Kernel statements |
| STRING_TABLE | 3 | String pool for labels/identifiers |
// Serialize StatementContext vector to .ptxir file
bool serialize_statements(const std::vector<StatementContext>& stmts,
const std::string& path);
// Deserialize .ptxir file to StatementContext vector
std::vector<StatementContext> deserialize_statements(const std::string& path);
// Generate .ptxir from PTX source (PTX → ANTLR → serialize)
bool generate_ptxir(const std::string& ptx_path,
const std::string& ptxir_path,
const std::string& kernel_name = "");
// Load .ptxir with optional CFG builder application
std::vector<StatementContext> load_ptxir(const std::string& ptxir_path,
bool apply_cfg = false);
class PtxirWriter {
public:
explicit PtxirWriter(std::ostream& out);
void write(const std::vector<StatementContext>& stmts);
};
Process:
RegOperand → assign compact u32 IDsclass PtxirReader {
public:
explicit PtxirReader(std::istream& in);
std::vector<StatementContext> read();
};
Process:
.ptxir file → deserialize → StatementContext[] → execute
↓
~5ms load time
# Generate .ptxir from existing PTX file
python3 docs/skills/three-mode-testing/generate_tests.py \
--benchmark test_divergence_sync_standalone \
--ptxir
// Serialize → Deserialize → Compare
auto stmts_ref = load_ptx_statements(ptx_path, "", false);
serialize_statements(stmts_ref, "test.ptxir");
auto stmts_loaded = deserialize_statements("test.ptxir");
CHECK(stmts_loaded.size() == stmts_ref.size());
| StatementType | Encoding | Notes |
|---|---|---|
| S_BRA | BranchInstr | target, predicate, reconvergence_pc |
| S_LABEL | LabelInstr | labelName |
| S_EXIT, S_RET | VoidInstr | - |
| S_BAR | BarrierInstr | barId, qualifiers |
| S_MOV, S_ADD, S_SUB, S_MUL | GenericInstr | operands, qualifiers |
| S_LD, S_ST | GenericInstr | operands |
| S_SETP | GenericInstr | operands |
| S_PRAGMA | PragmaInstr | content |
| S_DOLLOR | DollarNameInstr | name |
| S_REG, S_CONST, S_SHARED, S_LOCAL, S_GLOBAL, S_PARAM | DeclarationInstr | kind, dataType, name, array_size |
load_ptx_statements() and generate_ptxir()apply_cfg_builder() after loading if needed# ptxir_writer and ptxir_reader are built as shared libraries
find_library(ptxir_writer REQUIRED)
find_library(ptxir_reader REQUIRED)
target_link_libraries(test_ptxir_serialization PRIVATE ptxir_writer ptxir_reader)
src/ptx_ir/
├── ptxir_format.h # Binary format definitions
├── ptxir_writer.h/cpp # Serialization
├── ptxir_reader.h/cpp # Deserialization
tests/three_mode_testing/
├── test_ptxir_serialization.cpp # Mode 4 tests
├── test_helpers.hpp # serialize/deserialize helpers
tests/ptxir/ # Pre-generated .ptxir files
openspec/changes/ptxir-serialization-architecture/ — Full design doc