Slide 29
Slide 29 text
https://bit.ly/2Mn7uNd
− 2
2 = 2
2 − 2⊤ + 2
2をBLASで計算
q_norms = norms(Q) # 1 2
2, 2 2
2, … , 2
2
x_norms = norms(X) # 1 2
2, 2 2
2, … , 2
2
ip = sgemm_(Q, X, …) #
parfor (m = 0; m < M; ++m):
for (n = 0; n < N; ++n):
dist = q_norms[m] + x_norms[n] – ip[m][n]
本の次元クエリベクトルをまとめて行列に = 1
, 2
, … ,
∈ ℝ×
本の次元データベースベクトルをまとめて行列に = 1
, 2
, … ,
∈ ℝ×
先ほどのようにSIMDで高速化された関数
舐めて足し合わせるだけ
➢ BLASの行列積計算
➢ ボトルネックがここになる
➢ , が大きいと、相対的に恩恵が大きい
➢ バックエンドがIntel MKLかOpenBLASかで
30%性能が違うらしい(MKLのほうが良い)
29