Параллельное машинное обучение
Эту статью , возможно, придется переписать, Википедии чтобы она соответствовала стандартам качества . ( октябрь 2017 г. ) |
Парадигмы | Мультипарадигмальность : функциональная , императивная , модульная , параллельная. |
---|---|
Семья | ML : Стандартный ML |
Впервые появился | 1991 год [1] |
Веб-сайт | смл |
Основные реализации | |
СМЛ/Нью-Джерси , [2] МЛтон , [3] Мантикора [4] | |
Под влиянием | |
ML , Стандартный ML |
Concurrent ML CML) — это высокоуровневый язык назначения функциональный многопарадигмальный общего ( программирования . Это диалект языка программирования ML, который является параллельным расширением стандартного языка ML , характеризующимся способностью создавать составные коммуникационные абстракции , которые являются первоклассными , а не встроенными в язык. Конструкция CML и его примитивные операции были приняты в нескольких других языках программирования, таких как GNU Guile , [5] Ракетка , [6] и Мантикора. [4]
Концепции [ править ]
Многие языки программирования, поддерживающие параллелизм, предлагают каналы связи , которые позволяют обмениваться значениями между процессами или потоками, одновременно работающими в системе. Связь, устанавливаемая между процессами, может осуществляться по определенному протоколу, требующему от программиста написания функций для установления требуемого шаблона связи. Между тем, система связи часто требует установления нескольких каналов, например, для нескольких серверов , а затем выбора между доступными каналами при появлении новых данных. Это можно сделать с помощью опроса , например, с помощью операции выбора в системах Unix.
Объединение протоколов, специфичных для приложения, и многосторонней связи может быть затруднено из-за необходимости внедрения опроса и проверки блокировки в уже существующем протоколе. Concurrent ML решает эту проблему, уменьшая связанность концепций программирования за счет введения синхронизируемых событий . [7] События — это первоклассная абстракция, которую можно использовать с операцией синхронизации (называемой sync
в CML и Racket), чтобы потенциально заблокировать, а затем получить некоторую ценность, полученную в результате связи (например, данные, передаваемые по каналу).
В CML события можно комбинировать или манипулировать ими с помощью ряда примитивных операций. Каждая примитивная операция создает новое событие, а не изменяет его на месте, что позволяет создавать составные события, которые представляют желаемый шаблон связи. Например, CML позволяет программисту объединять несколько подсобытий для создания составного события, которое затем может сделать недетерминированный выбор одного из подсобытий. Другой примитив создает новое событие, которое изменяет значение, полученное в результате синхронизации с исходным событием. Эти события воплощают шаблоны взаимодействия, которые на языке, отличном от CML, обычно обрабатываются с использованием цикла опроса или функции с обработчиками для каждого типа событий.
Привет, мир [ править ]
Вот «Привет, мир!» программа , которая печатает на системную консоль . Он порождает один поток с каналом для строк и другой поток, который печатает строку, полученную по каналу. Он использует стандарт ML Нью-Джерси (SML/NJ) и CML. (На платформах, отличных от Linux-x86, имя кучи будет отличаться; строку с «cml_test.x86-linux», возможно, придется изменить на что-то другое.)
cml_test.cm |
---|
Library
structure Hello
is
$cml/basis.cm
$cml/cml.cm
cml_test.sml
|
cml_test.sml |
structure Hello = struct
open CML
fun hello () = let
val c : string chan = channel ()
in
spawn (fn () => TextIO.print (recv c));
send (c, "Hello, world!\n");
exit ()
end
fun main (_, argv) =
RunCML.doit (fn () => ignore (spawn hello), NONE)
end
|
бить |
---|
$ ml-build cml_test.cm Hello.main
Standard ML of New Jersey v110.60 [built: Mon Nov 27 14:19:21 2006]
[scanning cml_test.cm]
[library $cml/basis.cm is stable]
[library $cml/cml.cm is stable]
[parsing (cml_test.cm):cml_test.sml]
[creating directory .cm/SKEL]
[library $cml/cml-internal.cm is stable]
[library $cml/core-cml.cm is stable]
[library $SMLNJ-BASIS/basis.cm is stable]
[compiling (cml_test.cm):cml_test.sml]
[creating directory .cm/GUID]
[creating directory .cm/x86-unix]
[code: 2170, data: 42, env: 2561 bytes]
[scanning 18518-export.cm]
[scanning (18518-export.cm):cml_test.cm]
[parsing (18518-export.cm):18518-export.sml]
[compiling (18518-export.cm):18518-export.sml]
[code: 309, data: 37, env: 42 bytes]
$ heap2exec cml_test.x86-linux cml_test
$ ./cml_test
Hello, world!
|
Внешние ссылки [ править ]
Ссылки [ править ]
- ^ Реппи, Джон Х. (июнь 1991 г.). CML: параллельный язык высшего порядка . ПЛДИ.
- ^ «Что такое стандартный ML штата Нью-Джерси?» . Проверено 5 апреля 2021 г.
- ^ «Параллельная реализация MLI» . Проверено 5 апреля 2021 г.
- ^ Jump up to: Перейти обратно: а б Флейт, Мэтью; Бергстрем, Ларс; Форд, Ник; Рейни, Майк; Реппи, Джон; Шоу, Адам; Сяо, Инци (май 2009 г.). «Программирование на Мантикоре, гетерогенном параллельном функциональном языке» (PDF) . Проверено 11 июля 2018 г.
- ^ Уинго, Энди (29 июня 2017 г.). «Новое параллельное машинное обучение» . Проверено 11 июля 2018 г.
- ^ Флэтт, Мэтью; Финдлер, Роберт Брюс (2004). «Абстракции безопасной синхронизации». Материалы конференции ACM SIGPLAN 2004 по проектированию и реализации языков программирования . Том. 39. стр. 47–58. дои : 10.1145/996841.996849 . ISBN 1581138075 . S2CID 5547460 .
- ^ Реппи, Джон Х. (1993). «Параллельное машинное обучение: дизайн, применение и семантика». Функциональное программирование, параллелизм, моделирование и автоматическое рассуждение . Конспекты лекций по информатике. Том. 693. стр. 165–198. CiteSeerX 10.1.1.50.7965 . дои : 10.1007/3-540-56883-2_10 . ISBN 978-3-540-56883-4 .