по основной теме. Если это не так, вы можете сделать это так, выполняя работу во временном расположении для каждого работника, а затем обновляя общее местоположение только один раз, когда работа завершена. Любое повторное обновление одного и того же местоположения работниками будет просто ложным делением без реальной цели.

отреть возможностьN потоки, выполняющие асинхронные задачи с малым значением результата, напримерdouble или жеint64_t, Так о8 Значения результата могут занимать одну строку кэша ЦП.N равно количеству ядер процессора.

С одной стороны, если я просто выделю массивN предметы, каждыйdouble или жеint64_t, тогда8 потоки будут совместно использовать строку кэша ЦП, которая кажется неэффективной.

С другой стороны, если я выделю целую строку кэша для каждогоdouble/int64_t, поток получателя должен будет получитьN строки кэша, каждая из которых написана отдельным ядром процессора (кроме 1).

Так есть ли эффективное решение для этого сценария? Процессор x86-64. Решение в C ++ является предпочтительным.

Пояснение 1: издержки запуска / выхода потока невелики, поскольку используется пул потоков. Так что это в основном синхронизация в критической секции.

Пояснение 2: Параллельные партии имеют зависимость. Главный поток может запустить следующий пакет параллельных вычислений только после того, как он соберет и обработает результаты предыдущего пакета. Потому что результаты предыдущей партии служат некоторыми параметрами следующей партии.

Ответы на вопрос(2)

Ваш ответ на вопрос