Простой пример TBB, где tbb::affinity_partitioner дает измеримое ускорениеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Простой пример TBB, где tbb::affinity_partitioner дает измеримое ускорение

Сообщение Anonymous »

Просматривая веб-страницу руководства TBB: https://www.intel.com/content/www/us/en ... inity.html, они упоминают этот affinity_partitioner, который должен помочь перераспределить те же самые единицы работы, которые уже использовались (и, возможно, все еще находятся в кеше) заданным поток в тот же поток, если данные повторно используются в другом цикле (так я это понял).
Они упоминают, что график, показывающий увеличение скорости (до 16x по отношению к auto_partitioner), был для простого расчета a += b с изменяющимся размером вектора.
Я не смог воспроизвести это вообще (не получив разницы между двумя разделителями), компилируя с помощью Visual Studio в режиме Release следующий код. Есть ли способ показать четкую разницу (даже на другом примере)?

#include
#include
#include

#include
#include
#include

using namespace oneapi;
using std::size_t;

template
void parallel_compute(bool parallel, size_t size, unsigned steps, Partitioner partitioner = tbb::auto_partitioner{})
{
std::vector x(size, 1.0);
std::vector y(size);

const auto t0{std::chrono::high_resolution_clock::now()};

for (auto t{0u}; t < steps; ++t)
{
if (parallel)
{
tbb::parallel_for(
tbb::blocked_range{0, size},
[&](const tbb::blocked_range& range)
{
for (auto i{range.begin()}; i != range.end(); ++i) y += x;
},
partitioner);
}
else
{
for (size_t i{0}; i != size; ++i) y += x;
}
}

const auto t1{std::chrono::high_resolution_clock::now()};
const auto seconds{std::chrono::duration(t1 - t0).count()};

std::println("Result: {}, Size: {}, Time: {}s, Parallel: {}", y[0], size, seconds, parallel);
}

// TODO: show an actual difference between the two partitioners
auto main() -> int
{
while (true)
{
for (size_t size{1000}; size

Подробнее здесь: https://stackoverflow.com/questions/798 ... le-speedup
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»