在 C++ 中使用 BLAS 对来自不同数组的值进行点积
Dot product of values from different arrays using BLAS in C++
我正在寻找快速进行点积的方法,BLAS 可以作为一种选择。但是有什么方法可以快速对来自不同数组的值进行点积吗?
例如,假设有4个不同的一维数组,a, b, c, d
a = {1, 2, 3, 4}
b = {5, 6, 7, 8}
c = {9, 10, 11, 12}
d = {13, 14, 15, 16}
还有另一个数组
k = {1, 2, 3, 4}
我想做的是计算
ans1 = a[0]*k[0] + b[0]*k[1] + c[0]*k[2] + d[0]*k[3];
ans2 = a[1]*k[0] + b[1]*k[1] + c[1]*k[2] + d[1]*k[3];
等等...
多次执行相同的计算,但由于每次迭代都可以更改所有数组中的值。
我试图在 BLAS 中使用 ddot 并以某种方式使用指针但未能做到。
有没有办法在不分配另一个数组并将值复制到它的情况下使用 ddot,例如
e[0]=a[0]; e[1]=b[0]; e[2]=c[0]; e[3]=d[0];
然后,
ans = ddot(4, e, 1, k, 1);
也很难将其作为二维矩阵,因为每个一维向量(数组)位于不同的类。
请给我一个建议,让我更有效地做到这一点。
提前致谢。
如果将列向量 a
、b
、c
和 d
存储在形式为
的二维矩阵 M 中
M = (a b c d)
你可以将问题转化为
ans = M k
其中 ans = (ans1 ans2 ans3 ans4)
。这是一个单一的矩阵向量乘法,BLAS 的 dgemv
例程适用。
我正在寻找快速进行点积的方法,BLAS 可以作为一种选择。但是有什么方法可以快速对来自不同数组的值进行点积吗?
例如,假设有4个不同的一维数组,a, b, c, d
a = {1, 2, 3, 4}
b = {5, 6, 7, 8}
c = {9, 10, 11, 12}
d = {13, 14, 15, 16}
还有另一个数组
k = {1, 2, 3, 4}
我想做的是计算
ans1 = a[0]*k[0] + b[0]*k[1] + c[0]*k[2] + d[0]*k[3];
ans2 = a[1]*k[0] + b[1]*k[1] + c[1]*k[2] + d[1]*k[3];
等等...
多次执行相同的计算,但由于每次迭代都可以更改所有数组中的值。 我试图在 BLAS 中使用 ddot 并以某种方式使用指针但未能做到。 有没有办法在不分配另一个数组并将值复制到它的情况下使用 ddot,例如
e[0]=a[0]; e[1]=b[0]; e[2]=c[0]; e[3]=d[0];
然后,
ans = ddot(4, e, 1, k, 1);
也很难将其作为二维矩阵,因为每个一维向量(数组)位于不同的类。 请给我一个建议,让我更有效地做到这一点。
提前致谢。
如果将列向量 a
、b
、c
和 d
存储在形式为
M = (a b c d)
你可以将问题转化为
ans = M k
其中 ans = (ans1 ans2 ans3 ans4)
。这是一个单一的矩阵向量乘法,BLAS 的 dgemv
例程适用。