nlothik (nlothik) wrote,
nlothik
nlothik

Многонитевой вопрос

Я достаточно давно не брал в руки эти шашки, так что нужен совет.

Вот есть у меня массив A, длиною в 96 элементов.

Каждый элемент массива -- ещё один массив B, с цифЫрками int, которые надо хитрым образом сгрызть и выдать результат. Затем результаты складываются, и получается то, что мне надо.

Ну, вот, например, для 8 нитей, обрабатывающих эти данные в массиве B, распределение работы кристально ясно и логично:

Делим 96 на 8, получаем, что каждой нити можно поручить обработку 12 элементов массива A (длину куска я храню в переменной int span).

Дальше нити №0 выдаём 0-11, нити №1 -- 12-23, и так далее. Последней нити выдаётся span + всё, что осталось (если бы массив был не 96, а 97 элементов, ей бы досталось 13 элементов).

Всё просто и понятно.

Но если я захочу сделать 64 нити (у меня тут завалился сервер с 64 процессорами), то получится дурево. Потому что 96 на 64 не делится. Вернее, делиться-то оно делится, но получается-то 1. Таким образом, 63 нити будут обрабатывать каждая по одному элементу массива A, а нити №63 достанется обработка 32 элементов массива А. Налицо перекос.

Как проще и лучше всего выйти из такого положения, как лучше всего распределить работу? То-есть, наиболее приближённой к идеалу я вижу следующую ситуацию -- нити с 0 по 31 получают по 2 элемента массива А, а все остальные -- по одному. Но как бы это алгоритмизировать? На остаток после деления смотреть?
Tags: программирование, чесать репу
Subscribe

  • На выходных

    Попробовал бифштекс системы “Томагавк”: Вкусный, но в одно рыло сожрать полкило отборного мяса — это много. Я поэтому не…

  • Политический кофе

    Вот есть такое распространённое и распропагандированное (вполне известно кем) понимание капитализма как системы, построенной на жажде наживы и…

  • Отвык

    Был в “русском” магазине, обнаружил там киевский торт. Взял попробовать. Мда. Видимо, отвык я совсем от советской кондитерки. Не…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 22 comments

  • На выходных

    Попробовал бифштекс системы “Томагавк”: Вкусный, но в одно рыло сожрать полкило отборного мяса — это много. Я поэтому не…

  • Политический кофе

    Вот есть такое распространённое и распропагандированное (вполне известно кем) понимание капитализма как системы, построенной на жажде наживы и…

  • Отвык

    Был в “русском” магазине, обнаружил там киевский торт. Взял попробовать. Мда. Видимо, отвык я совсем от советской кондитерки. Не…