_axpy的是實現以下高效實現間接DAXPY操作
for i = 1:n
a[i] = a[i]-$\alpha$ b[i]
一個BLAS水平一個操作有可通過各種BLAS庫如MKL高效執行這種定期DAXPY的。
在我的情況下,我想實現以下使用間接尋址的daxpy操作的變體。
for i = 1:n
a[ind1[i]] = a[ind1[i]]-$\alpha$ b[i]
其中ind1包含需要更新的向量A的元素的索引。我得到的信息是ind1是一個單調的數組,即$ ind1 [i]> ind [j] \ forall i> j $。
我假設這樣的計算經常出現在稀疏線性代數中。有沒有人知道基於SSE/AVX的這種例程的有效實現。
如果'ind1'數組包含連續運行,您可能可以做些事情來加速操作。如果'ind1'基本上是任意的,那麼幾乎沒有什麼可以優化它(除了可能用於預取)。 SSE/AVX根本沒有辦法進行必要的收集/分散操作。 –
它確實包含連續運行,但可能是10-30的小長度。我的猜測是prefetching可能會工作,但我已經被警告過,手動預取可能會造成更多的傷害,而不是任何優勢 – zimbra314