Parallel Computing
Julia поддерживает эти четыре категории конкурентного и параллельного программирования:
Асинхронные "задачи", или корутины:
Задачи Julia позволяют приостанавливать и возобновлять вычисления для ввода-вывода, обработки событий, процессов производитель-потребитель и подобных паттернов. Задачи могут синхронизироваться через операции, такие как
wait
иfetch
, и общаться черезChannel
s. Хотя строго говоря, это не параллельные вычисления сами по себе, Julia позволяет вам планироватьTask
s на нескольких потоках.Многопоточность:
Julia's multi-threading предоставляет возможность планировать задачи одновременно на более чем одном потоке или ядре ЦП, разделяя память. Это обычно самый простой способ добиться параллелизма на своем ПК или на одном большом многоядерном сервере. Многопоточность Julia является составной. Когда одна многопоточная функция вызывает другую многопоточную функцию, Julia будет планировать все потоки глобально на доступных ресурсах, не превышая лимиты.
Распределенные вычисления:
Распределенные вычисления запускают несколько процессов Julia с отдельными пространствами памяти. Эти процессы могут находиться на одном компьютере или на нескольких компьютерах. Стандартная библиотека
Distributed
предоставляет возможность удаленного выполнения функции Julia. С помощью этого базового строительного блока можно создать множество различных абстракций распределенных вычислений. Пакеты, такие какDistributedArrays.jl
, являются примером такой абстракции. С другой стороны, пакеты, такие какMPI.jl
иElemental.jl
, предоставляют доступ к существующей экосистеме библиотек MPI.Вычисления на GPU:
Компилятор Julia для GPU предоставляет возможность запускать код Julia нативно на GPU. Существует богатая экосистема пакетов Julia, нацеленных на GPU. Веб-сайт JuliaGPU.org предоставляет список возможностей, поддерживаемых GPU, связанных пакетов и документации.