Важная информация
Показано с 1 по 8 из 8

Тема: Добавить многопоточность

  1. #1 Добавить многопоточность 
    Новичок
    Регистрация
    16.01.2014
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 1 раз в 1 сообщении
    Есть цикл, надо чтоб итерации выполнялись параллельно в нескольких потоках
    Есть проект, в который нужно дописать многопоточность.
    Суть такая, есть цикл, надо чтоб итерации выполнялись параллельно в нескольких потоках.
    Одновременно должно работать 7 потоков (с возможностью изменять количество).
    Допустим при х=1 выполняется в одном потоке, х=2 во втором, и т.д. до 7-го, далее допустим 3 поток заканчивает работу в нем запускается следующая итерация где х=8 и т.д.
    Приложение написано на c# wpf, надо чтоб выводился отчет о работе из каждого потока в свое консольное окошко.

    Проект пришлю на mail откликнувшимся, обсудим цену
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Если проект не очень большой, то лично мне проще переписать его с нуля на плюсах с OpenMP. OpenMP позволит легко распараллелить последовательную программу.
    Если вариант подходит - пишите:
    ICQ 395-546-218
    skype: rrrfer.rrrfer

    Видел ваш заказ на киберфоруме и программерзфоруме, если вы хотите заказать сразу в нескольких местах и устроить "тараканьи бега" - я беру предоплату 10% (со мной не пройдет).
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. #3  
    Новичок
    Регистрация
    16.01.2014
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 1 раз в 1 сообщении
    Цитата Сообщение от rrrFer Посмотреть сообщение
    Видел ваш заказ на киберфоруме и программерзфоруме, если вы хотите заказать сразу в нескольких местах и устроить "тараканьи бега" - я беру предоплату 10% (со мной не пройдет).
    На киберфоруме один мне 1,5 недели делал, а потом пропал.
    Остальные не отвечают, я им скидывал (цену с ними даже не обсуждал)
    Надоело ждать, решил в других местах написать.

    Цитата Сообщение от rrrFer Посмотреть сообщение
    Если проект не очень большой, то лично мне проще переписать его с нуля на плюсах с OpenMP. OpenMP позволит легко распараллелить последовательную программу.
    Проект очень большой, но скидываю очень маленький. Чтоб понять суть как это делается, чтоб потом реализовать у себя. К сожалению не знаю, что такое OpenMP, не могу ничего сказать.
    Если я не смогу это реализовать в своем проекте, то не интересует.
    Последний раз редактировалось xxxspeed; 17.01.2014 в 00:01.
    Ответить с цитированием  
     

  4. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,939
    Сказал(а) спасибо
    1,845
    Поблагодарили 989 раз(а) в 847 сообщениях
    Записей в блоге
    1
    На киберфоруме один мне 1,5 недели делал, а потом пропал.
    Будьте добры - укажите сроки. Людям будет полезно, т.к. не все берутся за сжатые сроки.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. #5  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    На киберфоруме один мне 1,5 недели делал, а потом пропал.
    Перед тем, как заказывать надо посмотреть историю сообщений. Мне месяц назад парень с сайбера пишет "надо скомпилировать проект на Qt, задача почти не решаемая, спец с тематического раздела сайбера работал 2 недели и не смог". Я взял 3000р, и сдал ему все через 15 минут (я не знаю чем занимался тот спец, но я изменил 3 строчки в проекте и все взлетело). Не все такие, но есть (про историю сообщений я уже писал).

    Суть такая, есть цикл, надо чтоб итерации выполнялись параллельно в нескольких потоках.
    Одновременно должно работать 7 потоков (с возможностью изменять количество).
    C OpenMP для этого достаточно перед циклом написать
    Код :
    #pragma omp parallel num_threads(7) // ну и указать переменные, которые будут для всех потоков общими, локальными и т.п.
    { // а так...7 потоков уже созданы
    # pragma omp for // оператор for, следующий за этой строчкой будет распараллелен (итерации распределены между потоками)
     // при этом, можно указать разные механизмы распараллеливания (распределения итераций по потокам)

    Но это с OpenMP для С++ (и ряда других языков {для C# нет реализации, но там есть свои удобные средства, которых я не знаю}).
    Про OpenMP можно прочитать тут: [Ссылки могут видеть только зарегистрированные пользователи. ], [Ссылки могут видеть только зарегистрированные пользователи. ]
    и в книжке: Антонов А.С. Технологии параллельного программирования MPI и OpenMP (но есть и другие хорошие книжки и официальный сайт).

    Если проект не настолько большой, что его нельзя на плюсы переписать - то я не возьмусь. Но если возможно - пишите (контакты я выше указывал, электропочтой не пользуюсь)

    Это все сработает, как я описал, только если итерации независимы между собой. А если зависимы (есть у них общие данные, которые каждый поток пытается изменить) - то надо юзать критические секции, мутексы и семафоры (в OpenMP ими опять же пользоваться весьма удобно)
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  6. #6  
    Новичок
    Регистрация
    16.01.2014
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 1 раз в 1 сообщении
    Цитата Сообщение от rrrFer Посмотреть сообщение
    Если проект не настолько большой, что его нельзя на плюсы переписать - то я не возьмусь. Но если возможно - пишите (контакты я выше указывал, электропочтой не пользуюсь)

    Это все сработает, как я описал, только если итерации независимы между собой. А если зависимы (есть у них общие данные, которые каждый поток пытается изменить) - то надо юзать критические секции, мутексы и семафоры (в OpenMP ими опять же пользоваться весьма удобно)
    Спасибо, но наверное не пойдет.
    Я тогда не смогу сам в нем, что-то менять.


    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    Будьте добры - укажите сроки. Людям будет полезно, т.к. не все берутся за сжатые сроки.
    Сроков как таковых нет.
    Я предполагаю, что 7 дней более чем достаточно
    Ответить с цитированием  
     

  7. Пользователь сказал cпасибо:

    >Quiet Snow< (17.01.2014)

  8. #7  
    Профи Аватар для Dimon012
    Регистрация
    09.02.2011
    Адрес
    Владивосток
    Сообщений
    850
    Сказал(а) спасибо
    29
    Поблагодарили 130 раз(а) в 108 сообщениях
    Записей в блоге
    3
    Цитата Сообщение от rrrFer Посмотреть сообщение
    только если итерации независимы между собой.
    Я недавно имел дело с реализацией многозадачности в Лазарусе, честно говоря несколько разочарован: да полностью удалось исключить зависания интерфейса, однако серьезного ускорения расчетов я не улавливаю, даже на многоядерных компах полностью не задействуются ядра.
    Ответить с цитированием  
     

  9. #8  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях

    Dimon012

    Скорее всего вы что-то не так делали. Я думаю это стоит вынести в отдельную тему. И так, как тут не все пишут на лазарусе - лучше объяснить на пальцах что и как вы распараллеливали. Я смогу подсказать, скорее всего.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •