nlothik (nlothik) wrote,
nlothik
nlothik

Category:

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

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

Вот есть у меня массив 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

  • Раздувание афффтомобилей

    Больше всего в современных автомобилях меня удручает то, что они очень сильно раздулись в размерах. Даже термин теперь такой есть —…

  • Вдогонку

    Не буду голословным. Вот часть резюме человека (большая картинка — по щелчку), которое было написано либо целиком ИИ, либо явно с его…

  • Спасибо, Владимир Владимирович!

    Бритни Грайнер русская тюрьма однозначно пошла на пользу. То она, понимаешь, отказывалась стоять во время гимна, а теперь, вишь, стоит как паинька,…