Size: a a a

2020 August 17

D

Danya in supapro.cxx
Так работает parallel_for в PPL и TBB
источник

D

Danya in supapro.cxx
Причём это не самый хороший вариант parallel_for, потому что обработка единичного элемента может бить по локальности кеша
источник

ПК

Побитый Кирпич... in supapro.cxx
Danya
Причём это не самый хороший вариант parallel_for, потому что обработка единичного элемента может бить по локальности кеша
Ну дак for_each так же работает
источник

D

Danya in supapro.cxx
Поэтому в TBB есть tbb::parallel_for(tbb::blocked_range{0, n}, [](tbb::blocked_range<int> subrange) { ... } )
источник

D

Dmitriy in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Подскажите, какой самый простой способ запилить многопоточный for средствами C++/STL, без внешних либ?
Написать простую библиотеку с собственным parallel_for, которая раскидывает диапазон итераторов/индексов по N потоков
источник

D

Danya in supapro.cxx
Побитый Кирпич
Ну дак for_each так же работает
parallel_for вроде как оптимизированнее для Random-Access итераторов
источник

ПК

Побитый Кирпич... in supapro.cxx
Danya
parallel_for вроде как оптимизированнее для Random-Access итераторов
Я в этом сомневаюсь, ведь в for_each можно сделать ту же оптимизацию
источник

D

Dmitriy in supapro.cxx
Вопрос будет, конечно, в вычислении расстояния last-first (привет листу и мапам), больше сложностей не вижу, т.к. по условию синхронизация не предполагается
источник

D

Danya in supapro.cxx
Побитый Кирпич
Я в этом сомневаюсь, ведь в for_each можно сделать ту же оптимизацию
https://www.youtube.com/watch?v=N-Fms35AUnY
Я ссылаюсь на этот доклад
Алексей говорил, что в parallel_for_each есть оптимизации для RA итераторов, но всё равно лучше parallel_for
источник

D

Danya in supapro.cxx
Dmitriy
Вопрос будет, конечно, в вычислении расстояния last-first (привет листу и мапам), больше сложностей не вижу, т.к. по условию синхронизация не предполагается
Я не думаю, что оно там вычисляется
Я думаю там просто for по элементам последовательности, который каждый элемент отправляет обрабатываться в task_group
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
То что для параллельности нужно делить n на 4 части
Ну и пусть.
Скажем, миллион итераций, по 250 тыс на поток.
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Dmitriy
Написать простую библиотеку с собственным parallel_for, которая раскидывает диапазон итераторов/индексов по N потоков
Велосипед?
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Ну и пусть.
Скажем, миллион итераций, по 250 тыс на поток.
Ну, это for_each
источник

D

Danya in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Велосипед?
Другого не остаётся)
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
Ну, это for_each
А как его сделать без привязки к итераторам?
источник

D

Danya in supapro.cxx
Побитый Кирпич
Я в этом сомневаюсь, ведь в for_each можно сделать ту же оптимизацию
А ну в текущей реализации для RA итераторов идёт вызов parallel_for
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
А как его сделать без привязки к итераторам?
Какой привязки, ты о чем?
источник

ПК

Побитый Кирпич... in supapro.cxx
std::for_each это функция из std
источник

ПК

Побитый Кирпич... in supapro.cxx
Это просто первые n элементов
источник

D

Danya in supapro.cxx
Евгений, а почему нельзя сторонние либы-то?
источник