У меня есть критически важная для производительности лямбда-функция p, которая что-то вычисляет и записывает результат во внешнюю структуру данных:
class Foo {
...
std::vector v;
auto p = [&]() {
int res;
// Calculate and assign to res
static std::mutex mutex;
{
std::lock_guard lock(mutex);
v.emplace_back(res);
}
}
...
}
Теперь я хочу вызвать p() параллельно несколько раз (скажем, 12 раз) в моих 48 потоках. Вызовы p() потокобезопасны, но очень дороги. Чтобы минимизировать накладные расходы на переключение контекста (я не уверен, что это вообще играет такую большую роль), вместо того, чтобы одновременно выполнять 12 вызовов p() во всех 48 потоках, как в следующее:
tbb::parallel_for(0, 12, [](i) {
p();
});
,
Я хочу вызвать p() одновременно 12 раз, но вместо этого каждый вызов выполняется только в 4 потоках. Есть ли способ добиться этого с помощью tbb::task_arena? Я также буду открыт для альтернативных решений.
Я попробовал следующий код, но не уверен, что он делает то, что я пытаюсь сделать.
Я' Я просмотрел документацию tbb::task_arena, но мне все еще непонятно.
std::vector arenas(12)
for(int i = 0; i < 12; i++) {
arenas.initialize(4);
}
tbb::parallel_for(0, 12, [&](int i) {
arenas.execute([&] {
p();
std::cout
Подробнее здесь: https://stackoverflow.com/questions/784 ... n-parallel
C++ TBB: как запустить несколько tbb::task_arena параллельно? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1715287069
Anonymous
У меня есть критически важная для производительности лямбда-функция p, которая что-то вычисляет и записывает результат во внешнюю структуру данных:
class Foo {
...
std::vector v;
auto p = [&]() {
int res;
// Calculate and assign to res
static std::mutex mutex;
{
std::lock_guard lock(mutex);
v.emplace_back(res);
}
}
...
}
Теперь я хочу вызвать p() параллельно несколько раз (скажем, 12 раз) в моих 48 потоках. Вызовы p() потокобезопасны, но очень дороги. Чтобы минимизировать накладные расходы на переключение контекста (я не уверен, что это вообще играет такую большую роль), вместо того, чтобы одновременно выполнять 12 вызовов p() во всех 48 потоках, как в следующее:
tbb::parallel_for(0, 12, [](i) {
p();
});
,
Я хочу вызвать p() одновременно 12 раз, но вместо этого каждый вызов выполняется только в 4 потоках. Есть ли способ добиться этого с помощью tbb::task_arena? Я также буду открыт для альтернативных решений.
Я попробовал следующий код, но не уверен, что он делает то, что я пытаюсь сделать.
Я' Я просмотрел документацию tbb::task_arena, но мне все еще непонятно.
std::vector arenas(12)
for(int i = 0; i < 12; i++) {
arenas[i].initialize(4);
}
tbb::parallel_for(0, 12, [&](int i) {
arenas[i].execute([&] {
p();
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78456882/c-tbb-how-to-run-multiple-tbbtask-arena-in-parallel[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия