块矩阵和 DSYRK

计算科学 线性代数 矩阵 布拉斯 密集矩阵
2021-12-10 19:48:07

我想计算矩阵

A=i=1NviviT
其中每个vi是一个给定的长度向量2500, 以便A2500×2500, 和我的N大约是200万。与其调用 DSYR 200 万次,我发现我可以通过存储vi在块矩阵中,然后在块矩阵已满时调用 DSYRK。我定义一个block_size×2500矩阵Wk作为:
Wk=(v1TvbT)
以便
A=k=1nblocksWkTWk
我设置行的原因Wk等于向量vi而不是列是因为我使用 C,这样行的 incX 将为 1,我认为这有助于加快 BLAS 操作。

我发现这个过程仍然比我想要的慢,我的问题是如何选择block_size(即行数Wk) 以获得最佳性能?

目前,我正在选择block_size=50000,我只选择了这样的总大小Wk存储矩阵为 1GB (50000×2500×8=1GB)。有没有更好的选择block_size(的行数Wk) 以获得最佳性能?

万一这很重要,我将在具有 24 个内核的机器上使用 ATLAS CBLAS 库。

0个回答
没有发现任何回复~