بنقرة واحدة
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