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!
我尝试使用 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!