Язык для параллельного программирования

Тема в разделе "WASM.ZEN", создана пользователем AndreyMust19, 1 июл 2009.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    AndreyMust19
    Пока ваш тред из сервиса(симафору и прочие механизмы синхронизации) ожидания вернётся он много раз будет прерван. Выходите вы из сервиса - тут бац, клавиатура запрос выдала, только вы вернулись - бац видеоадаптер хочет процессор, а по возврату планировщик решает что ваш дред достаточно процессор юзал, и отдаст камень другому треду..
    Если вы имеете ввиду синхронизацию обращений к памяти, то тут никакой язяк, симафоры и тд. не нужен - инструкции можно выполнять атомарно, только одно ядро к ней обратится в данный момент времени.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Подумал.. может параллельно не времени, а есчо чемуто, тогда чему ??
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AndreyMust19
    OpenMP чем не устраивает?
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    AndreyMust19
    Т.е. некоторые процедуры будут тотально нереентерабельны? Плохо, очень плохо.

    Следующий сценарий, например. Http-сервер, который должен обслуживать множество клиентов. Множество процессоров на машине – множество потоков может выполняться одновременно. Каждого подключающегося клиента обслуживает поток, выполняющий одну и ту же процедуру. А эта процедура нереентерабельна – одновременно будет обслуживаться только один клиент же.
     
  5. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    AndreyMust19
    есть очень простое решение - Erlang или чисто функциональные языки. отсутствие побочных эффектов дает практически полную свободу распараллеливания. чем они тебя не устраивают?
     
  6. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Clerk
    Ну, раз вы так говорите, потоки вообще не надо синхронизировать - они и так часто прерываются, а на одноWGшных машинах может работать только один поток (HyperThreading не в счет). А вот где он будет прерван? Если в коде, обращающемуся к собственным переменным, то нужно использовать критическую секцию. Если в коде, обращающимся к внешней переменной, - то семафор.
    Sol_Ksacap
    Ну, не всегда. Если собственные переменные потока находятся на стеке (т. е. у каждого потока свои собственные переменные), то в блоке кода, к-ый обращается к этим переменным синхронизация не нужна (ведь каж. поток работает со своими переменными).
    А вот что будет, если некоторые собственные переменные находятся в общей памяти процесса, а не на стеке? Тогда синхронизация просто необходима. Вдруг поток прервется, (н-р, ввод данных), а переменная приняла промежуточное значение и начинать новый поток нельзя. Так что синхронизация кода нужно только если собственные переменные хранятся не на стеке.
     
  7. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
    AndreyMust19
    ландо в той гавнотеме ты отмазался что в хипе, а тут как мазаться будем? типа тема дзенская? она дзенская когда есть ХОТЬ ОДНА ИДЕЯ, а не бред какойто.
     
  8. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    VooDoo
    С Erlang я не знаком, может и устраивает. Мне интересно другое - почему если пишут параллельные программы, то не используют параллельные парадигмы. Такие языки есть, но они никому не известны. Неужели все предпочитают заниматься синхронизацией сами, лишь бы писать на Си / Паскале, разбираясь потом - на фига здесь семафор, а тут критическая секция, и почему первое стоит вместо второго. Почему-то уже никто не пишет процедуры в ручную на манер QBasic, а предпочитают предусмотренные языковые конструкции. Почему же такие конструкции для параллельности не придумали?
     
  9. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    737061
    Нет, я сказал это по другой причине. Не скажу в этой теме, а в другой.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    AndreyMust19
    Та сихонизация, что посредством семафоров, мьютексов и тп. исполняется в юзермоде - это управление последовательностью обращений к ресурсам в многопоточных приложениях, никакого начала параллельного исполнения кода нет и быть не может. Семафор позволяет дать доступ к ресурсу определённому числу потоков, остальные на нём будут ждать. Но никакой синхронизации процессоров при этом нет. Один после возврата из сервиса может исполнить сто инструкций, после чего вытеснен, второй за время пока другой поток будет занимать процессор может исполнить тысячи инструкций. И это условно при битовом различном аффинитете у тредов, если дефотная маска, тоесть треды допущены к исполнянию на каждом процессоре, то тут ни о какой межпроцессорной синхронизации речи быть не может, как вы это не поймёте.
    Что именно подразумевается под параллельным исполнением ?
    Видимо автор путает два понятия, параллельное исполнение кода на нескольких ядрах и разделение ресурсов между потоками.
     
  11. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
    Clerk
    да понятно то понятно что он хочет, чтобы функции создания потока (платформозависимы) и синхронизации были включены в язык.

    Код (Text):
    1. int k;
    2. ...
    3. f1()
    4. {
    5. //используем к
    6. ,,,
    7. }
    8. f2()
    9. {
    10. //используем к
    11. ,,,
    12. }
    при этом компилятор сам решает вопросы синхронизации, естественно ф1 и ф1 в разных потоках выполняются (в язык встроенно возможность создавать потоки)
     
  12. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    AndreyMust19
    Вроде в С++0х обещали что-то такое, хотя могу врать. Может, есть в D.

    Это самый дурацкий вопрос, какой можно задать, сам понимаешь?
    Все кому всерьез нужна параллельность пишут на подходящих языках. Но в языках этих есть проблема - языки эти не являются, вобщем-то, general puprose, а средства параллелизации либо платформенно-зависимы, но предельно замаскированы, либо реализуются в рамках виртуальной машины. Первое, пожалуй, дурной тон - добавляет всякую магию, повышает уровень абстракции. А ты предлагаешь именно это. Запомни - явное лучше неявного. Пусть лучше лишняя писанина, чем сомнительная, неизвестно как работающая и тормозящая магия.
     
  13. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Clerk
    Не, первым это перепутал все-таки ты. А потом вы додго пытались вернуть общий язык. =)
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Почемуто услышав про параллельное исполнение я думал что процессоры синхронизировать нужно. Весьма трудно понять что нужно автору, если он сам того не понимает.)
     
  15. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    неужели ты действительно настолько крут, что знаешь ВСЕ языки программирования, знаешь достоинства и недостатки каждого, знаешь все подводные камни в кодинге??? Да ты ничего о языках не знаешь и об их возможностях, а только громкими словами кидаешься. Аргументируй! Приведи пример, который нужен тебе, как и большинству кодеров, ну просто очень срочно. И который при этом нельзя реализовать ни на одном из названных тебе языков
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    737061
    Это уже есть все в OpenMP. Так что зачем изобритать неясно.
     
  17. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
    Pavia
    уж я точно не сторонки этой бредоидеи. ДА и автор не внушает не какого доверия, и уж точно не будет нечего делать.
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Pavia
    Тоже советовал, но насколько я знаю это всё же несколько иное, предназначено для ускорения вычислений на нескольких ядрах. На одном ядре оно не работает. ТС же пишет про многопоточность как таковую.

    AndreyMust19
    Да ну. Есть у меня dword, один поток его меняет, другой читает, нужна синхронизация? Кто-куда убегает? Ты будешь на все переменные по семафору навешивать?
     
  19. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    737061
    Просто автор не доконца сформулировал то что он хочет.

    Booster
    Работает на одном ядре. OpenMP работает с потоками. И скрывает много рутинной работы.
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Pavia
    Возможно, проверить эту технологию возможности не было. Однажды читал, что там можно распараллеливать вычисления потоками на ядрах, и если ядро одно то распараллеливания не происходит. Как понимаю это только одна из фич?