【问题标题】:performance of thrust vs. cublas推力与 cublas 的性能
【发布时间】:2015-10-06 22:26:36
【问题描述】:

我有一个std::vector 不同大小的矩阵,我要计算每个矩阵的平方。我有两个解决方案:

1/ 展平我所有的矩阵,并将它们作为一个巨大的平面数组 (float *) 存储在设备中,其中包含该数组中每个矩阵的开始和结束索引,并使用 cublas 例如进行平方。

2/ 将矩阵存储在thrust::device_vector<float *> 中并使用thrust::for_each 将它们平方。

显然第二种解决方案提供了更易读的代码,但它会影响性能吗?

【问题讨论】:

  • 您发布的代码对我来说编译得很好。您必须在扩展名为 .cu 的文件中使用 nvcc 编译推力 GPU 代码。除此之外,我不明白你的问题是什么
  • 谢谢!我现在明白推力代码必须在 .cu 文件中,并且必须使用 nvcc 进行编译。我编辑了问题以使其更清楚。

标签: c++ cuda thrust


【解决方案1】:

我认为这(现在)只是question you already asked 的重复。

假设你想要做的元素操作是简单的,比如每个元素的平方,这两种情况在性能或效率上应该没有什么区别。

这是因为此类操作将受内存限制,这意味着其性能将受到 (GPU) 内存带宽的限制。因此,两种实现将具有大致相同的限制器和大致相同的性能。

请注意,在您的两个提案中,数据最终都需要以相同的方式有效地“展平”(推力操作不能以典型或简单的方式构造以对 thrust::device_vector<float *> 进行操作)

例如,如果您已经混合了推力和 CUBLAS,那么您可以使用适合您的任何方法。另一方面,如果您的模块仅使用了 CUBLAS,并且您可以使用 CUBLAS 或推力来实现您的操作,我不确定我是否会仅为这个操作注入推力。但这只是一个见仁见智的问题。

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 2015-09-18
    • 2017-02-14
    • 2012-02-01
    • 2012-07-18
    • 1970-01-01
    • 2018-07-09
    • 2023-01-13
    • 2014-11-08
    相关资源
    最近更新 更多