【发布时间】:2018-05-11 14:13:53
【问题描述】:
当我使用 spark mllib 多层感知器模型来预测向量时,我发现相同的向量在多线程中有时会给出不同的结果。我阅读了源代码,发现它基于 BLAS lib。我在多线程中为 BLAS 编写了一些测试代码。
我使用 BLAS dgemm utils 计算矩阵,相同的矩阵数据在使用多线程时会给出不同的结果。
我的测试代码可以在github 上找到。在测试代码中,我做了一些人工的测试数据。要使用 Windows 10 对其进行测试,请在 java 类路径中添加 blas dll 文件。
当我只使用一个线程运行时:
blas.dgemm(transa, transb, m, n, k,alpha, a, _a_offset, lda, b, _b_offset, ldb,beta, c, _c_offset, ldc)
重复运行的结果是一样的。但是使用 5 个或更多线程来运行相同的数据,
blas.dgemm 给出不同的结果。这很令人困惑,为什么blas.dgemm中的相同数据会给出不同的结果?
使用 Windows 10,将 netlib-native_system-win-x86_64.dll 添加到 java 类路径。
【问题讨论】:
-
我做了一些相当大的语法更改,如果有任何我误解的内容,请更改/还原。
-
谢谢。以后会密切注意语法错误的。
标签: java multithreading apache-spark apache-spark-mllib openblas