推力与cublas的性能
performance of thrust vs. cublas
我有一个不同大小矩阵的std::vector
,我要计算每个矩阵的平方。我有两个解决方案:
1/将我所有的矩阵平铺,并将它们存储在设备中,作为一个巨大的平面数组(float *),具有该数组中每个矩阵的开始和结束的索引,并使用立方体来进行平方。
2/将矩阵存储在thrust::device_vector<float *>
中,并使用thrust::for_each
对它们进行平方。
显然,第二个解决方案提供了更可读的代码,但它会影响性能吗?
我认为这只是(现在)重复你已经问过的问题。
假设您想要执行的元素操作很简单,例如每个元素的平方,那么这两种情况在性能或效率上应该没有什么区别。
这是因为这样的操作将是内存绑定的,这意味着它的性能将受到(GPU)内存带宽的限制。因此,两种实现将具有大致相同的限制器和大致相同的性能。
请注意,在您的两个建议中,数据最终都需要以相同的方式有效地"扁平化"(推力操作不能以典型或简单的方式构造以操作thrust::device_vector<float *>
)
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 海湾合作委员会 ARM 性能下降
- GCC 和 Clang 代码性能的巨大差异
- 在容量内调整矢量大小时的性能影响
- 了解算法的性能差异(如果以不同的编程语言实现)
- 未达到的情况会影响开关外壳性能
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 是否总是可以将使用递归编写的程序重写为不使用递归的程序C++,性能观点是什么?
- 哪种方法更好,性能明智
- C++ 特征库:引用的性能开销<>
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- 基于范围的 for 循环range_declaration中各种说明符之间的性能差异
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- 推力与cublas的性能