Параллельное программирование Common Lisp

я параллельно реализовать свой алгоритм фильтрации частиц в Common Lisp. Фильтрацию частиц и отбор проб можно распараллелить, и я хочу сделать это для моей 4-ядерной машины. У меня вопрос, возможно ли параллельное программирование в CL или нет, и если это возможно, есть ли какие-нибудь хорошие показания, руководства по началу работы с параллельными вычислениями в CL.

25
задан Samuel Edwin Ward 22 October 2014 в 15:01
поделиться

2 ответа

Определенно возможно!

Проект Bordeaux Threads предоставляет потоковые примитивы для ряда реализаций; Я бы предложил использовать его вместо специфичных для реализации примитивов SBCL (особенно если вы не используете SBCL!).

Тем не менее, примитивы потока, предоставляемые bt, довольно примитивны. Я использовал и наслаждался Eager Future2 , который основывается на bt для обеспечения функций параллелизма с использованием фьючерсов. Вы можете создавать фьючерсы, которые рассчитываются лениво, с нетерпением (немедленно) или умозрительно. Спекулятивные фьючерсы вычисляются пулом потоков, размер которого можно настраивать.

Я начал небольшой проект по предоставлению параллельных версий функций CL с использованием EF2, но пока это всего лишь три функции, поэтому он никому не будет полезен. Я, конечно, приветствую, чтобы другие программисты взламывали его и отправляли запросы на извлечение, и я надеюсь, что в будущем я буду работать над ним еще больше.

Есть много других библиотек , перечисленных в Cliki , которые я не пробовал сам.

Что касается учебных пособий, я не знаю ни одного, но предоставляемые возможности параллелизма встречаются и в других языках, и хорошие алгоритмы и практики обычно не зависят от языка.

Если вы заинтересованы в чтении книги, я рекомендую Язык программирования Concurrent C . Авторы описывают новый язык программирования, основанный на C, с параллелизмом как особенностью языка. Конечно, из-за природы CL, было бы возможно реализовать эти функции, не прибегая к созданию нового компилятора. По моему мнению, в книге представлены отличные концепции параллелизма и рассматриваются многие проблемы, с которыми вы можете столкнуться или не учесть их при написании параллельных программ.

26
ответ дан 28 November 2019 в 21:13
поделиться

Проверьте нити Бордо, если вы ищете единый интерфейс в стиле POSIX-потоков с многопоточными примитивами для разных Lisps.

Если бы я искал надежную бесплатную реализацию Lisp, я бы начал с CCL, а затем попробовал SBCL. Я использую CCL для почти всех моих испытаний, а SBCL и LispWorks для остальных.

Библиотека фьючерсов Sedach должна обеспечивать интерфейс более высокого уровня. В справочном каталоге SBCL есть и другие материалы от разных пользователей.

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

4
ответ дан 28 November 2019 в 21:13
поделиться