执行后端

区分 ArcTN 原生 CPU 执行器、显式 opt_einsum 数组后端和 Cotengra 树互操作。

本页目录

默认后端与显式选择

arctn_contract(..., backend=...)ArcTNExecutionPlan.execute(..., backend=...) 默认使用 native,不根据数组类型或硬件自动切换后端。native 进入 ArcTN 的 Rust CPU executor;其他合法的非空名称都作为显式 opt_einsum 数组 backend。执行失败时也不会隐式切换到另一后端。

GPU 数组后端

ArcTN 的 native executor 面向 CPU。CuPy、PyTorch 或 JAX 数组由 opt_einsum 与相应数组库执行。

backend ArcTN 负责 实际张量运算
native 完整原生执行、切片调度、结果归并 Rust matrixmultiply CPU kernel
numpy 编译固定表达式并显式分派 opt_einsum + NumPy/其底层实现
cupy / torch / jax 等 验证 shape/dtype、固定路径和切片索引计划 opt_einsum 选择的数组库与设备 runtime

实现边界

CuPy、PyTorch 或 JAX 路线不是 ArcTN 自研 GPU executor。ArcTN 提供路径、切片计划和统一分派,具体设备算子及兼容性由 opt_einsum 和已安装数组库决定。

未切片与已切片的分派

场景 native 显式非 native backend
未切片 Rust contract_network / compiled executor 编译并执行一个 opt_einsum contract_expression
已切片 Rust contract_network_sliced;Rayon 外层 chunks Python 串行枚举 assignment;每片复用同一个 contract_expression
结果累加 Rust 按固定 chunk 顺序 在所选数组 backend 上相加
数组位置 复制到 C-contiguous NumPy buffer 后进入 Rust 非 NumPy设备数组保留原对象和设备位置

外部 sliced execution 会先从单片表达式中移除 sliced legs,构造每个输入的索引计划,再按固定顺序取视图和提交表达式。当前实现不会把外部 slices 自动分发到 Rayon,也不会跨 slice 复用数值中间张量。

Cotengra ContractionTree 是另一条路线

arctn_tree 把 ArcTN 的 SSA path 转成 Cotengra ContractionTree,并把 sliced legs 写入该树。ArcTNOptimizer.search() 委托给同一入口,所以 Quimb/Cotengra 可以直接取得带 sliced indices 的树。调用者随后执行该树时,数组分派和切片执行由 Cotengra/autoray 负责。

已经持有 Quimb TensorNetwork 时,可直接把 ArcTNOptimizer 传给 optimize=;需要显式保存、检查或延迟执行树时,再单独调用 arctn_tree

入口 返回值 数值执行
arctn_contract 数值结果,可选报告 调用中由 native 或 opt_einsum backend 执行
arctn_tree / ArcTNOptimizer.search ContractionTree 随后由调用方通过 Quimb/Cotengra 执行

计时口径

使用 arctn_contract 和执行返回的 Cotengra tree 是两种不同执行栈。它们的 setup、调度、同步和计时范围不能混在一个 backend 结论里。

同步、计时与依赖

arctn_contract 报告中,native 和 NumPy 被视为同步执行,execution_wall_s 包含 setup 与 dispatch,不含输入准备;execution_total_host_wall_s 还包含 execution_input_prepare_wall_s。其他外部 backend 可能异步返回;ArcTN 不主动插入设备同步,因此把 execution_wall_s 设为 None,报告的主机时间不能证明设备已完成。未切片 plan.execute(return_info=True) 则返回编译对象的计时字段。

字段 范围
execution_setup_wall_s 表达式编译和切片索引计划构造
execution_dispatch_wall_s 从开始调用 backend 到主机调用返回
execution_wall_s native/NumPy 的 setup 与 dispatch;arctn_contract 中不含输入准备
execution_timing_scope 标记同步主机时间,或外部 backend 完成未验证
python
from arctn import arctn_contract

value, info = arctn_contract(
    inputs, output, size_dict, arrays,
    backend="cupy", return_info=True,
)
# 对异步设备后端,使用对应库的同步或 event timing

可选依赖

外部执行依赖可通过 arctn[execution] 安装。CuPy、PyTorch、JAX 及其 CUDA/runtime 版本由调用者按目标硬件安装;ArcTN 不替这些库选择兼容发行包。