朱莉娅在BLAS中有点积吗?

时间:2018-12-27 23:49:31

标签: julia blas

我正在尝试加快Julia中的点积运算。但是我找不到点积的BLAS功能。

我当前的解决方案是:

X = rand(5,1);
Y = rand(5,1);
res = BLAS.gemm('T','N', X, Y);
res[1]

我想知道我们是否对Julia的BLAS中的点乘积具有更简单的功能。像BLAS.dot(X,Y)

2 个答案:

答案 0 :(得分:6)

LinearAlgebra.BLAS.dotu是BLAS1点产品,但不会比内置的Julia更快。 BLAS1和BLAS2例程的Julia通用函数在性能上几乎与OpenBLAS相当。在OpenBLAS中,BLAS3例程(矩阵乘法)更加深入,并且速度更快。

答案 1 :(得分:2)

dot功能:

  

对于任何可迭代容器xy(包括任何可重复使用的数组   维(数字)(或定义了点的任何元素类型),   计算点积(或内积或标量积),即   dot(x[i],y[i])的总和,就好像它们是矢量一样。

     

x ⋅ y(其中可以在REPL中通过制表符填充来键入\cdot)是   dot(x, y)的同义词。

它似乎比gemm BLAS调用快:

using LinearAlgebra
using BenchmarkTools
n = 10000
x = rand(n, 1);
y = rand(n, 1);
@btime(BLAS.gemm('T','N', x, y))
  19.212 μs (1 allocation: 96 bytes)
@btime(x ⋅ y)
  1.536 μs (1 allocation: 16 bytes)

versioninfo()
Julia Version 1.0.3
Commit 099e826241* (2018-12-18 01:34 UTC)
Platform Info:
  OS: Linux (x86_64-suse-linux)
  CPU: Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.0 (ORCJIT, haswell)