Есть ли у Юлии точечный продукт в BLAS? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь ускорить точечный продукт в Джулии.Но я не могу найти функцию BLAS для точечного продукта.

Мое текущее решение:

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

Мне было интересно, есть ли у нас более простая функция для точечного продукта в BLAS в Юлии.Как BLAS.dot(X,Y).

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Существует функция точка :

Для любых итерируемых контейнеров x и y (включая массивы любого измерения) чисел (или любого типа элемента длякакая точка определена), вычислите скалярное произведение (или внутреннее произведение, или скалярное произведение), то есть сумму dot(x[i],y[i]), как если бы они были векторами.

x ⋅ y (где можно набрать завершением табуляции \cdot в REPL) является синонимом 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)
0 голосов
/ 28 декабря 2018

LinearAlgebra.BLAS.dotu - это точечный продукт BLAS1, но он не будет быстрее, чем встроенный Julia.Общие функции Julia для подпрограмм BLAS1 и BLAS2 в значительной степени соответствуют производительности OpenBLAS.Процедуры BLAS3 (умножение матриц) более глубоки и быстрее в OpenBLAS.

...