Контроль общего потребления памяти задачами hpx - PullRequest
0 голосов
/ 23 апреля 2020

Я намерен реорганизовать мою программу на C ++, чтобы использовать hpx в качестве основного способа достижения параллелизма. Программа работает на обычном P C, поэтому мне не нужны все функциональные возможности кластера. Тем не менее, я должен обратить более пристальное внимание на общее потребление памяти. Есть ли идиоматический c способ управления планировщиком задач hpx, чтобы у меня не заканчивалось память?

Чтобы быть более точным c. Допустим, я рендерил (используя ЦП) большое количество геометрических c примитивов (точек, треугольников, квадрик и т. Д. c ...), хранящихся в массиве, в буфер изображения размером ~ 100 МБ. Чтобы распараллелить процесс, я разбил массив на куски, каждый чанк рендерится в отдельный буфер одинакового размера, а затем объединю буферы.

Теперь я хочу использовать hpx для распараллеливания для л oop. Это разделит проблему на неопределенное количество фрагментов, выполняемых на неопределенное количество задач. Я полагаю, что загрузка ЦП будет велика, но я обеспокоен тем, что каждая задача, использующая собственный частный буфер объемом 100 МБ, будет полностью занимать всю имеющуюся у меня память (около 8 ГБ), и все начнет меняться, что значительно замедлит работу системы. Не говоря уже о стоимости слияния увеличенного числа буферов.

Один из способов контроля, который я рассматриваю, заключается в создании небольшого общего массива буферов и использовании counting_semaphore для заимствования любого доступного буфера из пул для каждой задачи, как она начинается. И когда задача заканчивается, буфер возвращается обратно в пул.

Однако, поскольку я новичок в hpx, меня беспокоит, что я заново изобретаю колесо для чего-то, что, вероятно, уже доступно в библиотеке.

...