C++ TBB: как запустить несколько tbb::task_arena параллельно?C++

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

Сообщение 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.initialize(4);
}
tbb::parallel_for(0, 12, [&](int i) {
arenas.execute([&] {
p();
std::cout

Подробнее здесь: https://stackoverflow.com/questions/784 ... n-parallel
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени метода
    Anonymous » » в форуме C#
    0 Ответы
    92 Просмотры
    Последнее сообщение Anonymous
  • Вызвать 2 асинхронных метода Task параллельно? (мауи.нет)
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Вызвать 2 асинхронных метода Task параллельно? [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Почему моя задача выполняется медленно при использовании Task.Result, но быстро, когда я использую await Task
    Anonymous » » в форуме C#
    0 Ответы
    116 Просмотры
    Последнее сообщение Anonymous
  • Как правильно преобразовать Task в Task?
    Anonymous » » в форуме C#
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

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