【问题标题】:Singular value decomposition (SVD) using multithreading使用多线程的奇异值分解 (SVD)
【发布时间】:2014-03-10 20:16:59
【问题描述】:

我正在使用 128GB RAM 的 3.5GHz/3.9GHz(6 核/12 线程)服务器上运行大型(120k x 600k)和稀疏(0.1 个非零值)矩阵的部分 SVD SVDLIBC。

是否可以使用多线程稍微加快进程以充分利用我的服务器配置?

我没有多线程的经验;因此,我要求提供友好的建议和/或指向手册/教程的指针。

[编辑] 我也对替代品持开放态度(matlab/octave、r 等)

【问题讨论】:

  • 你能放一个你的伪代码吗?所以我们可以检查一些。
  • 其实没有代码。我从命令行调用 SVDLIBC。我的矩阵是 SB(稀疏二进制)格式。
  • 当前性能很差吗?我不知道 SVD,但如果有这种情况,你应该能够同时分解多个矩阵。

标签: multithreading r matlab octave svd


【解决方案1】:

在 Matlab 中,对于稀疏矩阵,您有 svds。此实现受益于多线程计算(1)

【讨论】:

  • 感谢您的建议。你知道这个功能在 Octave 中是否可用?否则我必须获得 Matlab 许可证。
【解决方案2】:

参见 R 中的irlba: Fast partial SVD by implicitly-restarted Lanczos bidiagonalization。它只计算第一个用户指定的编号。的尺寸。过去有很好的经验。但是,后来我在商业版本的 R 上使用了它,它被编译为利用多线程,因此不能保证由于多线程而提高速度。

【讨论】:

  • 谢谢你的建议,我去看看。顺便说一句,我对前 10k 个奇异值感兴趣。你认为它会在提到“一些近似奇异值和大型矩阵的奇异向量”时起作用吗?
  • 我之前从未尝试过提取这么多——我提取的最多在 50-500 范围内。我在过去发现有用的是查看提取 10,20,40,80,160 暗淡需要多少时间,并从那里推断提取所需编号需要多少时间。的奇异值。 10K-虽然有点矫枉过正,但是您的问题在哪个领域?文本处理?推荐系统?可以试试random projection见:stackoverflow.com/questions/4951286/svd-for-sparse-matrix-in-r/…
  • 我将 SVD 用于 LSA。对于小集合,50-500 是一个很好的降维范围。但是,对于大量收藏,问题仍然存在。作为一个实验,我在一个较小的集合(84k * 49k 矩阵)上运行 SVD,只保留前 7k 个奇异值。根据 Cattell 的碎石测试,“最佳”维度将在 2000-2500 范围内......无论如何,感谢“随机投影”的链接!
猜你喜欢
  • 2011-06-30
  • 2010-10-31
  • 2015-04-16
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多