簡體   English   中英

矩陣乘法java 1.8

[英]Matrix multiplication java 1.8

您認為在Java 1.8中使用新的Stream接口實現稀疏矩陣運算是否可行? 如果是,我們如何實現矩陣和操作。 顯然,我正在尋找能夠最終使用“自動”並行化。

它可以清楚地完成。 對於簡單的SPMV(稀疏矩陣向量乘法),下面的內容怎么樣,稀疏矩陣以坐標COO格式表示(最簡單的稀疏格式):

class COO {
    int x, y, value;
}

public static ArrayList<Integer> spmv(List<COO> values, ArrayList<Integer> v) {
    final ArrayList<Integer> result = new ArrayList<>(Collections.nCopies(v.size(), 0));
    values.stream().forEach(
            coo -> result.set(coo.x, result.get(coo.x) + coo.value * v.get(coo.y))
    );
    return result;
}

但我真誠地建議你使用預先編碼的東西,如果你不想在接下來的3年里花一些時間來理解稀疏矩陣運算的性能影響。 這是一個相當大的研究/優化主題,有許多因素需要考慮(僅僅是我的頭腦):

  1. 調度/重新排序矩陣值以提高緩存性能
  2. 針對特定問題使用最佳存儲格式(例如,請參閱netlib上的此調查)

與手工制作的實現相比,有許多實現可以實現性能的數量級改進。 僅舉幾例,請查看:

  1. 英特爾MKL稀疏BLAS

  2. Nvidia的cuBLAS

如果它們不存在,我會寫那些綁定到那些,雖然類似la4j看起來很有希望。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM