Но, например, алгоритм суммирования всех чисел в массиве или поиска минимума вы так не ускорите.ещё как ускорю: с заранее готовыми (уже посчитанными/отсортированными!) результатами из базы по N-штук с асинхронной обработкой.
Потому что тупо сложить несколько чисел всегда быстрее чем искать их среди предподсчитанных.Всё зависит от типа чисел и от типа адресации хранилища. Обычно, такое хранилище - это гиперкуб. Т.е. все числа в шингле - это проекции ответа на его грани. И выполняется гораздо быстрее обычной суммы.
хранилище - это гиперкуб
Там 4 числа - это просто адресация на результат: просто, чтобы сам принцип работы был понятен. Разумеется, что это через прямую работу с памятью делается.
storage[[a,b,c,d]].val
или storage[a][b][c][d].val
(через многомерные массивы), то там будет то же самое а то имедленнее, что код на С++, что привел я - вычисление адреса или несколько индексаций.(через многомерные массивы), то там будет то же самое а то имедленнее, что код на С++, что привел ясписок формируется однократно в начале, а прямая адресация к памяти быстрее, чем запрос через массив.
прирост будет пусть лишь после 20,50,100 цифр
список формируется однократно в начале, а прямая адресация к памяти быстрее, чем запрос через массив
Ну смиритесь уже, что глупость сморозили!Боюсь, что ты слишком самоуверен в себе. Пока тесты на производительность (с прямой адресацией) не покажут, что моё предположение ложно, остановимся на том, что глупость сморозил не я.
А куда делась ваша навороченная база данных с асинхронными запросами и шинглами?Никуда. База предпосчитанных результатов - это и есть хранилище в памяти с доступом по прямой адресации.
Во-первых, обращение к многомерному плоскому массиву - это и есть прямая адресация.Это поиск значений по смещениям, начиная с адреса переменной имени массива. Это НЕ прямая адресация!
----------------------------------------------------------------------------------------
Benchmark Time CPU Iterations UserCounters...
----------------------------------------------------------------------------------------
Sum1_bn/iterations:1000000000 3.30 ns 3.27 ns 1000000000 sum=5
Sum2_bn/iterations:1000000000 3.38 ns 3.38 ns 1000000000 sum=5
void Sum1_bn(benchmark::State& state) {
unsigned char a = 3, b = 2;
unsigned char sum;
for (auto _ : state) {
sum = a + b;
}
state.counters["sum"] = sum;
}
char precompute[256][256];
void Sum2_bn(benchmark::State& state) {
unsigned char a = 3, b = 2;
precompute[a][b] = a + b;
unsigned char sum;
for (auto _ : state) {
sum = precompute[a][b];
}
state.counters["sum"] = sum;
}
BENCHMARK(Sum1_bn)->Iterations(1000000000);
BENCHMARK(Sum2_bn)->Iterations(1000000000);
Но, например, алгоритм суммирования всех чисел в массиве или поиска минимума вы так не ускорите.
суммирования всех чисел в массиве
приводите в пример операции, которые вполне легко ускоряются.
Теперь о предподсчете. Что Вы понимаете под медленнее?