Подтвердить что ты не робот

Каково состояние возможностей параллелизма OCaml?

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

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

Спасибо!

4b9b3361

Ответ 1

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

Существует также:

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

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

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


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

Ответ 2

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

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

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

Ответ 3

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

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

Гаэтан Хейнс Университет Париж-Эст