向量乘BLAS'catlas_saxpby不能正常工作
我想要有两个任意长度的向量(典型长度将是2048)并且乘以元素。所以对于所有n,Z [n] = X [n] * Y [n]。向量乘BLAS'catlas_saxpby不能正常工作
我所建立的测试代码是相当简单:
float inputX[4] = { 2, 4, 8, 16 };
float inputY[4] = { 2, 4, 8, 16 };
catlas_saxpby(4, 1, inputX, 1, 1, inputY, 1);
结果进入inputY,其结果是
4.000000, 8.000000, 16.000000, 32.000000
其中,如果他们被乘以它应该是4,16 ,64,256。但它看起来像添加。
所以这不是我所期望的,文档没有给我足够的信息来确定它在做什么。
任何想法?
Apple's documentation for BLAS says this:
Computes the product of two vectors, scaling each one separately (single-precision).
void catlas_saxpby (
const int N,
const float alpha,
const float *X,
const int incX,
const float beta,
float *Y,
const int incY
);
Parameters
N
Number of elements in the vector.
alpha
Scaling factor for X.
X
Input vector X.
incX
Stride within X. For example, if incX is 7, every 7th element is used.
beta
Scaling factor for Y.
Y
Input vector Y.
incY
Stride within Y. For example, if incY is 7, every 7th element is used.
Discussion
On return, the contents of vector Y are replaced with the result.
Apple文档有误。 saxpby
函数计算标量为alpha
和beta
的表达式alpha*X + beta*Y
和矢量X
和Y
。
我不认为有一个函数可用于计算两个向量的元素明智的乘积,因为这不是线性代数中的常见操作。您可以采用外部产品的对角线,但由于它计算整个外部产品(而不是N),所以这是一种严重的工作量浪费。
As Adam Rosenfield表示,文档不正确。请提交一个错误。
除此之外,他的答案还有一些更正。首先,saxpby
计算alpha * X + beta * Y
。其次,对你更有用:在BLAS中没有你想做的功能,但在vDSP中也有这样的功能,它也是Accelerate.framework的一部分:vDSP_vmul。
成功使用一些霓虹内在函数后,我想我现在必须使用vmul:P。谢谢你给我看。它当然更便携。 –
我想我会卡住使用霓虹灯内部函数或for循环。我可能会尝试两种方法,看看更快。 –