我有一个大小不同的矩阵的std::vector
,我将计算每个矩阵的平方。我有两种解决方案:
1 /展平我的所有矩阵,并将它们作为一个巨大的平面数组(浮点*)存储在设备中,并带有该数组中每个矩阵的开始和结束的索引,例如使用cublas进行平方。
2 /将矩阵存储在thrust::device_vector<float *>
中,并使用thrust::for_each
对其求平方。
显然,第二种解决方案提供了更具可读性的代码,但这会影响性能吗?
最佳答案
我认为(现在)只是question you already asked的重复。
假设要执行的元素操作很简单,例如对每个元素进行平方运算,那么这两种情况在性能或效率上应该没有什么区别。
这是因为此类操作将受内存限制,这意味着其性能将受到(GPU)内存带宽的限制。因此,两种实现方式将具有大致相同的限制器和大致相同的性能。
请注意,在您的两个建议中,最终都需要以相同的方式有效地“整理”数据(无法以典型或简单的方式构造推力操作来对thrust::device_vector<float *>
进行操作)
例如,如果您已经混合使用推力和CUBLAS,则可以使用任何适合您的方法。另一方面,如果您的模块仅使用CUBLAS,并且您可以使用CUBLAS或推力来实现您的操作,则我不确定我是否会为此操作注入(inject)推力。但这只是一个见解。
关于c++ - 推力vs. cublas的表现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32964853/