LunaTP: Enabling Efficient and Scalable Tensor Product for Equivariant MLIPs
Analyze & explore related research in Conceptio
Connect this record directly into your research workflow or AI agent. Explore citations across open repositories, query full text, and export structured proof bundles.
LunaTP: Enabling Efficient and Scalable Tensor Product for Equivariant MLIPs Yuanchang Zhou1,2 , Mingzhen Li1,2,∗ , Chen Wang1,2 , Xiangyu Zhang1,2 , Guangming Tan1,2 , Weile Jia1,2,∗ 1 2
Corresponding author
Equivariant machine learning interatomic potentials (MLIPs) promise atomistic simulations with accuracy approaching that of quantum-mechanical calculations. However, the high computational cost of their core Clebsch–Gordan tensor product (CGTP) convolutions severely limits model scalability and efficiency. In this paper, we rethink the parallel execution of CGTP convolutions and introduce LunaTP. Built on node-centric execution, LunaTP exploits path-group parallelism and multi-level reuse to accelerate CGTP convolutions and higher-order derivative computation while preserving the underlying mathematical formulation. On an NVIDIA H100 GPU, LunaTP achieves kernel speedups of up to 250.0× over e3nn and 17.1× over OpenEquivariance. It also delivers end-to-end training throughput gains of up to 28.7× over e3nn and 3.11× over OpenEquivariance. Finally, LunaTP demonstrates scalability and robust performance across models, workload scales, and GPUs, delivering substantial acceleration for training and atomistic simulation with high-accuracy equivariant MLIPs. Email: zhouyuanchang23s@ict.ac.cn, limingzhen@ict.ac.cn, jiaweile@ict.ac.cn Code: https://github.com/HPC-AI-Team/LunaEquivariance
1
Introduction
Scaling equivariant machine learning interatomic potentials (MLIPs) is challenging, since the Clebsch-Gordan tensor products (CGTP) at their heart have computational cost that scales as O(L6max ) in the maximum degree Lmax (Passaro and Zitnick, 2023; Luo et al., 2024). Consequently, modern equivariant MLIPs are often restricted to Lmax to small values (typically no greater than 3), limiting the use of high-degree equivariant features (Batatia et al., 2022; Liao and Smidt, 2023; Park et al., 2024). Ideally, we would like to use higher-degree features to better capture angular resolution and directional information, which are crucial for accurate potential energy surface (PES) modeling (Batzner et al., 2022; Liao et al., 2024; Duval et al., 2024; Xie et al., 2025). In modern equivariant MLIPs (Batzner et al., 2022; Kim et al., 2026; Xu et al., 2026; Kavanagh et al., 2026), CGTP convolutions can account for over 70% of the training time, making them a computational bottleneck for model scaling. A series of pioneering works have explored ways to optimize CGTP. Their approaches fall into two categories (see Figure 1). Algorithm-level methods reformulate the tensor product or reduce its degrees of freedom, resulting in a trade-off between expressivity and efficiency (Unke and Maennel, 2024; Luo et al., 2024; Passaro and Zitnick, 2023; Xie et al., 2025). By contrast, operator-level methods improve the efficiency of CGTP on GPUs without changing its mathematical formulation or sacrificing expressivity through kernel optimizations (NVIDIA, 2024;
Operator-level optimization
(L 3)
Expressivity
arXiv:2610.18393v1 [cs.DC] 13 Oct 2026
∗
State Key Lab of Processors, Institute of Computing Technology, Chinese Academy of Sciences, University of Chinese Academy of Sciences
n
tio
Ours M=4
(L 2)
M=2
el
o
iza
ri
go
Al
lev
thm
m pti
M=1 e3nn eSCN GTP(grid) MTP
(L) 0
5
FlashTP OpenEq cuEq LunaTP
10
15
20
75
80
Latency (ms) Figure 1 Expressivity–efficiency landscape of tensor product
convolutions. Forward latency is measured on an NVIDIA H100 with 768 atoms, Lmax = 6, and 64 channels per degree.
1
Lee et al., 2025; Bharadwaj et al., 2025). Our work follows this direction and introduces LunaTP to further improve the efficiency of CGTP convolutions. However, further accelerating CGTP convolutions while preserving the full CGTP formulation remains challenging. Although kernel fusion and sparse CG computation reduce computational cost and memory traffic (NVIDIA, 2024; Lee et al., 2025; Bharadwaj et al., 2025), edge-parallel execution still suffers from atomic write contention when multiple edges accumulate messages at the same destination node. Node-centric reduction can eliminate this contention, but does not necessarily improve overall performance. Variations in node degree and per-path computational cost complicate load balancing, while increasing data reuse across paths raises on-chip resource requirements and can limit parallelism. Further improving CGTP convolution performance therefore requires jointly optimizing reduction, data reuse, and parallel execution. To bridge this performance gap, we introduce LunaTP, which improves the execution of CGTP convolutions without sacrificing expressivity. Our main contributions are: • We rethink the parallel execution of CGTP convolutions and introduce a node-centric execution scheme that accumulates edge messages on chip, reducing global memory updates. • Building on this execution scheme, we develop path-group parallelism to balance input reuse and register usage, and reduce redundant computation through sparse expansion and multi-level reuse. • We extend this execution scheme to higher-order backward passes, enabling efficient force- and Hessiansupervised training. • We evaluate LunaTP through kernel benchmarks and end-to-end experiments on representative MLIP workloads. On an NVIDIA H100, LunaTP achieves up to a 250.0× kernel speedup and 28.7× higher training throughput than e3nn.
2
Preliminaries
2.1
Clebsch–Gordan Tensor Product
The Clebsch–Gordan tensor product (CGTP) computes each degree-l component in the direct-sum decomposition. Given two irreducible representations (irreps) x(l1 ) ∈ R2l1 +1 and y(l2 ) ∈ R2l2 +1 , the m-th component of the degree-l output is given by: h i(l) x(l1 ) ⊗ y(l2 ) = m
l1 X
l2 X
(l,m)
(l1 ) (l2 ) C(l1 ,m1 )(l2 ,m2 ) xm ym2 , 1
(1)
m1 =−l1 m2 =−l2
(l,m)
where C(l1 ,m1 )(l2 ,m2 ) are the CG coefficients and are nonzero only when |l1 − l2 | ≤ l ≤ |l1 + l2 |, making the coefficient matrices more than 70% sparse (Bharadwaj et al., 2025; Lee et al., 2025). We refer to each coupling from input degrees l1 and l2 to an output degree l as a path, denoted by (l1 , l2 ) → l. Each path can be assigned a separate learnable weight while preserving equivariance. For irreps up to degree L, the full tensor product contains O(L3 ) paths. In a naive implementation, each path requires O(L3 ) multiply–add operations, yielding O(L6 ) total complexity. To understand how per-path CGTPs are combined in equivariant MLIPs, we next describe the tensor product convolution layer.
2.2
Tensor Product Convolution
A tensor product convolution computes one CGTP for every combination of edge, channel, and path (Geiger and Smidt, 2022; Batzner et al., 2022; Batatia et al., 2022; Park et al., 2024). With E edges, C channels, and P paths, the layer performs a total of E × C × P such computations. The resulting edge messages are then aggregated at their destination nodes. Algorithm 1 presents the pseudocode for the tensor product convolution. For each edge ji, the CGTP (l ,c) (l ) couples the source-node irrep xj 1 with the angular edge irrep yji2 . The result is a full degree-l output, 2
Algorithm 1 Standard Clebsch–Gordan Tensor Product Convolution (l ,c)
Input: xj 1
: node irreps
(l )
Input: yji2 : angular edge irreps (l ,l ,l,c)
Input: wji1 2 : path weights generated by the radial MLP Input: edges ji, from source node j to destination node i (l,c)
Output: x′ i
: updated node irreps
1: Initialize x′ i ← 0 for all nodes i 2: for ji in the E edges do e ji ← 0 3: Initialize m 4: for c in the C channels do 5: for (l1 , l2 ) → l in the P paths do (l,c)
e ji m
6:
end for end for
7: 8:
(l,c)
e ji ←m
(l ,l ,l,c)
+ wji1 2
h
▷ Compute edge messages ▷ Process each feature channel ▷ Compute a CGTP for each path (l ,c)
xj 1
(l )
⊗ yji2
i(l)
▷ Aggregate at destination node i
e ji 9: x′ i ← x′ i + m 10: end for
(l ,l ,l,c)
whose m-th component is given by Eq. 1. This output is scaled by the corresponding path weight wji1 2 and accumulated into the edge message (Line 6). The same operation is performed for every channel–path e ji (Lines 2–8). The message is then aggregated at destination combination to construct the edge message m node i (Line 9). In particular, training conservative MLIPs typically requires higher-order derivatives, and we provide the corresponding pseudocode in Appendix F. While the standard implementation is mathematically straightforward, its performance on modern GPUs depends on how the computation is organized, as we discuss next.
3
Rethinking Parallelism for CGTP Convolution (a) Edge-parallel execution worker 1
xj1
𝑗" 𝑗!
𝑖
worker 2
xj2
CGTP
worker 3
xj3
𝑗#
CGTP
𝑗$
𝑁(𝑖) = {𝑗! , 𝑗" , 𝑗# , 𝑗$ }
CGTP
worker 4
xj4
CGTP
(b) Node-centric execu6on Thread block ( node i )
mj1i mj2i
(c) GPU Memory Hierarchy (H100)
for 𝑗 ∈ 𝑁(𝑖)
atomicAdd
𝑥!𝑖
CGTP Register accumulation
mj3i
Block reducIon (if needed)
mj4i 𝑥!𝑖
global store
Register ~4 cycles (64 KiB)
SRAM On-chip
Shared Memory ~31 cycles (228 KiB)
Global Memory ~280 cycles (80 GiB)
HBM Off-chip
Memory Hierarchy with Accumulation Latency & Memory Size
Figure 2 CGTP convolution parallelism and accumulation latencies across the memory hierarchy.
Parallelism across edges is a common execution scheme in CGTP convolutions (Figure 2(a)) (Lee et al., 2025; Bharadwaj et al., 2025). Since CGTP on each edge are independent, this scheme exploits data parallelism by assigning per-edge computations to different workers. However, during message aggregation (Algorithm 1, line 9), many workers attempt to update the same node concurrently, causing atomic contention and hardware-level serialization. Our profiling on an NVIDIA H100 GPU shows that aggregation can account for more than 30% of the total runtime. Thus, although kernel fusion and sparse CG evaluation reduce intermediate memory accesses and tensor product computation, aggregation still incurs substantial overhead. On modern GPUs, the latency of accumulation depends on where the data resides. As Figure 2(c) shows, accumulation in registers and shared memory typically has lower latency than global atomic updates. This raises a natural question: can we use these low-latency on-chip memories to perform neighbor aggregation? 3
(b) Path grouping and mapping
(a) Node-centric execution 𝑙=2
𝒀: 𝑬×𝑳 𝑙=0
𝑙=1
𝑙 ,𝑐
𝑙
𝑥𝑗#
𝑦𝑗𝑖"
On-chip
𝑙
𝑝 ,𝑐
𝑤𝑗𝑖!
𝑮 = {𝒑𝟐 , … , 𝒑𝟏 }
𝑝! : (1,1) → 0
𝑦𝑗𝑖"
𝑾: 𝑬×𝑷×𝑪
𝑙=2
…
𝑝" : (1,1) → 2
𝑝 ,𝑐
𝑙
𝑦𝑗𝑖"
𝑤𝑗𝑖!
𝑝 ,𝑐
𝑤𝑗𝑖"
𝑙 ,𝑐
𝑙 ,𝑐
…
CGTP
Output size 2𝑙𝑝 +1
𝑝4 𝑝3 𝑝2 𝑝1 𝑝0
9
×
𝑞𝑚₁𝑚₂
3 1
First-Fit Decreasing
𝐺1
9 3
1
warp0
warp1
𝐺1
0–31
32–63
𝐺2
0–31
0
⋯
32–63 thread block
1
2
+
+
𝐴𝑚
𝐴 𝑚′ Coefficient reuse
⋯
𝑞𝑚 1 𝑚 2
𝑞𝑚 1′ 𝑚 2′
×𝐂 𝑝𝑚 1 𝑚 2
×𝐂 𝑝𝑚 ′1 𝑚 ′2 +
One task → one warp ⋯
×𝐶𝑚₁𝑚₂𝑚ʹ
Mapping Strategy ⋯
Multiply once 𝑝
𝑝
×𝐶𝑚₁𝑚₂𝑚
7
5
𝑝,𝑐
~ 𝑦 𝑗𝑖,𝑚₂
×𝐂 𝑝𝑚 1 𝑚 2
31
One channel → one thread
𝑞𝑚 1 𝑚 2 + 𝑞𝑚 ′1 𝑚 ′2
+=
Outer Loop
𝑿′: 𝑵×𝑳×𝑪
Product reuse (𝑙 ,𝑐)
1 𝑥 𝑗,𝑚₁
5
Budget size: 𝛽
𝑝 ,𝑐
(c) Product and coefficient reuse
7
CGTP
𝐴𝑖 "
𝑝 ,𝑐 𝐴𝑖 !
𝑝 ,𝑐
𝑤𝑗𝑖"
Grouping Strategy
𝑝𝑙 : (2,2) → 𝑙
𝐺2
𝑥𝑗#
𝑥𝑗#
𝑝 ,𝑐
𝑤𝑗𝑖#
Inner Loop
𝑿: 𝑵×𝑳×𝑪 𝑙=0 𝑙=1
𝐀 𝑝,𝑐 𝑖
Figure 3 Overview of LunaTP. (a) Node-centric execution accumulates edge messages on chip before storing results. (b) Paths are grouped under an output component budget and mapped to warps by channel block. (c) Products are
reused across outputs, and matching coefficients are factored.
Node-centric execution provides a natural way to do so (Figure 2(b)). This scheme aggregates messages for each node on chip and writes the aggregated result to global memory. A straightforward way to implement this is to assign one thread block to each node. However, our experiments show that this direct mapping eliminates per-edge atomic updates but does not improve runtime, as it does not fully exploit intra-node parallelism. Thus, efficient node-centric execution still faces the following primary challenges: (1) Work partitioning limited by on-chip reduction. Node-centric execution requires each thread block to traverse
all edges of a node and aggregate messages on chip. This makes work partitioning difficult, since the workload depends on both node degree and path computation. On the one hand, node degree determines how many edges a block traverses (e.g., degree distributions are often skewed in atomistic datasets (Barros-Luque et al., 2026; Levine et al., 2026; Gharakhanyan et al., 2026)). On the other hand, the amount of CG computation also varies considerably across paths. Thus, blocks computing the same number of output features may still have different workloads.
(2) Fusion scope limited by register capacity. In node-centric execution, we aim to exploit shared inputs across
paths to reduce redundant memory accesses and computation. However, each fused path needs to keep its output accumulators live throughout neighbor reduction, so a larger fusion scope increases register demand and may lower occupancy or cause spilling. Under identical thread configuration and register constraints, fusing all compatible paths runs 35.4% slower than limiting the fusion scope and incurs register spilling.
4
LunaTP
In this section, we introduce LunaTP’s node-centric execution (Section 4.1). Building on this execution scheme, we describe path-group parallelism (Section 4.2), followed by sparse expansion and multilevel reuse (Section 4.3). Finally, we present higher-order differentiation and GPU implementation details (Section 4.4).
4.1
Node-Centric Execution
LunaTP organizes CGTP computation around destination nodes, accumulates edge messages on chip, and stores the results in global memory after the inner loop. Figure 3(a) shows this execution scheme. The outer loop runs in parallel across destination nodes, paths, and channels, while the inner loop traverses the edges of each destination node. To support this traversal, LunaTP stores the adjacency list in CSR format by destination node, with the edges of node i in the range [rowptr[i], rowptr[i + 1]). (l ,c)
In each inner-loop iteration, a thread loads the source-node features xj 1 4
(l )
, edge features yji2 , and path
p,c weight wji for edge ji. It computes CGTP between the source-node features and the weighted edge (l )
p,c p,c eji features y = wji yji2 . The thread computes only component products corresponding to nonzero CG terms, multiplies them by their CG coefficients, and accumulates the results directly in registers. For path p = (l1 , l2 ) → l, the accumulator Api,c is defined as
Ap,c = i
i(l) X h (l ,c) p,c eji xj 1 ⊗ y ,
(2)
j∈N (i) p,c where N (i) denotes the neighbors of node i, wji is the path weight generated by the radial MLP, and the CG tensor product is defined in Eq. 1.
After traversing all edges of the destination node, each thread stores its accumulated result once at the corresponding output location. Computation across channels and paths remains parallel, while global updates decrease from O(E) to O(N ) for each fixed path and channel. However, the accumulators Ap,c need to remain i in registers throughout the inner loop. Computing more paths that share inputs can improve reuse but also increases register demand. Work partitioning therefore needs to account for both input reuse and accumulator storage. The next section describes how path-group parallelism controls group size and organizes parallel computation.
4.2
Path-Group Parallelism
Multiple paths for the same destination node can share source features. Prior work aggregates these paths to reduce repeated loads (Lee et al., 2025). However, the aggregation scope affects both reuse and register usage. Aggregating all paths that share inputs keeps their output accumulators live until the inner loop ends, which may cause register spilling and limit parallelism. Processing each path separately reduces register usage but repeatedly loads the same features, limiting input reuse. LunaTP therefore uses a grouping strategy to balance input reuse and register usage. For a path group G, let lp denote the output degree of path p. The number of output components retained per channel is X RG = (2lp + 1), (3) p∈G
LunaTP uses RG ≤ β as the grouping constraint, where β is the per-channel output component budget (β = 16 in our experiments). We use First-Fit Decreasing (FFD) to group paths in descending order of output size, as shown in Figure 3(b). Since each path group can be computed independently, we use path groups as units of parallel work, which we call path-group parallelism. Specifically, LunaTP partitions work across destination nodes, path groups, and channels. Each task is identified by (i, G, B), where i is the destination node, G is the path group, and B is a contiguous channel block. In the mapping strategy shown in Figure 3(b), one warp processes one task covering 32 consecutive channels, with each thread handling one channel and computing all paths in the group to reuse the loaded source features. Each task traverses all edges of its destination node and completes its accumulation on chip, avoiding an additional reduction to combine partial results from splitting the edge loop. This partitioning provides more parallel tasks, but differences in node degree and per-path cost can still cause workload imbalance within a thread block. When some warps finish early, the block must wait for the remaining warps before releasing all its resources. To reduce this tail effect, LunaTP sorts path groups by their total number of nonzero CG terms in descending order, then sorts nodes within each group by degree in descending order, placing heavier tasks first and helping assign tasks with similar workloads to the same thread block. Task ordering.
4.3
Sparse Expansion and Multi-Level Reuse
LunaTP exploits sparsity and reuse in the CG structure to reduce memory accesses and computation. Path grouping enables input reuse across paths, while product and coefficient reuse further reduce computation within each path. 5
CG coefficients and their component indices are determined by the path and do not depend on the graph or input features. Like OpenEq (Bharadwaj et al., 2025), LunaTP embeds normalized nonzero coefficients and their indices directly in the generated code, avoiding runtime table lookups and checks for zero terms. Sparse expansion.
Beyond CG sparsity, LunaTP uses path grouping to reuse loaded inputs across paths. In each inner-loop iteration, a thread loads each source-feature and edge-feature component needed by the group once and shares it across the paths that use it. (l ,c)
p,c 1 The same input product qm1 m2 = xj,m yeji,m may be used by multiple output components. 1 2 LunaTP therefore organizes CG terms by input component pair, computes each product once, and reuses it p for all terms with Cm ̸= 0, as shown in the upper part of Figure 3(c). Here, m1 and m2 follow the input 1 m2 m component indices in Eq. 1.
Product reuse.
Different input component pairs may have coefficient vectors that are identical up to an overall sign. Let Cpm1 m2 ∈ R2l+1 collect the CG coefficients over all output components. When Cpm′ m′ = 1 2 ±Cpm1 m2 , we combine the products before applying the shared coefficients, Coefficient reuse.
qm1 m2 Cpm1 m2 + qm′1 m′2 Cpm′ m′ = (qm1 m2 ± qm′1 m′2 )Cpm1 m2 . 1
2
(4)
This reduces coefficient multiplications, as shown in the lower part of Figure 3(c). In particular, we identify these matches only within each path at operator construction time.
4.4
Implementation Details
LunaTP extends the node-centric execution scheme and reuse methods above to backward, double-backward, and triple-backward passes by adapting the reduction direction to the differentiation target. Computing the gradient of node features xj requires accumulating results over all edges with source node j, so reduction shifts from destination nodes to source nodes. To support this traversal, LunaTP organizes a CSR by source node while retaining the partitioning across nodes, path groups, and channels and accumulating gradients on chip. Derivatives with respect to the incoming gradient instead reduce at destination nodes, as in the forward pass. Edge-feature and path-weight derivatives are computed per edge, with edge-feature derivatives also requiring a reduction across channels. Double-backward and triple-backward use the same approach, organizing computation around the reduction required by each output. The full pseudocode is provided in Appendix F. Extension to higher-order derivatives.
Higher-order backward passes also allow reuse across derivative branches. In double-backward, for example, computing node-feature and edge-feature derivatives requires the same incoming gradient for a given edge. LunaTP combines branches that share inputs to avoid repeated loads and applies sparse expansion, product reuse, and coefficient reuse within each branch. LunaTP uses __ldg to load read-only features, weights, and adjacency indices, and assigns consecutive channels to threads within each warp to coalesce path-weight loads. We express accumulation as multiply-add operations so the compiler can generate fused multiply-add instructions. In higher-order backward passes, we assign independent derivative branches to different CUDA streams to overlap their execution. Meanwhile, we provide a programming interface for LunaTP to improve ease of use (see Appendix G). Low-level optimization and interface.
5
Experiments
We evaluate LunaTP across four dimensions: computational efficiency, memory efficiency, scalability, and accuracy. Our baselines include e3nn (Geiger and Smidt, 2022), FlashTP (Lee et al., 2025), OpenEquivariance (OpenEq) (Bharadwaj et al., 2025), and cuEquivariance (cuEq) (NVIDIA, 2024). We report kernel microbenchmark results (Section 5.1), end-to-end training and inference performance (Section 5.2), and scalability analysis (Section 5.3). The experimental setup is detailed in Appendix A and ablation studies are described in Appendix C. 6
5.1
Kernel Microbenchmark
The microbenchmarks cover ten irrep configurations with Lmax ranging from 2 to 6. Most are based on configurations used in existing equivariant MLIPs (Batzner et al., 2022; Batatia et al., 2022; Park et al., 2024; Kim et al., 2026; Kavanagh et al., 2026). The hidden, edge, and output irreps and their representative MLIPs are summarized in Appendix Table 1.
Gain over e3nn (×)
FlashTP 256 Runtime 128 64 32 16 8 4 2 1
OpenEq
(a) Forward
cuEq (uniform)
cuEq (naive)
(b) Backward
(c) Double-bwd
58.9×
70.7×
15.0×
51.0× 14.8×
10.2×
LunaTP (ours)
Avg. speedup (d) Triple-bwd
151.8×
103.6× 14.0×
35.3×
9.1×
30.8×
6.0×
7.8×
21.3×
1.2×
1.0×
1.1×
1.1×
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
30 Memory 20 10 1
Case ID
Figure 4 LunaTP performance in kernel microbenchmarks. Solid lines show runtime speedup over e3nn, while hollow
markers show the reduction in peak memory relative to e3nn. Evaluations are performed in FP32 on NVIDIA H100 80GB GPUs. The raw data are provided in Appendix B.1.
Figure 4 summarizes the FP32 microbenchmark results on H100 (FP64 results are provided in Appendix D.1). LunaTP achieves average speedups of 58.9×, 70.7×, 151.8×, and 103.6× over e3nn for forward, backward, double-backward, and triple-backward, respectively. Its corresponding speedups over OpenEq are 3.93×, 5.93×, 4.78×, and 13.31×. Although FlashTP and OpenEq already use kernel fusion to reduce memory traffic, LunaTP further improves performance through node-centric execution, path-group parallelism, and multilevel reuse. The gains are most pronounced for double- and triple-backward, which offer more opportunities to share data and computation across derivative branches. cuEq also performs well with uniform channel counts across degrees, but uses a naive implementation with limited speedups otherwise. Runtime and peak memory.
In addition to runtime improvements, LunaTP uses only 4.0%–16.2% of e3nn’s peak memory. Its memory footprint is comparable to that of FlashTP and OpenEq from forward through double-backward, since all three avoid materializing per-edge message tensors. For triple-backward, LunaTP uses approximately 48% of OpenEq’s peak memory while also achieving lower runtime. Since kernel fusion and parallel reductions can alter floating-point operation order, LunaTP and e3nn may exhibit small numerical discrepancies. Using e3nn’s FP64 results as the reference, we measure the RMSEs of their FP32 outputs and corresponding derivatives. From the forward pass through third-order derivatives, both implementations maintain FP32 RMSEs on the order of 10−7 –10−6 , while LunaTP’s FP64 RMSEs remain between 10−16 and 10−14 (see Appendix E.1). Numerical stability and training convergence.
To assess training stability, we train NequIP-XL (Batzner et al., 2022; Kavanagh et al., 2026) on MPTrj-PFT (Deng et al., 2023; Koker et al., 2026) with the same settings. LunaTP’s validation MAEs for E, F, S, and H differ from those of e3nn by less than 0.3% across all targets, while showing similar convergence trends. (see Appendix E.2). We evaluate LunaTP on NVIDIA A100 and RTX 3090 GPUs to assess its portability across data-center and consumer hardware. These GPUs differ in compute performance and memory bandwidth. LunaTP also has a performance advantage over the baselines on both GPUs. Full results are reported in Appendix D.2. Hardware portability.
7
(b) Matched EFSH
(c) MaxBS EFS
(d) MaxBS EFSH
Speedup over e3nn (×)
19.2 11.6
20
8.3
9.8
5.3
15 4.4
4.9
3.7
15
7.5 5.3
5.1
4.6
10
4.8
6.2
1.0 0.6
0.4
6.0
2.2
10.6 9.9
25 20
2.4 1.9
80
16.5
13.3
30
5.7
5.2
10
5.0
4.5
7.3
8.1 9.0
8.1
25.4
23.0 20.5
9.8 12.3 10.6
100
28.7
25.6
1.0
0.6
9.6
15
5.6
7.3 6.0
8.7
30
11.9
11.1 11.0 9.7
25
9.0 14.9
20
6.7 5.0
0.6
15
0.4
60
9.2
11.2 8.2 10.4 7.2 10.1 6.2 6.5 7.6 5.2
40 5.8
0.6
1.8 10 10 5 2.3 1.8 5.6 5.5 S S S S 5.0 1.0 3.5 1.7 O ev O ev O ev O ev 1.0 1.0 2.3 5.0 Ne mn enN Ne mn enN 5 Ne mn enN 5 Ne mn enN 2.0 0.9 1.1 qu i etqu i etqu i etqu i et0.9 2.5 1.5 Eq Eq 1.9 Ne IX IX I IP P 1.2 uF uF -X -X qu qu 0.5 1.8 BA BA Ne Ne las las L L 0 0 0 0 1.9 IP IP 0.9 1.2 -X -X qu qu 1.0 hV hV M M 0.5 Pr Pr Pr Pr L L IX IX P 2 2 op op op op TP ) TP ) TP ) 0.4 0.6 aT s) q a a a 0.2 0.3 E E T T h h h h s s s n n n n q q q A A q q et et et et u ur nE u ur nE u ur nE uF uF CE CE Lu (our enE L L L T T B B o o o la la ( pe ( pe ( pe -L -L A A A A sh sh TP TP TP TP V2 V2 Op O O O MA CE-L MA CE-L MA M MA M sh sh sh sh CE CE CE CE Eq Eq Eq Eq Fla Fla Fla Fla -L -L -L -L cu cu cu cu
5
3.7
2.1
1.8
3.4
3.8
3.5 0.9
1.1
Percentage (%)
(a) Matched EFS
20
Ne
0
Figure 5 End-to-end training performance. We benchmark EFS (energy, forces, and stress) and EFSH (EFS plus a
Hessian objective). Matched uses equal batch sizes across backends, and MaxBS selects each backend’s maximum batch size. Bars show throughput speedup over e3nn, while bar color indicates the CGTP convolution time fraction. The raw data are provided in Appendix B.2.
5.2
End-to-end Performance
We evaluate LunaTP’s end-to-end performance in training and inference. For training, we measure throughput on eight state-of-the-art (SOTA) equivariant MLIPs with EFS and EFSH objectives. For inference, we measure MD speed and the maximum system size each backend can run. Experimental details are in Appendix A.3. Training. As shown in Figure 5(a) and (b), LunaTP achieves speedups of 2.10–19.24× over e3nn for EFS and 1.81–11.6× for EFSH at matched batch sizes (Matched). The speedup depends on the fraction of training time spent in CGTP convolutions. For example, MACE-L achieves a 2.10× speedup under Matched EFS. With e3nn, CGTP convolutions account for 53.5% of runtime, limiting the overall speedup achievable by optimizing this operator. In contrast, SevenNet-Omni spends a larger fraction of runtime in CGTP convolutions and achieves a 19.2× speedup. Under Matched EFSH, LunaTP achieves speedups of 1.06–1.72× over OpenEq, with further gains also limited by work outside CGTP convolutions.
To evaluate larger workloads, we increase the batch size to the maximum each backend can run on a single GPU (MaxBS). As shown in Figure 5(c) and (d), LunaTP achieves speedups of 2.30–25.6× over e3nn for EFS and 3.50–28.7× for EFSH. The corresponding speedups over OpenEq are 1.14–2.10× and 1.34–3.11×. These gains over OpenEq generally exceed those under Matched, showing that LunaTP provides greater end-to-end benefits on larger workloads. We evaluate inference scalability on TACE-L and NequIP-XL, as shown in Figure 6. LunaTP achieves an 8.70× speedup on TACE-L and a 15.27× speedup on NequIP-XL at e3nn’s maximum system size. Since kernel fusion avoids storing per-edge message tensors, LunaTP increases the maximum atom count by 4.63× and 5.04× for TACE-L and NequIP-XL, respectively. OpenEq and FlashTP also use kernel fusion, so all three backends reach the same maximum system size. At these workloads, LunaTP remains 1.8× faster on TACE-L and 2.1× faster on NequIP-XL than OpenEq. This shows that LunaTP’s optimizations further improve inference performance even with kernel fusion already in place. Inference.
e3nn
cuEq
LunaTP (ours) 1.8×
1.8×
MD speed (ns/day)
0.1 0.01
(a) TACE-L
10
2.1×
2.1×
1 0.1
(b) NequIP-XL 64
Scalability Analysis
OpenEq
1
0.01
5.3
FlashTP
10
128 256 512 1K 2K 4K Number of atoms
8K
16K
We evaluate LunaTP’s forward scalability across four Figure 6 Inference scaling. MD speed on Si with a lattice of 5.43 Å and a 1-fs time step. dimensions: atom count, average in-degree, maximum degree, and channel size. As Figure 7 shows, latency generally increases with workload size, but LunaTP 8
e3nn
FlashTP
Forward latency (ms)
(a) System scale
OpenEq
cuEq (uniform)
LunaTP (ours)
(c) Angular complexity
(b) Graph density
(d) Feature width
100 10 1
2.6×
2.4×
10.3×
5.8×
0.1 64
256
1k
4k
16k
128k 8
Atoms
32
128
512
2k
8k
0
4
8
12
16
Lmax
Avg in-degree
32
128
512
2k
8k
Channel dim
Figure 7 Forward scalability of CGTP convolution.
achieves the lowest latency at nearly all measured points. At the largest comparable point in each sweep, it is 2.4–10.3× faster than the fastest available baseline, with larger advantages in the maximum-degree and channel-size sweeps. As Lmax increases, the number of coupling paths and CG terms grows. LunaTP controls accumulator storage through path grouping and reduces repeated computation through multilevel reuse. As channels become wider, LunaTP partitions the additional computation into more independent channel-block tasks that run across warps without increasing the per-thread accumulator count under the basic mapping. These results demonstrate LunaTP’s scalability to large graphs, higher-degree features, and wider channels. The experimental setup is provided in Appendix A.2.
6
Related Work
SO(2)-based methods align a local coordinate system with each edge direction to reduce SO(3) convolutions to simpler SO(2) operations (Passaro and Zitnick, 2023). Other approaches reformulate feature representations and coupling operations to exploit efficient computational primitives. Fused Tensor Product organizes computations across irreps into matrix multiplications (Unke and Maennel, 2024), while Gaunt Tensor Product uses a Fourier basis and FFTs to accelerate products of spherical functions (Luo et al., 2024). These approaches offer efficient alternatives for high-degree equivariant models, although their parameterizations can involve trade-offs between expressivity and efficiency (Xie et al., 2025). LunaTP instead improves execution efficiency while preserving the original CGTP formulation and expressivity. Algorithm-level optimization.
A complementary direction improves tensor product implementations on GPUs. e3nn provides general-purpose equivariant operators (Geiger and Smidt, 2022), while cuEquivariance offers specialized GPU kernels (NVIDIA, 2024). FlashTP exploits CG sparsity, aggregates paths sharing source features, and fuses convolution operations to reduce repeated loads and intermediate storage (Lee et al., 2025). OpenEq generates sparse kernels just in time for CG contractions and supports fused graph convolutions and higher-order derivatives. Its deterministic implementation accumulates over sorted edges to reduce global writes, then merges node partial sums across warps with a fixup kernel (Bharadwaj et al., 2025). Building on these advances, LunaTP focuses on parallel execution and reuse within node-centric computation. It groups paths under an accumulator budget to expose intra-node parallelism and reuses common products and coefficients to reduce computation. Our experiments demonstrate performance gains over these baselines. Operator-level optimization.
7
Conclusion
In this work, we rethink the parallelism of CGTP convolutions and present LunaTP, a GPU kernel for CGTP convolutions in equivariant MLIPs. By organizing node reduction, data reuse, and work partitioning, LunaTP improves computational efficiency without sacrificing expressivity, and extends to third-order derivatives, making efficient Hessian-based training practical. Experiments show that LunaTP accelerates kernels by up to 250.0× over e3nn and 17.1× over OpenEq, while delivering up to 28.7× the end-to-end training throughput of e3nn. Future work will extend these optimizations to other operators in equivariant MLIPs.
9
AI use statement In this work, we did not use generative AI tools for any tasks requiring disclosure. We used generative AI tools only for language editing to improve the clarity and readability of the manuscript and for literature search, which are tasks with recommended disclosure. We reviewed all AI-assisted edits and independently verified the identified literature and references. We take responsibility for the final content of this work, including all AI-assisted language edits and literature-related content.
Reproducibility statement We describe our methods in Section 4. Appendix A provides the experimental setup, including the hardware and software environments, benchmarking protocols, and model configurations. The raw benchmark data underlying the results reported in the main text are provided in Appendix B. We will make the complete source code publicly available. Our code is available at https://github.com/HPC-AI-Team/LunaEquivariance
Acknowledgments This work is supported by the following funding: National Science Foundation of China (92270206, 62372435, T2125013, 62502501), Beijing Natural Science Foundation (4254087), National Key Research and Development Program of China (2025YFB4507000), and the Innovation Funding of ICT, CAS. Part of the training is performed on the robotic AI-Scientist platform of Chinese Academy of Sciences.
References Luis Barros-Luque, Muhammed Shuaibi, Xiang Fu, Brandon M. Wood, Misko Dzamba, Meng Gao, Ammar Rizvi, Matt Uyttendaele, C. Lawrence Zitnick, and Zachary W. Ulissi. The Open Materials 2024 (OMat24) inorganic materials dataset and models. Nature Computational Science, 6(6):642–652, June 2026. ISSN 2662-8457. doi: 10.1038/s43588-026-00996-w. https://doi.org/10.1038/s43588-026-00996-w. Ilyes Batatia, David Peter Kovacs, Gregor N. C. Simm, Christoph Ortner, and Gabor Csanyi. MACE: Higher order equivariant message passing neural networks for fast and accurate force fields. In Alice H. Oh, Alekh Agarwal, Danielle Belgrave, and Kyunghyun Cho, editors, Advances in Neural Information Processing Systems, 2022. https://openreview.net/forum?id=YPpSngE-ZU. Ilyes Batatia, Philipp Benner, Yuan Chiang, Alin M. Elena, Dávid P. Kovács, Janosh Riebesell, Xavier R. Advincula, Mark Asta, Matthew Avaylon, William J. Baldwin, Fabian Berger, Noam Bernstein, Arghya Bhowmik, Filippo Bigi, Samuel M. Blau, Vlad Cărare, Michele Ceriotti, Sanggyu Chong, James P. Darby, Sandip De, Flaviano Della Pia, Volker L. Deringer, Rokas Elijošius, Zakariya El-Machachi, Edvin Fako, Fabio Falcioni, Andrea C. Ferrari, John L. A. Gardner, Mikołaj J. Gawkowski, Annalena Genreith-Schriever, Janine George, Rhys E. A. Goodall, Jonas Grandel, Clare P. Grey, Petr Grigorev, Shuang Han, Will Handley, Hendrik H. Heenen, Kersti Hermansson, Cheuk Hin Ho, Stephan Hofmann, Christian Holm, Jad Jaafar, Konstantin S. Jakob, Hyunwook Jung, Venkat Kapil, Aaron D. Kaplan, Nima Karimitari, James R. Kermode, Panagiotis Kourtis, Namu Kroupa, Jolla Kullgren, Matthew C. Kuner, Domantas Kuryla, Guoda Liepuoniute, Chen Lin, Johannes T. Margraf, Ioan-Bogdan Magdău, Angelos Michaelides, J. Harry Moore, Aakash A. Naik, Samuel P. Niblett, Sam Walton Norwood, Niamh O’Neill, Christoph Ortner, Kristin A. Persson, Karsten Reuter, Andrew S. Rosen, Louise A. M. Rosset, Lars L. Schaaf, Christoph Schran, Benjamin X. Shi, Eric Sivonxay, Tamás K. Stenczel, Christopher Sutton, Viktor Svahn, Thomas D. Swinburne, Jules Tilly, Cas van der Oord, Santiago Vargas, Eszter Varga-Umbrich, Tejs Vegge, Martin Vondrák, Yangshuai Wang, William C. Witt, Thomas Wolf, Fabian Zills, and Gábor Csányi. A foundation model for atomistic materials chemistry. The Journal of Chemical Physics, 163(18):184110, 11 2025. ISSN 0021-9606. doi: 10.1063/5.0297006. https://doi.org/10.1063/5.0297006. Simon Batzner, Albert Musaelian, Lixin Sun, Mario Geiger, Jonathan P. Mailoa, Mordechai Kornbluth, Nicola Molinari, Tess E. Smidt, and Boris Kozinsky. E(3)-equivariant graph neural networks for data-efficient and accurate interatomic potentials. Nature Communications, 13(1), May 2022. ISSN 2041-1723. doi: 10.1038/s41467-022-29939-5. http://dx.doi.org/10.1038/s41467-022-29939-5. Vivek Bharadwaj, Austin Glover, Aydin Buluc, and James Demmel. An efficient sparse kernel generator for o(3)equivariant deep networks, 2025. https://arxiv.org/abs/2501.13986.
10
Bowen Deng, Peichen Zhong, KyuJung Jun, Janosh Riebesell, Kevin Han, Christopher J. Bartel, and Gerbrand Ceder. CHGNet as a pretrained universal neural network potential for charge-informed atomistic modelling. Nature Machine Intelligence, 5(9):1031–1041, September 2023. ISSN 2522-5839. doi: 10.1038/s42256-023-00716-3. https://doi.org/10.1038/s42256-023-00716-3. Alexandre Duval, Simon V. Mathis, Chaitanya K. Joshi, Victor Schmidt, Santiago Miret, Fragkiskos D. Malliaros, Taco Cohen, Pietro Liò, Yoshua Bengio, and Michael Bronstein. A hitchhiker’s guide to geometric gnns for 3d atomic systems, 2024. https://arxiv.org/abs/2312.07511. Xiang Fu, Brandon M Wood, Luis Barroso-Luque, Daniel S. Levine, Meng Gao, Misko Dzamba, and C. Lawrence Zitnick. Learning smooth and expressive interatomic potentials for physical property prediction. In Forty-second International Conference on Machine Learning, 2025. https://openreview.net/forum?id=R0PBjxIbgm. Johannes Gasteiger, Janek Groß, and Stephan Günnemann. Directional message passing for molecular graphs, 2022. https://arxiv.org/abs/2003.03123. Mario Geiger and Tess Smidt. e3nn: Euclidean neural networks, 2022. https://arxiv.org/abs/2207.09453. Vahe Gharakhanyan, Luis Barroso-Luque, Yi Yang, Muhammed Shuaibi, Kyle Michel, Daniel S. Levine, Misko Dzamba, Xiang Fu, Meng Gao, Xingyu Liu, Haoran Ni, Keian Noori, Brandon M. Wood, Matt Uyttendaele, Arman Boromand, C. Lawrence Zitnick, Noa Marom, Zachary W. Ulissi, and Anuroop Sriram. Open Molecular Crystals 2025 (OMC25) dataset and models. Scientific Data, 13(1):354, February 2026. ISSN 2052-4463. doi: 10.1038/s41597-026-06628-2. https://doi.org/10.1038/s41597-026-06628-2. Seán R. Kavanagh, Chuin Wei Tan, Menghang Wang, Marc L. Descoteaux, Gabriel de Miranda Nascimento, Ulrik Unneberg, Laura Zichi, Francesco Libbi, Norma Rivano, Austin Glover, Vivek Bharadwaj, Anders Johansson, William C. Witt, Albert Musaelian, and Boris Kozinsky. Fast and accurate equivariant foundation models for atomistic simulation, 2026. https://arxiv.org/abs/2607.28461. Jaesun Kim, Jinmu You, Yutack Park, Yunsung Lim, Yujin Kang, Jisu Kim, Haekwan Jeon, Suyeon Ju, Deokgi Hong, Seung Yul Lee, Saerom Choi, Yongdeok Kim, Jae W. Lee, and Seungwu Han. Optimizing cross-domain transfer for universal machine learning interatomic potentials. Nature Communications, 17(1):3432, March 2026. ISSN 2041-1723. doi: 10.1038/s41467-026-70195-8. https://doi.org/10.1038/s41467-026-70195-8. Teddy Koker, Abhijeet Sadashiv Gangan, Mit Kotak, Jaime Marian, and Tess Smidt. PFT: Phonon fine-tuning for machine learned interatomic potentials. In Forty-third International Conference on Machine Learning, 2026. https://openreview.net/forum?id=QC9S8gUOYc. Seung Yul Lee, Hojoon Kim, Yutack Park, Dawoon Jeong, Seungwu Han, Yeonhong Park, and Jae W. Lee. FlashTP: Fused, sparsity-aware tensor product for machine learning interatomic potentials. In Forty-second International Conference on Machine Learning, 2025. https://openreview.net/forum?id=wiQe95BPaB. Daniel S. Levine, Muhammed Shuaibi, Evan Walter Clark Spotte-Smith, Michael G. Taylor, Muhammad R. Hasyim, Kyle Michel, Ilyes Batatia, Gábor Csányi, Misko Dzamba, Peter Eastman, Nathan C. Frey, Xiang Fu, Vahe Gharakhanyan, Aditi S. Krishnapriyan, Joshua A. Rackers, Sanjeev Raja, Ammar Rizvi, Andrew S. Rosen, Zachary Ulissi, Santiago Vargas, C. Lawrence Zitnick, Samuel M. Blau, and Brandon M. Wood. The open molecules 2025 (omol25) dataset, evaluations, and models, 2026. https://arxiv.org/abs/2505.08762. Yi-Lun Liao and Tess Smidt. Equiformer: Equivariant graph attention transformer for 3d atomistic graphs. In The Eleventh International Conference on Learning Representations, 2023. https://openreview.net/forum?id= KwmPfARgOTD. Yi-Lun Liao, Brandon M Wood, Abhishek Das, and Tess Smidt. Equiformerv2: Improved equivariant transformer for scaling to higher-degree representations. In The Twelfth International Conference on Learning Representations, 2024. https://openreview.net/forum?id=mCOBKZmrzD. Yi-Lun Liao, Alexander J. Hoffman, Sabrina C. Shen, Alexandre Duval, Sam Walton Norwood, and Tess Smidt. Equiformerv3: Scaling efficient, expressive, and general se(3)-equivariant graph attention transformers, 2026. https://arxiv.org/abs/2604.09130. Shengjie Luo, Tianlang Chen, and Aditi S. Krishnapriyan. Enabling efficient equivariant operations in the fourier basis via gaunt tensor products. In The Twelfth International Conference on Learning Representations, 2024. https://openreview.net/forum?id=mhyQXJ6JsK. NVIDIA. cuEquivariance. https://github.com/NVIDIA/cuEquivariance, 2024.
11
Yutack Park, Jaesun Kim, Seungwoo Hwang, and Seungwu Han. Scalable parallel algorithm for graph neural network interatomic potentials in molecular dynamics simulations. Journal of Chemical Theory and Computation, 20(11): 4857–4868, May 2024. ISSN 1549-9626. doi: 10.1021/acs.jctc.4c00190. http://dx.doi.org/10.1021/acs.jctc.4c00190. Saro Passaro and C. Lawrence Zitnick. Reducing so(3) convolutions to so(2) for efficient equivariant gnns. ICML’23. JMLR.org, 2023. Jay Shah, Ganesh Bikshandi, Ying Zhang, Vijay Thakkar, Pradeep Ramani, and Tri Dao. Flashattention-3: Fast and accurate attention with asynchrony and low-precision. In The Thirty-eighth Annual Conference on Neural Information Processing Systems, 2024. https://openreview.net/forum?id=tVConYid20. Oliver T. Unke and Hartmut Maennel. E3x: E(3)-equivariant deep learning made easy, 2024. https://arxiv.org/abs/ 2401.07595. Soohaeng Yoo Willow, Tae Hyeon Park, Gi Beom Sim, Sung Wook Moon, Seung Kyu Min, D. ChangMo Yang, Hyun Woo Kim, Juho Lee, and Chang Woo Myung. Bayesian e(3)-equivariant interatomic potential with iterative restratification of many-body message passing, 2026. https://arxiv.org/abs/2510.03046. YuQing Xie, Ameya Daigavane, Mit Kotak, and Tess Smidt. The price of freedom: Exploring expressivity and runtime tradeoffs in equivariant tensor products. In Forty-second International Conference on Machine Learning, 2025. https://openreview.net/forum?id=EvIwwGYTLc. Zemin Xu, Wenbo Xie, and P. Hu. Spectral/spatial tensor atomic cluster expansion with universal embeddings in cartesian space, 2026. https://arxiv.org/abs/2509.14961. Yuanchang Zhou, Siyu Hu, Xiangyu Zhang, Hongyu Wang, Guangming Tan, and Weile Jia. MatRIS: Toward reliable and efficient pretrained machine learning interatomic potentials. In The Fourteenth International Conference on Learning Representations, 2026. https://openreview.net/forum?id=5xBT5Ziute.
12
Appendix A Evaluation setup A.1 Kernel microbenchmark settings A.2 Scalability analysis settings A.3 Training setup details B Detailed Benchmark Data B.1 Raw data for kernel microbenchmarks B.2 Raw data for training benchmarks C Ablation Studies C.1 Path grouping C.2 Task ordering C.3 Compile-time reuse D Additional kernel microbenchmark results D.1 Kernel microbenchmark (FP64) D.2 Kernel microbenchmark (A100 & RTX 3090) E Details on numerical stability and training convergence E.1 Operator-level numerical stability E.2 End-to-end training convergence F Differentiation of CGTP convolution G Programming interface
13
A
Evaluation setup
All evaluations use FP32 with PyTorch 2.11.0+cu128, e3nn v0.6.0 (Geiger and Smidt, 2022), FlashTP v0.1.1 (Lee et al., 2025), OpenEquivariance v0.7.0 (Bharadwaj et al., 2025), and cuEquivariance v0.11.1 (NVIDIA, 2024). Notably, cuEquivariance uses uniform_1d when all segments have the same shape and naive otherwise, which we denote as cuEq(uniform) and cuEq(naive), respectively. Software and hardware.
Unless otherwise specified, all experiments are conducted on NVIDIA H100-80GB SXM GPUs with Intel Xeon Platinum 8468 CPUs. NVLink provides up to 900 GB/s of bidirectional bandwidth per GPU. To construct workloads that reflect realistic atomic data distributions, we randomly shuffle the OMat24 dataset (Barros-Luque et al., 2026) and sample structures to form batches with specified atom counts. For each structure, we construct a neighbor graph under periodic boundary conditions with rcut = 6.0 Å, thereby preserving the neighbor distribution of the original dataset. Workload construction protocol.
For all microbenchmarks, we warm up each configuration for 10 iterations and then measure GPU kernel execution time over the next 20 iterations using the PyTorch profiler. We report the mean runtime, excluding initial JIT compilation, graph construction, and host-to-device data transfers. Measurement protocol.
A.1
Kernel Microbenchmark Settings
All kernel microbenchmarks in Section 5.1 use the same workload unless otherwise specified. The workload contains 768 nodes and 37304 edges, with an average of 48.6 neighbors per atom. To cover different angularmomentum orders and channel sizes, we use irrep configurations from several SOTA equivariant MLIPs, as summarized in Table 1. Table 1 Irrep configurations used in the kernel microbenchmarks. Case ID Lmax Hidden irreps
Edge irreps
Output irreps
Representative MLIP
224x0e+384x1e +352x2e
SevenNet-0 , GNoME
1
2
128x0e+64x1e+32x2e
1x0e+1x1e +1x2e
2
2
128x0e+128x1o+128x2e
1x0e+1x1o +1x2e+1x3o
384x0e+640x1o +640x2e+512x3o
MACE-MP-L
3
3
128x0e+64x1o+32x2e +32x3o
1x0e+1x1o +1x2e+1x3o
256x0e+352x1o +384x2e+320x3o
Nequix-MP/OAM , SevenNet-MF/Omni
4
3
256x0e+256x1o+256x2e +256x3o
1x0e+1x1o +1x2e+1x3o
1024x0e+1536x1o +1792x2e+1536x3o
EquFlash-OMat/OAM
5
4
320x0e+96x1o+64x2e +32x3o+32x4e
1x0e+1x1o+1x2e +1x3o+1x4e
544x0e+736x1o+832x2e +800x3o+704x4e
NequIP-XL series
6
4
128x0e+128x1o+128x2e +128x3o+128x4e
1x0e+1x1o+1x2e +1x3o+1x4e
640x0e+1024x1o+1280x2e +1280x3o+1152x4e
EquFlashV2-OMat/OAM
7
5
128x0e+64x1o+32x2e +32x3o+32x4e+32x5o
1x0e+1x1o+1x2e +1x3o+1x4e+1x5o
320x0e+480x1o+576x2e +608x3o+608x4e+512x5o
–
8∗
5
96x0e+96x1o+96x2e +96x3o+96x4e+96x5o
1x0e+1x1o+1x2e +1x3o+1x4e+1x5o
576x0e+960x1o+1248x2e +1344x3o+1344x4e+1152x5o
–
9
6
128x0e+64x1o+32x2e+32x3o 1x0e+1x1o+1x2e+1x3o 352x0e+544x1o+672x2e+736x3o +32x4e+32x5o+32x6e +1x4e+1x5o+1x6e +768x4e+736x5o+640x6e
–
10∗
6
64x0e+64x1o+64x2e+64x3o +64x4e+64x5o+64x6e
–
1x0e+1x1o+1x2e+1x3o 448x0e+768x1o+1024x2e+1152x3o +1x4e+1x5o+1x6e +1216x4e+1152x5o+1024x6e
“*” e3nn encounters OOM under the default workload; these cases therefore use 448 atoms and 20386 edges. “–” Since no existing MLIP uses the corresponding settings, we constructed these configurations for evaluation.
A.2
Scalability Analysis Settings
We evaluate LunaTP’s FP32 forward scalability along four dimensions: atom count, graph density, maximum degree, and channel size. In each test, we vary one dimension while holding the others fixed, and continue 14
until OOM or compilation timeout. Scaling with atom count. We combine distinct OMat structures and double the atom count starting from 16. We use a 6.0 Å neighbor cutoff, Lmax = 4, and 64 channels per degree. Scaling with graph density. Using a fixed 768-atom batch, we increase the neighbor cutoff from 3.5 Å to 30.5 Å while keeping Lmax = 4 and 64 channels per degree.
For this test and the channel-size test, we use the same fixed 768-atom graph. We hold the channel count at 64 per degree and increase Lmax from 0 in steps of one. Scaling with degree.
We fix the 768-atom graph and Lmax = 4, and increase the number of channels per degree from 32 by successive doubling. Scaling with channel size.
A.3
Training Setup Details
We benchmark training in FP32 on NVIDIA H100 GPUs, using OMat-1M (Barros-Luque et al., 2026) for EFS and MPTrj-PFT (Deng et al., 2023; Koker et al., 2026) for EFSH. All models are trained using their official PyTorch implementations (Batatia et al., 2025; Kim et al., 2026; Koker et al., 2026; Xu et al., 2026; Kavanagh et al., 2026; Willow et al., 2026). For EFSH, we follow the training protocol of Koker et al. (2026) and sample Hessian columns during training. Tables 2 and 3 summarize per-GPU batch sizes and the model configurations, respectively. Table 2 Training batch sizes (atoms per GPU). Matched uses the same batch size across all backends, while MaxBS
uses the maximum batch size supported by each backend. Atoms
SevenNet-Omni
MACE-L
NequIP-XL
EFS EFSH
2340 870
2450 800
1630 600
e3nn FlashTP OpenEq cuEq LunaTP
2340 14600 14600 14600 14600
2450 3850 3850 3850 3850
e3nn FlashTP OpenEq cuEq LunaTP
870 – 3830 3830 5130
800 – 2600 3140 6200
EquFlashV2
TACE-L
NequIX
Prophet
BAM
290 90
1030 300
8900 3200
430 120
1280 580
1630 9550 9550 3300 9550
MaxBS: EFS 290 2550 2550 2550 2550
1030 3940 3940 2340 3940
8900 30400 37600 14500 37600
430 2220 2220 510 2220
1280 3440 3440 1600 3440
600 – 2750 – 3730
MaxBS: EFSH 90 – 660 660 860
300 – 1380 1340 1650
3200 – 9870 3060 13200
120 – 600 120 680
580 – 1700 580 1700
Matched
15
Table 3 MLIP configurations for training. (a) MACE-L (10.10M) Hyper-parameter
Value
Layers Cutoff radius
2 5.0 Å
Stage
(b) NequIP-XL (32.14M) Hyper-parameter
Irreps
Edge Input / Output(L2)
128x0e / 128x0e
Hidden (L1)
128x0e +128x1o +128x2e
Hyper-parameter
Value
5 6.0 Å
Stage
Irreps
Edge Input / Output(L6)
Input / Output (L5)
Hidden (L1–4)
Irreps
Hidden (L1–9)
128x0e / 128x0e 128x0e+128x1o +128x2e+128x3o +128x4e
(f) Prophet (62.30M)
Value
Hyper-parameter
4 6.0 Å
Layers Cutoff radii Irreps
Value
10 3.0, 7.0 Å
Stage
Irreps
Edge
1x0e+1x1o +1x2e+1x3o
Edge
64x0e / 64x0e
Input / Output (L4)
89x0e / 128x0e
Input / Output(L10) 256x0e / 256x0e
64x0e+64x1o +64x2e+64x3o +64x4e+64x5o
Hidden (L1–3)
128x0e+64x1o +32x2e +32x3o
Hidden (L1–9)
(g) SevenNet-Omni (25.76M) Hyper-parameter
Layers Cutoff radius Stage
Hyper-parameter
5 6.0 Å
Layers Cutoff radius Irreps
1x0e+1x1e+1x2e+1x3e
Input / Output (L5)
128x0e / 128x0e
Hidden (L1, L4)
128x0e+64x1o+32x2e+32x3o
Hidden (L2)
128x0e+64x1o+64x1e +32x2+32x2e+32x3o+32x3e
1x0e+1x1o+1x2e +1x3o+1x4e
256x0e+96x1o +64x2e+32x3o +32x4e
(h) BAM (40.15M)
Value
Edge
Hidden (L3)
Input / Output(L10)
(e) NequIX (0.71M)
Stage
10 6.0 Å
1x0e+1x1o+1x2e +1x3o+1x4e
Edge
320x0e+96x1o +64x2e+32x3o +32x4e
Hyper-parameter
Value
Stage
32x0e / 320x0e
Hidden (L1–5)
Irreps
Edge
Layers Cutoff radius
1x0e+1x1o+1x2e +1x3o+1x4e
Layers Cutoff radius
1x0e+1x1o+1x2e +1x3o+1x4e+1x5o
Hyper-parameter
6 6.0 Å
Stage
(d) TACE-L (82.90M)
Layers Cutoff radius
Value
Layers Cutoff radius
1x0e+1x1o +1x2e+1x3o
(c) EquFlashV2 (44.89M)
Value
5 5.0 Å
Stage
128x0e+128x0e+64x1o+64x1e +32x2o+32x2e+32x3o+32x3e
16
Irreps
Edge
1x0e+1x1o +1x2e+1x3o
Input
128x0e
Hidden (L1–5)
64x0o+64x0e +64x1o+64x1e +64x2o+64x2e +64x3o+64x3e
B
Detailed Benchmark Data
B.1
Raw Data for Kernel Microbenchmarks
We evaluate LunaTP using the experimental setup described in Section A. Table 4 reports the raw results of our kernel microbenchmarks. Table 4 Kernel measurements from forward through third-order differentiation. Parentheses report runtime speedup
and peak-memory reduction relative to e3nn. Forward
Case ID e3nn
FlashTP
Backward
OpenEq
cuEq
LunaTP (ours)
e3nn
FlashTP
OpenEq
cuEq
LunaTP (ours)
Runtime (ms) C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
3.56 (1.00x) 0.563 (6.32x) 0.248 (14.4x) 4.40 (0.809x) 0.0763 (46.7x) 9.85 (1.00x) 1.59 (6.19x) 0.681 (14.5x) 1.12 (8.81x) 0.163 (60.6x) 5.77 (1.00x) 0.947 (6.09x) 0.439 (13.1x) 6.80 (0.849x) 0.127 (45.4x) 28.3 (1.00x) 4.70 (6.03x) 1.99 (14.3x) 2.16 (13.1x) 0.449 (63.2x) 19.8 (1.00x) 3.10 (6.39x) 1.36 (14.6x) 14.7 (1.35x) 0.344 (57.6x) 39.5 (1.00x) 6.13 (6.45x) 2.46 (16.1x) 2.93 (13.5x) 0.586 (67.4x) 26.0 (1.00x) 4.33 (6.00x) 1.54 (16.9x) 17.0 (1.53x) 0.435 (59.7x) 34.7 (1.00x) 5.90 (5.88x) 2.23 (15.5x) 3.84 (9.05x) 0.544 (63.8x) 46.8 (1.00x) 8.67 (5.40x) 2.85 (16.4x) 27.3 (1.71x) 0.755 (62.0x) 44.5 (1.00x) 8.42 (5.29x) 3.05 (14.6x) 6.97 (6.39x) 0.713 (62.4x)
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
1.50 (1.00x) 0.157 (9.60x) 0.156 (9.62x) 1.51 (0.997x) 4.19 (1.00x) 0.359 (11.7x) 0.359 (11.7x) 0.391 (10.7x) 2.50 (1.00x) 0.218 (11.5x) 0.218 (11.5x) 2.47 (1.01x) 12.0 (1.00x) 0.972 (12.3x) 0.972 (12.3x) 1.06 (11.3x) 8.15 (1.00x) 0.607 (13.4x) 0.606 (13.5x) 8.00 (1.02x) 14.3 (1.00x) 0.907 (15.8x) 0.907 (15.8x) 1.01 (14.2x) 9.09 (1.00x) 0.535 (17.0x) 0.535 (17.0x) 8.86 (1.03x) 12.8 (1.00x) 0.628 (20.4x) 0.628 (20.5x) 0.713 (18.0x) 16.7 (1.00x) 0.781 (21.4x) 0.781 (21.4x) 15.1 (1.11x) 16.4 (1.00x) 0.658 (25.0x) 0.658 (25.0x) 0.758 (21.7x)
9.21 (1.00x) 1.29 (7.16x) 0.331 (27.8x) 9.59 (0.960x) 0.214 (43.1x) 24.0 (1.00x) 3.28 (7.32x) 1.21 (19.8x) 0.514 (46.7x) 0.366 (65.6x) 16.3 (1.00x) 1.95 (8.35x) 0.610 (26.8x) 17.3 (0.944x) 0.320 (50.9x) 76.9 (1.00x) 9.59 (8.03x) 9.40 (8.18x) 1.56 (49.3x) 1.02 (75.8x) 67.3 (1.00x) 7.08 (9.51x) 6.40 (10.5x) 64.6 (1.04x) 1.05 (63.8x) 130 (1.00x) 13.4 (9.74x) 13.0 (10.0x) 2.02 (64.5x) 1.53 (85.0x) 101 (1.00x) 9.76 (10.4x) 9.53 (10.6x) 92.2 (1.10x) 1.38 (73.3x) 133 (1.00x) 13.1 (10.2x) 11.8 (11.3x) 2.37 (56.1x) 1.54 (86.2x) 212 (1.00x) 21.3 (9.99x) 18.6 (11.4x) 181 (1.17x) 2.79 (76.3x) 199 (1.00x) 20.2 (9.87x) 17.0 (11.7x) 5.14 (38.8x) 2.28 (87.4x)
Peak memory (GB) 0.157 (9.59x) 0.360 (11.7x) 0.218 (11.5x) 0.972 (12.3x) 0.611 (13.4x) 0.907 (15.8x) 0.539 (16.9x) 0.629 (20.4x) 0.787 (21.3x) 0.659 (25.0x)
2.41 (1.00x) 0.331 (7.27x) 0.312 (7.72x) 1.52 (1.59x) 0.313 (7.70x) 7.38 (1.00x) 0.775 (9.53x) 0.718 (10.3x) 0.749 (9.85x) 0.718 (10.3x) 3.76 (1.00x) 0.471 (7.99x) 0.435 (8.65x) 2.31 (1.63x) 0.436 (8.64x) 20.2 (1.00x) 2.10 (9.63x) 1.94 (10.4x) 2.03 (9.93x) 1.94 (10.4x) 13.2 (1.00x) 1.33 (9.87x) 1.21 (10.9x) 7.00 (1.88x) 1.22 (10.8x) 28.0 (1.00x) 1.98 (14.2x) 1.81 (15.5x) 1.91 (14.6x) 1.81 (15.4x) 16.4 (1.00x) 1.18 (13.8x) 1.07 (15.3x) 7.18 (2.28x) 1.07 (15.3x) 22.5 (1.00x) 1.39 (16.2x) 1.26 (17.9x) 1.34 (16.8x) 1.26 (17.9x) 28.5 (1.00x) 1.64 (17.4x) 1.56 (18.3x) 11.9 (2.40x) 1.57 (18.2x) 27.4 (1.00x) 1.37 (20.0x) 1.32 (20.8x) 1.42 (19.4x) 1.32 (20.8x)
Double-bwd
Case ID e3nn
FlashTP
OpenEq
Triple-bwd
cuEq
LunaTP (ours)
e3nn
FlashTP
OpenEq
cuEq
LunaTP (ours)
47.2 (1.00x) 132 (1.00x) 89.5 (1.00x) 429 (1.00x) 401 (1.00x) 758 (1.00x) 629 (1.00x) 813 (1.00x) 1630 (1.00x) 1420 (1.00x)
– – – – – – – – – –
6.38 (7.41x) 19.9 (6.64x) 12.0 (7.48x) 82.1 (5.22x) 53.5 (7.49x) 109 (6.93x) 73.8 (8.53x) 104 (7.85x) 148 (11.0x) 145 (9.80x)
45.5 (1.04x) 4.77 (27.7x) 86.7 (1.03x) 23.7 (18.1x) 362 (1.11x) 112 (6.77x) 555 (1.13x) 243 (3.35x) 1230 (1.33x) OOM
0.683 (69.2x) 1.74 (75.9x) 1.17 (76.2x) 5.14 (83.3x) 3.98 (101x) 6.39 (119x) 5.13 (123x) 7.10 (114x) 11.4 (143x) 10.7 (132x)
– – – – – – – – – –
1.98 (3.20x) 4.52 (4.20x) 2.74 (3.63x) 12.2 (4.48x) 7.58 (4.60x) 11.3 (6.68x) 6.64 (6.87x) 7.77 (8.23x) 9.39 (8.50x) 7.97 (9.93x)
5.27 (1.20x) 2.16 (8.79x) 8.24 (1.21x) 5.87 (9.34x) 25.0 (1.39x) 5.47 (13.8x) 29.0 (1.57x) 3.79 (16.9x) 48.3 (1.65x) OOM
0.947 (6.69x) 2.18 (8.71x) 1.33 (7.49x) 5.93 (9.24x) 3.72 (9.38x) 5.56 (13.6x) 3.28 (13.9x) 3.84 (16.7x) 4.67 (17.1x) 3.97 (20.0x)
Runtime (ms) C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
25.7 (1.00x) 1.95 (13.2x) 74.4 (1.00x) 4.71 (15.8x) 52.8 (1.00x) 2.78 (19.0x) 251 (1.00x) 14.1 (17.8x) 262 (1.00x) 10.9 (24.1x) 467 (1.00x) 21.0 (22.2x) 427 (1.00x) 15.9 (26.8x) 537 (1.00x) 21.5 (25.0x) 1010 (1.00x) 39.8 (25.4x) 895 (1.00x) 38.4 (23.3x)
1.12 (23.0x) 3.61 (20.6x) 2.23 (23.7x) 12.1 (20.8x) 7.77 (33.7x) 16.5 (28.4x) 10.6 (40.3x) 16.3 (33.0x) 22.2 (45.5x) 22.6 (39.5x)
25.3 (1.02x) 1.43 (52.1x) 52.0 (1.01x) 5.11 (49.2x) 245 (1.07x) 12.9 (36.3x) 392 (1.09x) 22.9 (23.5x) 926 (1.09x) 57.5 (15.6x)
0.403 (63.9x) 0.802 (92.8x) 0.651 (81.2x) 2.36 (106x) 1.96 (134x) 2.83 (165x) 2.20 (194x) 2.84 (189x) 4.04 (250x) 3.70 (242x)
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
3.80 (1.00x) 0.614 (6.19x) 0.604 (6.29x) 3.92 (0.969x) 0.614 (6.18x) 10.2 (1.00x) 1.41 (7.25x) 1.38 (7.41x) 1.44 (7.10x) 1.39 (7.35x) 5.71 (1.00x) 0.855 (6.68x) 0.836 (6.84x) 6.35 (0.900x) 0.855 (6.68x) 30.7 (1.00x) 3.81 (8.07x) 3.73 (8.24x) 3.90 (7.88x) 3.75 (8.20x) 20.7 (1.00x) 2.37 (8.75x) 2.31 (8.99x) 20.2 (1.03x) 2.38 (8.72x) 47.1 (1.00x) 3.52 (13.4x) 3.44 (13.7x) 3.64 (13.0x) 3.52 (13.4x) 28.9 (1.00x) 2.07 (14.0x) 2.01 (14.3x) 22.8 (1.27x) 2.08 (13.9x) 41.1 (1.00x) 2.41 (17.1x) 2.35 (17.5x) 2.52 (16.3x) 2.42 (17.0x) 52.5 (1.00x) 2.99 (17.5x) 2.91 (18.0x) 38.9 (1.35x) 3.02 (17.4x) 52.3 (1.00x) 2.50 (20.9x) 2.44 (21.4x) 2.64 (19.8x) 2.51 (20.8x)
Peak memory (GB)
“–” denotes an unsupported setting.
17
6.33 (1.00x) 19.0 (1.00x) 9.94 (1.00x) 54.8 (1.00x) 34.9 (1.00x) 75.6 (1.00x) 45.6 (1.00x) 63.9 (1.00x) 79.8 (1.00x) 79.2 (1.00x)
B.2
Raw Data for Training Benchmarks
Tables 5 and 6 report throughput and the CGTP convolution time fraction for all eight models under EFS and EFSH training. Table 5 EFS training performance. Each entry reports throughput in “atoms/s”, with the CGTP convolution time
fraction in parentheses. Setting
Throughput (CGTP time fraction)
Model e3nn
FlashTP
OpenEq
cuEq
LunaTP (ours)
Matched
SevenNet-Omni MACE-L NequIP-XL NequIX EquFlashV2 TACE-L Prophet BAM
936.6 (95.9%) 4023.5 (53.5%) 625.8 (93.8%) 4929.0 (92.8%) 144.0 (78.4%) 477.8 (79.0%) 160.2 (84.3%) 531.4 (82.3%)
8470.3 (51.2%) 7084.6 (10.7%) 4696.5 (57.5%) 26052.0 (46.1%) 547.1 (26.1%) 1625.5 (28.6%) 724.5 (31.5%) 2654.6 (16.3%)
9160.7 (47.5%) 7435.6 (7.9%) 5225.1 (48.9%) 40017.6 (41.0%) 538.0 (19.8%) 1748.3 (23.3%) 782.7 (24.8%) 2538.7 (15.7%)
358.7 (76.5%) 774.6 (59.7%) 370.7 (70.3%) 4989.0 (88.9%) 504.6 (9.5%) 245.5 (69.5%) 149.2 (50.3%) 601.7 (80.0%)
18024.6 (21.3%) 8455.9 (1.4%) 7703.4 (20.2%) 52397.8 (20.9%) 659.7 (6.0%) 2099.9 (4.6%) 824.7 (11.0%) 2824.5 (3.1%)
MaxBS
SevenNet-Omni MACE-L NequIP-XL NequIX EquFlashV2 TACE-L Prophet BAM
936.6 (95.1%) 4023.5 (53.5%) 625.8 (93.8%) 4929.0 (92.8%) 144.0 (78.4%) 477.8 (79.0%) 160.2 (84.3%) 531.4 (82.3%)
11136.3 (71.6%) 7521.5 (11.3%) 5648.9 (69.1%) 24715.1 (43.4%) 1390.4 (65.6%) 2614.6 (46.6%) 1076.0 (43.9%) 2659.0 (15.7%)
12469.2 (61.6%) 7759.8 (8.6%) 6961.3 (64.0%) 42825.2 (44.1%) 1577.2 (60.5%) 2858.3 (40.5%) 1174.9 (38.6%) 2640.0 (15.9%)
361.1 (82.8%) 1019.9 (78.0%) 368.8 (71.1%) 5046.9 (66.8%) 2147.8 (38.1%) 242.6 (69.5%) 169.0 (53.0%) 618.5 (80.0%)
23933.1 (26.1%) 9289.7 (1.5%) 12844.3 (26.2%) 52424.9 (20.9%) 3311.9 (19.5%) 4563.7 (9.1%) 1583.3 (14.2%) 2998.9 (3.2%)
Table 6 EFSH training performance. Each entry reports throughput in “atoms/s”, with the tensor product convolution
time fraction in parentheses. Setting
Throughput (CGTP time fraction)
Model e3nn
FlashTP
OpenEq
cuEq
LunaTP (ours)
Matched
SevenNet-Omni MACE-L NequIP-XL NequIX EquFlashV2 TACE-L Prophet BAM
277.5 (93.4%) 1204.6 (56.1%) 182.5 (92.0%) 1465.7 (89.9%) 47.0 (55.4%) 122.6 (47.0%) 34.0 (53.9%) 182.9 (83.7%)
– – – – – – – –
2036.4 (52.4%) 2371.2 (13.5%) 1100.4 (52.9%) 8352.2 (56.3%) 85.6 (11.2%) 202.5 (12.5%) 76.0 (6.3%) 949.9 (26.7%)
156.1 (71.7%) 486.3 (48.7%) – 1506.9 (91.8%) 72.5 (11.6%) 116.3 (52.2%) 29.8 (64.7%) 179.7 (86.1%)
3232.3 (18.0%) 2775.5 (2.3%) 1480.7 (22.6%) 14369.5 (25.0%) 91.4 (9.2%) 221.5 (3.5%) 80.7 (4.2%) 1138.2 (6.2%)
MaxBS
SevenNet-Omni MACE-L NequIP-XL NequIX EquFlashV2 TACE-L Prophet BAM
277.5 (93.4%) 1204.6 (56.1%) 182.5 (92.0%) 1465.7 (89.9%) 42.7 (55.4%) 122.6 (46.8%) 39.1 (89.3%) 182.9 (83.7%)
– – – – – – – –
2562.0 (72.2%) 2979.7 (9.5%) 1490.5 (78.0%) 9082.6 (60.0%) 307.1 (64.3%) 635.7 (50.6%) 256.0 (43.3%) 1029.6 (30.1%)
166.9 (77.8%) 755.92 (87.7%) – 1401.0 (92.9%) 247.5 (64.1%) 150.3 (69.3%) 36.0 (64.4%) 179.7 (86.1%)
7956.0 (30.2%) 4248.1 (2.7%) 4627.4 (33.4%) 16450.9 (27.0%) 704.6 (17.6%) 1233.1 (9.8%) 408.5 (15.8%) 1386.7 (5.4%)
“–” denotes an unsupported setting.
18
C
Ablation Studies
We evaluate the effects of path fusion scope, cross-path input reuse, task ordering, and compile-time reuse on LunaTP’s forward performance. All experiments use the C5 configuration in Table 1 with FP32 precision. This configuration includes channel counts of 320, 96, 64, and 32.
C.1
Path Grouping
Path grouping needs to balance input reuse and accumulator storage. We first vary the per-channel output component budget β to examine the effect of fusion scope (Table 7). Among the tested settings, the default budget β = 16 gives the lowest latency. Fusing all compatible paths increases latency by 56.3%, while reducing the budget to 8 and 4 increases latency by 11.6% and 20.8%, respectively. Smaller groups require more repeated edge traversals, while full fusion keeps more accumulators live at once and is the only tested setting with reported register spilling. Since the default policy automatically adjusts the number of warps as the grouping changes, we also compare the fusion scopes with fixed warp counts. With 8 and 16 warps, full fusion is still 44.3% (0.5001 vs. 0.3467 ms) and 53.0% (0.5423 vs. 0.3545 ms) slower, respectively. In both cases, the reported spill stores are 2976 B for full fusion and zero for the default budget. Table 7 Output component budget with automatic warp selection (C5, FP32, forward). Latency is the median of two
independent measurements. Spill stores are kernel-reported statistics, not total runtime traffic.
Configuration All compatible paths Default (β = 16) β=8 β=4
Path groups
Execution units
Registers
Spill stores (B)
Latency (ms)
5 17 29 37
17 45 73 96
64 64 56 56
2976 0 0 0
0.5393 0.3449 0.3851 0.4167
Performance also depends on which paths can share inputs within a group. Compared with the baseline that groups paths by edge irrep, broader cross-path input reuse reduces the number of path groups from 25 to 17 and lowers latency by about 6.6% (Table 8). This change both expands input reuse and reduces the number of tasks, so the measured gain reflects the overall effect of the grouping change. With this grouping, enabling the work partitioning option shown in the table leaves latency nearly unchanged, with no additional benefit observed on C5. Table 8 Cross-path input reuse and work partitioning (C5, FP32, forward). All configurations use node-centric
execution.
Configuration
Path groups
Execution units
Latency (ms)
25 17 17
85 45 45
0.3688 0.3446 0.3447
Baseline (grouped by edge irrep) + Cross-path input reuse + Work partitioning (full)
C.2
Task Ordering
We next vary the task order while keeping the fusion scope and number of warps fixed. We independently reverse the ordering by nonzero CG-term count and by node degree, while keeping the task set unchanged (Table 9). Compared with descending order on both axes, changing only the node order to ascending increases latency by 13.0%. Changing only the CG-term count order to ascending increases latency by 5.8%, while changing both increases it by 17.1%. Sorting both in descending order, as used in the main text, gives the lowest latency among these settings.
19
Table 9 Task ordering with a fixed fusion scope and warp count (C5, FP32, forward). Each ordering axis is reversed
independently; the task set, instruction set, and output are unchanged.
C.3
CG-term count order
Node degree order
Latency (ms)
vs. both descending
Descending Descending Ascending Ascending
Descending Ascending Descending Ascending
0.3446 0.3895 0.3645 0.4036
— +13.0% +5.8% +17.1%
Compile-Time Reuse
Finally, we compare all four combinations of product reuse and coefficient reuse with a fixed fusion scope and number of warps (Table 10). Enabling both gives the lowest latency of 0.3449 ms. Disabling coefficient reuse increases latency by 3.7%, while disabling both increases it by 3.4%. These two switches are not fully independent. The code generation path for coefficient reuse retains shared products, so disabling the product reuse switch does not necessarily remove product sharing from these computations. When coefficient reuse is disabled, disabling product reuse also does not increase latency. Table 10 Compile-time reuse switches with fixed fusion scope and warp count (C5, FP32, forward). Coefficient reuse
retains shared products even when the product-reuse switch is disabled.
Product reuse
Coefficient reuse
Enabled Enabled Disabled Disabled
Enabled Disabled Enabled Disabled
Latency (ms)
vs. both enabled
0.3449 0.3578 0.3526 0.3565
— +3.7% +2.2% +3.4%
D
Additional Kernel Microbenchmark Results
D.1
Kernel microbenchmark (FP64)
We evaluate FP64 performance using the same irrep configurations as in the FP32 benchmarks. Since FP64 requires more computation and memory, we reduce the atom count by half to 384 for most cases and further reduce it to 192 for C8 and C10. All runtime speedups and peak-memory reduction factors are relative to FP64 e3nn on the same hardware. Figure 8 summarizes the results. LunaTP achieves arithmetic-mean FlashTP
OpenEq
Gain over e3nn (×)
(a) Forward 128 Runtime 64 32 16 8 4 2 1
cuEq (uniform)
cuEq (naive)
(b) Backward
LunaTP (ours)
(c) Double-bwd
Avg. speedup (d) Triple-bwd
133.7×
81.9×
9.1×
8.5×
36.5× 19.9× 19.5×
1.0×
1.0×
1.0×
1.0×
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
30 Memory 20 10 1
45.6×
58.4× 34.2×
10.4× 6.9× 6.1×
15.7×
8.6×
Case ID
Figure 8 LunaTP performance in kernel microbenchmarks (FP64, NVIDIA H100-80GB).
20
speedups of 45.6×, 58.4×, 133.7×, and 81.9× over FP64 e3nn for forward, backward, double backward, and triple backward, respectively. The corresponding speedups over OpenEq are 4.42×, 4.40×, 3.56×, and 9.61×.
D.2
Kernel microbenchmark (A100 & RTX 3090)
We evaluate LunaTP on NVIDIA A100-80GB and RTX 3090-24GB GPUs using FP32 microbenchmarks. On A100, we use the same workloads as in the main evaluation. To fit within the RTX 3090’s memory capacity, we use 192 atoms by default and reduce C8 and C10 to 122 and 97 atoms, respectively. For each case, we keep the workload fixed across all backends and all four stages. On A100, LunaTP achieves average speedups of 49.7×, 62.4×, 122.7×, and 90.5× over e3nn for forward, backward, double backward, and triple backward, respectively. On RTX 3090, the corresponding speedups are 75.3×, 83.5×, 203.5×, and 151.2×. Figures 9 and 10 show the full results.
Gain over e3nn (×)
FlashTP 256 Runtime 128 64 32 16 8 4 2 1
OpenEq
(a) Forward
cuEq (uniform)
cuEq (naive)
(b) Backward
LunaTP (ours)
(c) Double-bwd
Avg. speedup (d) Triple-bwd 90.5×
49.7×
62.4×
17.0×
44.7× 15.2×
122.7×
6.6×
1 2 3 4 5 6 7 8 9 10
8.3×
8.0×
19.1×
1.0×
1.0×
1.1×
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1.2×
30 Memory 20 10 1
11.9×
35.3× 32.2×
13.7×
Case ID
Figure 9 LunaTP performance in kernel microbenchmarks (NVIDIA A100-80GB PCIe).
FlashTP 512
OpenEq
(a) Forward
cuEq (uniform)
cuEq (naive)
(b) Backward
(c) Double-bwd
Avg. speedup (d) Triple-bwd
Runtime
203.5×
128
Gain over e3nn (×)
LunaTP (ours)
151.2×
75.3×
32
23.3×
24.8×
8
83.7× 83.5× 29.0×
7.9× 6.8×
2
59.8× 59.8× 22.5×
9.9×
14.1×
0.6×
0.9×
0.9×
0.9×
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
0.5 30 Memory 20 10 1
Case ID
Figure 10 LunaTP performance in kernel microbenchmarks (RTX 3090-24GB).
LunaTP delivers performance gains on both data-center and consumer GPUs, although the speedups vary across hardware. Across all four stages, its average speedups over e3nn are highest on RTX 3090, followed by H100 and A100. This ordering matches that of the GPUs’ peak FP32 compute-to-memory-bandwidth ratios. Since e3nn’s tensor-product computations are primarily limited by memory bandwidth (Lee et al., 2025), LunaTP’s reductions in intermediate memory traffic through kernel fusion and data reuse yield larger gains on GPUs with greater compute capacity relative to memory bandwidth.
21
E
Details on Numerical Stability and Training Convergence
E.1
Operator-Level Numerical Stability
Following the numerical validation protocol of Shah et al. (2024), we use the e3nn FP64 as the reference. We run e3nn in FP32 and LunaTP in both FP32 and FP64 on the same inputs, and report RMSE for the forward and each derivative stage. The inputs are constructed as described in Appendix A. Table 11 reports the full results, averaged across all cases in Table 1. Table 11 Numerical error comparison between e3nn and LunaTP.
E.2
Stage
Output
e3nn (FP32)
LunaTP (FP32)
LunaTP (FP64)
Forward
x′
9.910429e-07
9.978108e-07
9.517594e-16
Backward
x̄ ȳ w̄
3.582043e-06 3.516555e-06 1.696597e-07
6.545904e-06 2.934879e-06 1.712254e-07
6.437515e-15 8.966707e-15 4.281635e-16
Double bwd
hx hy hw hg
5.083432e-06 5.002968e-06 2.546925e-07 1.769849e-06
7.955895e-06 4.300956e-06 2.582805e-07 2.792170e-06
1.274438e-14 5.290353e-15 6.404447e-16 7.214677e-15
Triple bwd
tx ty tw tg tvx tvy tvw
5.818900e-06 6.808703e-06 3.152390e-07 2.530354e-06 5.368344e-06 5.896732e-06 2.677879e-07
6.511971e-06 6.200321e-06 2.198522e-07 3.285050e-06 5.646177e-06 5.317266e-06 2.514537e-07
9.811956e-15 9.310777e-15 6.591994e-16 5.920629e-15 8.875174e-15 9.918370e-15 6.436796e-16
End-to-End Training Convergence
We evaluate end-to-end training convergence by training NequIP-XL on MPTrj-PFT with either e3nn or LunaTP as the CGTP backend. Both runs use FP32 precision with the same model initialization, data, and training settings. The loss weights for energy, forces, stress, and Hessian are set to 20, 20, 100, and 100, respectively. We train for 50 epochs with a cosine learning-rate schedule, starting at 5 × 10−4 and ending at 1 × 10−6 . Figure 11 shows the training and validation MAE curves for both backends. e3nn train
e3nn validation
LunaTP train
(b) Force (meV/Å)
(a) Energy (meV/atom)
LunaTP validation 3
(d) Hessian (eV/Å2)
(c) Stress (eV/Å ) 10−1
Validation MAE
10
3
3.067 × 10
1
Validation MAE
103
MAE
Validation MAE
2.644 × 10−3
7.042 × 101
2.651 × 10−3
7.030 × 10
3.069 × 101
Validation MAE
1
2.297 × 10−2 2.302 × 10−2
10−1
10−2 102
102
101
10−3 0K
20 K
40 K
60 K
80 K
0K
20 K
40 K
60 K
80 K
0K
20 K
40 K
60 K
Step
Figure 11 Loss convergence on MPTrj-PFT dataset.
22
80 K
0K
20 K
40 K
60 K
80 K
F
Differentiation of CGTP convolution
In this section, we derive the first-, second-, and third-order derivatives of tensor product convolution. The resulting formulas evaluate the gradients needed at each order without forming full Jacobian, Hessian, or thirdorder derivative tensors, and provide the basis for our derivative kernels. Throughout, we present the derivatives (l ,c) (l ) componentwise, following Eq. 1. For each channel–path combination, xj 1 ∈ R2l1 +1 , yji2 ∈ R2l2 +1 , and (l ,l ,l,c)
wji1 2
∈ R. (l,c)
(l,c)
(l,c)
For the convolution output x′ i , let gi = ∂L/∂x′ i denote its gradient. Applying the chain rule to the weighted CGTP gives the first-order derivatives in Algorithm 2. The first-order derivative.
Algorithm 2 First-Order Derivative of Clebsch–Gordan Tensor Product Convolution (l ,c)
Input: xj 1
: node irreps
(l ) Input: yji2 : angular edge irreps (l ,l ,l,c) Input: wji1 2 : path weights (l,c) Input: gi : gradients with respect to the convolution output
Input: edges ji, from source node j to destination node i Output: x̄, ȳ, and w̄
1: Initialize all three outputs to zero 2: for ji in the E edges do 3: for c in the C channels do 4: for (l1 , l2 ) → l in the P paths do 5:
6:
(l1 ,c) (l ,l ,l,c) x̄j,m += wji1 2 1
(l )
(l ,l ,l,c)
2 += wji1 2 ȳji,m 2
l X
l2 X
m=−l m2 =−l2 l1 l X X
(l,m)
(l )
(l,m)
(l ,c) (l,c)
1 gi,m C(l1 ,m1 )(l2 ,m2 ) xj,m 1
m=−l m1 =−l1
7:
(l ,l ,l,c)
w̄ji1 2
8: end for 9: end for 10: end for
+=
l X m=−l
(l,c)
2 C(l1 ,m1 )(l2 ,m2 ) yji,m g 2 i,m
i(l) h (l,c) (l ,c) (l ) gi,m xj 1 ⊗ yji2 m
23
The second-order derivative. Let vx , vy , and vw denote the gradients with respect to x̄, ȳ, and w̄, respectively. Applying the product rule to the first-order formulas gives the second-order derivatives in Algorithm 3.
Algorithm 3 Second-Order Derivative of Clebsch–Gordan Tensor Product Convolution (l ,c)
Input: xj 1
: node irreps
(l ) Input: yji2 : angular edge irreps (l ,l ,l,c) Input: wji1 2 : path weights (l,c) Input: gi : gradients with respect to the convolution output (l1 ,c) (l2 ) (l1 ,l2 ,l,c) Input: vx,j , vy,ji , and vw,ji : gradients with respect to the first-order outputs
Input: edges ji, from source node j to destination node i Output: hx , hy , hw , and hg
1: Initialize all four outputs to zero 2: for ji in the E edges do 3: for c in the C channels do 4: for (l1 , l2 ) → l in the P paths do 5:
l2 X
(l ,c)
l X
(l )
m=−l m2 =−l2 l1 l X X
1 += hx,j,m 1
(l,m) (l,c) (l2 ) (l1 ,l2 ,l,c) (l2 ) (l1 ,l2 ,l,c) C(l1 ,m1 )(l2 ,m2 ) gi,m vy,ji,m w v + y ji ji,m2 w,ji 2 (l ,l ,l,c) (l1 ,c) (l1 ,l2 ,l,c) (l,m) (l,c) (l1 ,c) vw,ji wji1 2 + xj,m C(l1 ,m1 )(l2 ,m2 ) gi,m vx,j,m 1 1
6:
2 += hy,ji,m 2
7:
m=−l m1 =−l1 ! l h i(l) h i(l) X (l1 ,l2 ,l,c) (l,c) (l1 ,c) (l2 ) (l1 ,c) (l2 ) hw,ji += gi,m vx,j ⊗ yji + xj ⊗ vy,ji m m m=−l ! (l,c)
(l ,l ,l,c)
hg,i += wji1 2
h
(l ,c)
(l )
vx,j1
⊗ yji2
h
⊗ yji2
i(l)
h i(l) (l ,c) (l2 ) + xj 1 ⊗ vy,ji
8: (l ,l ,l,c)
1 2 + vw,ji
(l ,c)
xj 1
(l )
i(l)
9: end for 10: end for 11: end for
Let qx , qy , qw , and qg denote the gradients with respect to hx , hy , hw , and hg , respectively. Differentiating the second-order formulas gives the third-order derivatives in Algorithm 4. The third-order derivative.
24
Algorithm 4 Third-Order Derivative of Clebsch–Gordan Tensor Product Convolution (l ,c)
Input: xj 1
: node irreps
(l )
Input: yji2 : angular edge irreps (l ,l ,l,c)
Input: wji1 2
: path weights
(l,c) Input: gi : gradients with respect to the convolution output (l1 ,c) (l2 ) (l1 ,l2 ,l,c) Input: vx,j , vy,ji , and vw,ji : gradients with respect to the first-order outputs (l1 ,c) (l2 ) (l1 ,l2 ,l,c) (l,c) Input: qx,j , qy,ji , qw,ji , and qg,i : gradients with respect to the second-order outputs
Input: edges ji, from source node j to destination node i Output: tx , ty , tw , tg , tvx , tvy , and tvw
1: Initialize all seven outputs to zero 2: for ji in the E edges do 3: for c in the C channels do 4: for (l1 , l2 ) → l in the P paths do l2 X
l X
(l ,c)
1 tx,j,m += 1
5:
h (l,m) (l,c) (l2 ) (l1 ,l2 ,l,c) (l2 ) (l1 ,l2 ,l,c) C(l1 ,m1 )(l2 ,m2 ) gi,m qy,ji,m v + v q y,ji,m2 w,ji 2 w,ji
m=−l m2 =−l2
i (l,c) (l2 ) (l ,l ,l,c) (l2 ) (l ,l ,l,c) + qg,i,m vy,ji,m wji1 2 + yji,m v 1 2 2 2 w,ji l1 l h X X (l1 ,c) (l1 ,l2 ,l,c) (l,m) (l,c) (l1 ,c) (l1 ,l2 ,l,c) (l2 ) q v + v C g q += ty,ji,m x,j,m1 w,ji x,j,m1 w,ji (l1 ,m1 )(l2 ,m2 ) i,m 2 6:
m=−l m1 =−l1
i (l,c) (l1 ,c) (l1 ,l2 ,l,c) (l1 ,c) (l1 ,l2 ,l,c) + qg,i,m vx,j,m w + x v ji j,m1 w,ji 1 ! l h i(l) h i(l) X (l1 ,l2 ,l,c) (l,c) (l1 ,c) (l2 ) (l1 ,c) (l2 ) tw,ji += gi,m qx,j ⊗ vy,ji + vx,j ⊗ qy,ji m
m=−l
7:
h i(l) (l ,c) (l2 ) + xj 1 ⊗ vy,ji m m ! h i(l) h i(l) (l ,c) (l2 ) (l ,c) (l2 ) qx,j1 ⊗ vy,ji + vx,j1 ⊗ qy,ji
(l,c) + qg,i,m (l,c)
(l ,l ,l,c)
tg,i += wji1 2 8:
m
h
(l ,c) (l ) vx,j1 ⊗ yji2
i(l)
h i(l) h i(l) (l ,c) (l ) (l ,c) (l2 ) qx,j1 ⊗ yji2 + xj 1 ⊗ qy,ji
!
(l1 ,l2 ,l,c) + vw,ji
i(l) i(l) h h (l ,c) (l2 ) (l ,c) (l ) + xj 1 ⊗ vy,ji vx,j1 ⊗ yji2
!
(l1 ,l2 ,l,c) + qw,ji
(l ,c)
tvx1,j,m1 += 9:
l2 X
l X
!!
h (l,m) (l,c) (l ,l ,l,c) (l2 ) (l2 ) (l1 ,l2 ,l,c) C(l1 ,m1 )(l2 ,m2 ) gi,m wji1 2 qy,ji,m2 + yji,m q 2 w,ji
m=−l m2 =−l2 (l,c)
(l ,l ,l,c) (l2 ) yji,m2
+ qg,i,m wji1 2 (l )
tvy2,ji,m2 += 10:
l1 X
l X
i
h (l ,l ,l,c) (l1 ,c) (l1 ,c) (l1 ,l2 ,l,c) (l,m) (l,c) C(l1 ,m1 )(l2 ,m2 ) gi,m wji1 2 qx,j,m1 + xj,m q 1 w,ji
m=−l m1 =−l1
i (l,c) (l ,l ,l,c) (l1 ,c) + qg,i,m wji1 2 xj,m1 ! l i(l) h i(l) h X (l1 ,l2 ,l,c) (l,c) (l1 ,c) (l2 ) (l1 ,c) (l2 ) qx,j ⊗ yji + xj ⊗ qy,ji tvw ,ji += gi,m 11:
m
m=−l
h i(l) (l,c) (l ,c) (l ) + qg,i,m xj 1 ⊗ yji2 m
end for end for 14: end for 12: 13:
25
!
m
G
Programming Interface
LunaTP replaces the gather–TP–reduce sequence with a single convolution call, using the same e3nn irreps, instructions, and per-edge weights. It also supports precision selection and optional envelope smoothing of the messages (Gasteiger et al., 2022; Fu et al., 2025; Zhou et al., 2026; Liao et al., 2026). The code below illustrates the change in usage. e3nn
from e3nn import o3 # 1.Initialize e3nn_tp = o3.TensorProduct( irreps_in, irreps_edge, irreps_out, instructions, internal_weights=False, shared_weights=False, ) # 2.Forward x_edge = node.index_select(0, src) # Gather messages = e3nn_tp(x_edge, edge_attr, weight) # Tensor product if use_envelope: messages = messages * envelope # Apply envelope out = node.new_zeros((node.shape[0], e3nn_tp.irreps_out.dim)) out.index_add_(0, dst, messages) # Reduce
LunaTP
import LunaTP # 1.Initialize from an e3nn TP or custom instructions. lunatp_conv = LunaTP.initialize(e3nn_tp) # 2.Forward out = lunatp_conv( node, edge_attr, weight, env=envelope, # Default: ’none’ (no envelope) dtype=’fp32’ )
Beyond the convolution formulation considered in this work, LunaTP supports a broader range of tensor products and their convolutional forms, including those using the uuu, uvu and uvw connection modes in e3nn.
26
Related documents
- LunaTP: Enabling Efficient and Scalable Tensor Product for Equivariant MLIPs#1343904
- AutoPot: Automated and massively parallelized construction of Machine-Learning Potentials#821418
- A Systematic Survey and Benchmark of Deep Learning for Molecular Property Prediction in the Foundation Model Era.#239714
- A unified multi-scale deep learning framework for molecular property prediction that bridges molecular structures and fingerprinting.#295301
- Lindblad Multiproduct Formulas#971979
Retrieved via Conceptio: every document is proof-bundled with source, license, and retrieval metadata.
Read the Docs → · View CLI source on GitHub · Conceptio Open Knowledge Archive