我有 3 种不同的基于推力的实现来执行某些计算:第一个是最慢的,需要最少的 GPU 内存,第二个是最快的,需要最多的 GPU 内存,第三个介于两者之间。对于其中的每一个,我都知道使用的每个设备向量的大小和数据类型,因此我使用 vector.size()*sizeof(type) 来粗略估计存储所需的内存。
所以对于给定的输入,根据它的大小,我想决定使用哪个实现。换句话说,确定适合的最快实现是在可用的 GPU 内存中。
我认为对于我正在处理的非常长的向量,我正在计算的 vector.data() 的大小是一个相当好的估计,其余的开销(如果有的话)可以忽略不计。
但是我如何估计与推力算法实现相关的内存使用开销(如果有的话)?具体来说,我正在寻找有关转换、复制、减少、reduce_by_key 和收集的此类估计。我并不真正关心静态开销,并且不是算法输入和输出参数大小的函数,除非它非常重要。
我理解 GPU 内存碎片等的含义,但让我们暂时搁置一下。
非常感谢您花时间研究这个问题。