Каково состояние распараллеливания OCaml? - PullRequest
39 голосов
/ 06 июля 2011

Я заинтересован в использовании OCaml для проекта, однако я не уверен, где его возможности распараллеливания больше.Есть ли возможность передачи сообщений в OCaml?Может ли OCaml эффективно использовать более 1 процессора?

Большая часть того, что я прочитал по этому вопросу, была написана в 2002-2006 годах, и я не видел ничего более нового.

Спасибо!

Ответы [ 3 ]

22 голосов
/ 06 июля 2011

Этот выпуск 2009 года еженедельных новостей Caml ("CWN", дайджест интересных сообщений из списка caml ) показывает, что:

  • официальная партийная линия в темах и Ocaml не изменилась.Заметная цитата:

    (...) в целом, вся стандартная библиотека не является поточно-ориентированной.Возможно, это должно быть указано в документации по библиотеке потоков, но нет особого смысла документировать ее для стандартного библиотечного модуля.- X. Leroy

    (о том, как нити Ocaml все еще могут быть полезны, см. замечание самого преступника в другом вопросе о SO )

  • наиболее часто используемая парадигма для параллелизма - передача сообщений, и следует отметить X. Leroy OcamlMPI , обеспечивающий привязки для программирования в стиле SPMD против Стандарт MPI . Та же проблема CWN, на которую я указывал выше , содержит ссылки на примеры и множество других связанных проектов.

  • еще одно решение для передачи сообщений - JoCaml , пионер нового стиля одновременной связи, известного как join calculus .Обратите внимание, что он двоично совместим с компиляторами OCaml.

  • , что не помешало созданию среды выполнения, GC которой подходит для параллелизма, хотя: см. Обсуждение OCAML4MC в это другой вопрос CWN .

Также имеется:

  • Netmulticore - совместное использование нескольких процессовocaml значения через подключенную общую память.

  • CamlP3l - компилятор для параллельных программ Caml.

  • OCaml-Java - компилятор OCaml, который испускает байт-код Java


Однако я не следил за последними обсуждениями Ocaml и параллельного программирования. Я оставляю это CW , чтобы другие могли обновить то, что я упоминаю. Было бы здорово, если бы этот вопрос мог достичь того же уровня полноты, что и аналогичный для Haskell.

8 голосов
/ 06 июля 2011

В настоящее время среда выполнения OCaml не поддерживает параллельную работу на нескольких ядрах, поэтому один процесс OCaml не может использовать преимущества нескольких ядер. Это вряд ли изменится напрямую; направление, в котором разработчики OCaml больше всего заинтересованы в повышении параллелизма, похоже, позволяет нескольким средам выполнения OCaml работать параллельно в одном процессе; это позволит очень быстро передавать сообщения, но не позволит нескольким потокам работать параллельно в конфигурации с общей памятью. Основным зависанием является сборщик мусора; несколько лет назад команда экспериментировала с одновременным сбором мусора, но в однопоточном случае это привело к недопустимому замедлению.

Существует несколько проектов, а именно Functory и OCamlnet , которые обеспечивают многоядерный параллелизм с использованием нескольких процессов.

В целом, сообщество OCaml стремится отдавать предпочтение подходам передачи сообщений, которые могут осуществляться через границы процессов (как это делает OCamlnet), а не в однопроцессной многопоточности с разделяемой памятью. Если ваша программа может быть разделена на несколько процессов (многие могут!), Тогда да, вы можете эффективно использовать несколько процессоров.

1 голос
/ 17 марта 2014

BSMLlib предоставляет упрощенный интерфейс программирования для параллельного программирования данных в OCaml. Его выполнение сводится к передаче сообщений в стиле BSP, но оно является детерминированным и даже декларативным для подмножества OCaml. Ключевой концепцией является тип номинала, который соответствует вектору значений, по одному на процесс.

http://traclifo.univ -orleans.fr / BSML / http://fr.wikipedia.org/wiki/Bulk_Synchronous_Parallel_ML

Гаэтан Хайнс Университет Париж-Восточный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...