На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Parallel.For, хочу посоветоваться
    Славян, ну это уже следующий этап оптимизации. Тем более, что конкретно в этом случае выигрыш вряд ли будет.
    Надо сначала сделать так, чтобы было максимально понятно и легко исправляемо, если где-то выявится косяк. Прогнать кучу разных тестов.
      а не проще в отдельную процедуру распределение блоков вынести? пусть потоки запрашивают у неё номер блока, а не отбирают друг у друга.
        villain, а чем это проще? Каким образом эта процедура будет работать?
        Ведь она же тоже должна поддерживать параллельное к ней обращение. И тогда чем это лучше того, что есть (в чём принципиальное отличие её работы)?
        Я подумаю на эту тему, но пока я вижу лишь дополнительные расходы на call/ret и всё.
          Цитата Jin X @
          апускается функция инициализации, которая создаёт ждущие потоки.

          Цитата Jin X @
          Потоки, в свою очередь, инициализируют цикл по определённым правилам (см. ниже вопросы) и вызывают на каждом цикле процедуру цикла (ProcAddr), передавая ей номер цикла и порядковый номер потока

          вот здесь, не отдавать власть потокам, а оставить в процедуре инициализации, и от неё потоки будут получать номер блока, один, а не список.
          всё равно на каждом цикле поток обращается к процедуре, передать обратно пару байт - затраты ноль
            Цитата villain @
            вот здесь, не отдавать власть потокам, а оставить в процедуре инициализации, и от неё потоки будут получать номер блока, один, а не список.
            всё равно на каждом цикле поток обращается к процедуре, передать обратно пару байт - затраты ноль
            "Вот здесь" не получится, т.к. процедура инициализации запускается один раз для всех for'ов и просто создаёт потоки, ей не передаётся начальное и конечное значение. А если говорить про процедуру запуска for'а, то как этот поток будет передавать данные другим (рабочим) потокам?
            Я понимаю, что каждый поток будет получать 1 номер, но каким образом он будет этот номер получать, технически? Если поток будет вызывать какую-то процедуру (и тут нет понятий "процедура потока 1", "процедура потока 2" - процедура запускается в том потоке, из которого она вызывается), то это будет один и тот же код для всех потоков. И брать следующий номер он будет из одного и того же счётчика. И вызвать её могут одновременно все потоки разом, а значит тут либо lock'и делать, либо какие-то ухищрения типа тех, что я описывал выше.

            Тут одно из двух:
            1. Либо я не понимаю, что ты хочешь мне донести.
            2. Либо ты что-то не понимаешь.
            Так что объясни подробнее как ты это видишь :)
              ага, я понял, где я не понял
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0326 ]   [ 15 queries used ]   [ Generated: 28.03.24, 19:08 GMT ]