Просматривая веб-страницу руководства 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
Простой пример TBB, где tbb::affinity_partitioner дает измеримое ускорение ⇐ C++
Программы на C++. Форум разработчиков
1762960240
Anonymous
Просматривая веб-страницу руководства TBB: https://www.intel.com/content/www/us/en/docs/onetbb/developer-guide-api-reference/2021-9/bandwidth-and-cache-affinity.html, они упоминают этот affinity_partitioner, который должен помочь перераспределить те же самые единицы работы, которые уже использовались (и, возможно, все еще находятся в кеше) заданным поток в тот же поток, если данные повторно используются в другом цикле (так я это понял).
Они упоминают, что график, показывающий увеличение скорости (до 16x по отношению к auto_partitioner), был для простого расчета a[i] += b[i] с изменяющимся размером вектора.
Я не смог воспроизвести это вообще (не получив разницы между двумя разделителями), компилируя с помощью 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[i] += x[i];
},
partitioner);
}
else
{
for (size_t i{0}; i != size; ++i) y[i] += x[i];
}
}
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79817883/simple-tbb-example-where-tbbaffinity-partitioner-gives-a-measurable-speedup[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия