от
Я рассматривает возможность использования rangev3 в библиотеке шахты. Мне нравится синтаксис rangev3, но приоритетом является производительность. В библиотеке работает множество векторных умножений и сложений, в основном 128 отсчетов. Я использовал Google эталоном для оценки, например, сложение двух векторов. Диапазоны версий значительно медленнее, чем std версия (до 10 раз медленнее из-за короткой длины векторов). Это несколько удивительно, так как rangev3 (и будущих СТД::колеблется в C 20) часто утверждают, чтобы иметь хорошие показатели. Есть проблема с тем, как я использую rangev3 здесь? Или это как-то связано с компилятором не в состоянии развернуть код rangev3 хорошо? Или rangev3 прирост производительности показывают только для многих гирляндной операции? Примечания: назначение
output = rng1;
не должна выделять память как длина вектора-это же (я пытался использовать диапазоны::copy, но это будет в 100 раз медленнее). Я пытался предварительно инициализировать и рандомизации вектора a и B, а увидел никакой разницы. Я заметил, что если бы у меня было несколько операций в трубопроводе, разрыв между стл и ragesv3 сузились, но только для длинных векторов (выше 32000 за 5 операций подряд). Ниже представляет собой самодостаточный пример с метриками производительности. Я работаю в C 17 кода LLVM библиотеку libc , на 4-сердечник i7 в MacBook Pro с -О3 флаг.
#include 
#include "benchmark.h"

static void AddBenchmark(benchmark::State

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...