Параллельные вычисления

Julia поддерживает следующие четыре категории параллельного программирования:

  1. Асинхронные «задачи» или сопрограммы.

    Задачи в Julia позволяют приостанавливать и возобновлять вычисления, связанные с вводом-выводом, обработкой событий, процессами «производитель — потребитель» и аналогичными шаблонами. Задачи могут синхронизироваться посредством таких операций, как wait и fetch, и обмениваться данными посредством каналов Channel. Хотя, строго говоря, это само по себе не является параллельным вычислением, Julia позволяет планировать выполнение объектов Task в нескольких потоках.

  2. Многопоточность.

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

  3. Распределенные вычисления.

    Распределенные вычисления обеспечивают выполнение нескольких процессов Julia с отдельными пространствами памяти. Процессы могут запускаться на одном компьютере или на нескольких. Стандартная библиотека Distributed дает возможность удаленного выполнения функции Julia. Опираясь на этот стандартный блок, можно строить множество различных абстракций распределенных вычислений. Примером такой абстракции может служить пакет DistributedArrays.jl. В свою очередь, такие пакеты, как MPI.jl и Elemental.jl, обеспечивают доступ к существующей экосистеме библиотек MPI.

  4. Вычисления на GPU:

    Компилятор GPU Julia дает возможность выполнять код Julia как машинный на GPU. Существует развитая экосистема пакетов Julia, предназначенных для GPU. На веб-сайте JuliaGPU.org приводится список возможностей, поддерживаемых GPU, связанных пакетов и документации.