推力与cublas的性能

performance of thrust vs. cublas

本文关键字:性能 cublas      更新时间:2023-10-16

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

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

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

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

我认为这只是(现在)重复你已经问过的问题。

假设您想要执行的元素操作很简单,例如每个元素的平方,那么这两种情况在性能或效率上应该没有什么区别。

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

请注意,在您的两个建议中,数据最终都需要以相同的方式有效地"扁平化"(推力操作不能以典型或简单的方式构造以操作thrust::device_vector<float *>)

例如,如果您已经混合了推力和CUBLAS,那么您可能会使用适合您的方法。另一方面,如果您的模块只使用CUBLAS,而您可以使用CUBLAS或推力来实现操作,那么我不确定是否会为这一个操作注入推力。但这只是个人看法。