---
title: "Fixed 与 Dynamic"
description: "两种公开切片模式都从普通未切片 Auto winner 出发，但是否允许改变路径不同。"
eyebrow: "切片与执行"
---

## 公开值只有 fixed 和 dynamic {#public-values}

| 模式 | 是否默认 | 是否需要 target\_size | 路径是否允许改变 |
| --- | --- | --- | --- |
| fixed | 是 | 执行切片时需要；没有目标时不做额外工作 | 否 |
| dynamic | 否 | 必须同时提供 | 是，但不保证一定改变 |

> [!WARNING]
> **只有两种公开模式**
>
> 公开切片模式严格只有 `fixed` 与 `dynamic`。这里的 slicing mode 与 Auto pathfinding 是两个不同概念。

## 两种模式的共同起点 {#shared-start}

给出 `target_size` 后，Auto 先完成普通未切片路径规划。切片模式只决定随后怎样处理这条路径；它不会把 `target_size` 解释成另一种路径搜索预设。

```diagram
slicing-modes
Fixed 与 Dynamic 都从同一类未切片 winner 出发；差异只在切片阶段是否允许局部改变路径。
```

顶层最终 path、slice 字段以及 `slicing_report.final_ssa_path` 描述切片后交付的结果；比较 fixed 与 dynamic 时，应使用这些最终字段。

## 模式语义 {#mode-semantics}

| 步骤 | fixed | dynamic |
| --- | --- | --- |
| 输入 | 普通未切片 winner | 同一类普通未切片 winner |
| 切片腿 | find\_slices\_to\_size 固定路径选择 | 每轮根据当前路径重新选择 |
| 路径改进 | 不运行 | slice-and-reconfigure |
| 调整范围 | 无额外路径重构 | 有限的局部路径调整；具体配置可随版本变化 |
| 最终路径 | 与输入 SSA path 相同 | 可能不同，也可能恰好相同 |

```python
from arctn import arctn_schedule

fixed = arctn_schedule(
    inputs, output, size_dict,
    preset="heavy", target_size=2**24,
    slicing_mode="fixed", seed=0,
)
dynamic = arctn_schedule(
    inputs, output, size_dict,
    preset="heavy", target_size=2**24,
    slicing_mode="dynamic", seed=0,
)
```

## 不可达目标与时间边界 {#hard-constraint}

两种模式都会在最终 path/sliced legs 配对上重新检查整数 `target_size`。没有合法方案时，Rust 返回 `Err`，Python 高层抛出 `ValueError`；不会返回一条未切片、违反上限的路径。

`max_time` 是普通路径搜索阶段的协作式停止条件，不是可抢占的进程级硬超时。用户已经请求 `target_size` 时，最终交付的 path 与 sliced legs 仍必须通过整数约束复核；不能因为时间条件触发，就把违反目标的方案作为成功结果返回。

> [!WARNING]
> **协作式时间上限**
>
> 严格的端到端墙钟上限由进程级 watchdog、MPI launcher 或作业调度系统实施，并覆盖寻路、切片、序列化和数值执行；`max_time=10` 仅表示普通路径搜索阶段的协作式时间条件。
