ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

矩阵乘法java 1.8

2019-07-03 11:51:22  阅读:149  来源: 互联网

标签:java java-stream matrix-multiplication


您认为在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年里花一些时间来理解稀疏矩阵运算的性能影响.
这是一个相当大的研究/优化主题,有许多因素需要考虑(仅仅是我的头脑):

>调度/重新排序矩阵值以提高缓存性能
>针对特定问题使用最佳存储格式(例如,请参阅netlib的此调查)

与手工制作的实现相比,有许多实现可以实现性能的数量级改进.仅举几例,请查看:

> Intel MKL Sparse BLAS
> Nvidia’s cuBLAS

如果它们不存在,我会写那些绑定到那些,虽然像la4j这样的东西看起来很有希望.

标签:java,java-stream,matrix-multiplication
来源: https://codeday.me/bug/20190703/1366193.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有