У меня есть 3 разных реализации на основе тяги, которые выполняют определенные вычисления: первая — самая медленная и требует наименьшего количества памяти графического процессора, вторая — самая быстрая и требует большей части памяти графического процессора, а третья — промежуточная. Для каждого из них я знаю размер и тип данных для каждого используемого вектора устройства, поэтому я использую vector.size()*sizeof(type) для приблизительной оценки памяти, необходимой для хранения.
Итак, для данного ввода, исходя из его размера, я хотел бы решить, какую реализацию использовать. Другими словами, определите, что самая быстрая реализация, которая подойдет, находится в доступной памяти графического процессора.
Я думаю, что для очень длинных векторов, с которыми я имею дело, размер вычисляемой мной функции vector.data() является довольно хорошей оценкой, а остальными накладными расходами (если они есть) можно пренебречь.
Но как мне оценить накладные расходы на использование памяти (если таковые имеются), связанные с реализацией алгоритмов тяги? В частности, я ищу такие оценки для преобразования, копирования, уменьшения, уменьшения_по_ключу и сбора. Меня не особо волнуют накладные расходы, которые являются статическими и не зависят от размеров входных и выходных параметров алгоритма, если только они не очень значительны.
Я понимаю последствия фрагментации памяти графического процессора и т. д., но давайте пока оставим это в стороне.
Большое спасибо, что нашли время, чтобы изучить это.