BLAS中的TDOT子程序是什么?

What is TDOT subroutine in BLAS?

我尝试使用 opt-einsum 为 Fortran 实现生成收缩路径,我遇到了一个表达式 TDOT https://optimized-einsum.readthedocs.io/en/stable/greedy_path.html?highlight=tdot

scaling BLAS current remaining

4 TDOT tfp,fr->tpr tpr->tpr

我在 http://www.netlib.org/lapack/explore-html/index.html 或其他 BLAS 网页上搜索了几次后找不到它:(

BLAS 中有什么?

这是正确的,TDOT 不是 BLAS 的一部分。如果我们查看这个特定的表达式,我们会发现在 BLAS 调用发生之前需要组织数据,因为“zip”索引 f 不在每个张量的左侧或右侧。

TDOT            tfp,fr->tpr
---
tmp_tpf = tfp -> tpf # Reogrganize data
tmp_tpf,fr -> tpr    # Standard BLAS call with `f` as the zip index

有一些库(例如 TBLIS)扩展了 BLAS 功能,并允许在块从 RAM 移动到缓存时转置数据以实现非连续表达式,以获得极高的性能。 TDOT 在 opt_einsum 文档中明确说明,因为它通常 不是 一件好事,因为收缩前的内存复制;内存复制通常是瓶颈!

快速说明我是 opt_einsum 的作者,如果你有机会,我会喜欢 PR!