【发布时间】:2012-06-04 23:32:48
【问题描述】:
我在 Matlab 中计算一个函数 f(x) = exp(-x),其中 x 是一个标量向量。该函数在 GPU 上计算,例如
x_cpu = [4 5 11 1];
x = gpuArray(x_cpu);
f = exp(-x);
那么结果将是:
f = exp(-[4, 5, 11, 1]) = [0.183, 0.0067, 1.6702e-005, 0.3679]。
注意 f(x(3)) = f(11) = exp(-11) = 1.6702e-005 = 0.000016702,这是一个很小的值。所以,我想通过简单地设置 f(x(i)) = 来避免计算所有 x(i) > 10 的函数0.
我或许可以对 x 使用稀疏矩阵表示。但是,Parallel Computing Toolbox 不支持在 GPU 上对稀疏矩阵进行运算。
你会如何处理这个问题?
【问题讨论】:
-
我推荐两种实现,一种使用稀疏矩阵,一种使用 GPU 计算。做一些分析,然后选择哪个更适合你。
-
谢谢。我对其进行了测试:GPU 实现(在完整矩阵上)比 CPU 实现在稀疏矩阵上要快一点。如果我能以某种方式优化 gpu 上的代码,只是徘徊。矢量 x 非常稀疏。
-
在下面查看我的答案。这可能是你想要的。
-
好奇,
x_cpu在你的实际实现中有多大? -
x_cpu可以有 100,000 到 1,000,000 个元素。函数f = exp(-x)也被调用了数千次。
标签: matlab optimization gpu sparse-matrix