Cloud Numerics – что это такое?

Зачем нужна эта библиотека, чем она отличается от множества других и как она работает? В этой публикации приведен пересказ ранее опубликованных статей Ронни Хугерверта и простой пример.

Итак, “Cloud Numerics” является новым Фреймворком для программирования .NET предназначенным для выполнения интенсивных вычислений над большими распределенными массивами данных.

Этот Фреймворк состоит из:

  1. Обычные и распределенные контейнеры для массивов данных
  2. Системы позволяющей манипулировать распределением данных на узлах кластера в облаке и выполнять над ними параллельные вычисления
  3. Широкий набор библиотечных математических функций, которые могут выполняться на множестве узлов кластера одновременно
  4. Набор утилит упрощающих развертку и выполнение приложений построенных на Cloud Numerics в среде Windows Azure

Системы использующие подход Map/Reduce (такие уак Hadoop) были разработаны для того, чтобы значительно упростить обработку больших массивов данных. Эти системы предоставляют очень простую модель программирования и подсистему работы программ, скрывающую детали масштабирования на огромных кластерах, состоящих из стандартных вычислительных узлов. Эта упрощенная модель адекватна для выполнения реляционных операций, алгоритмов кластеризации и machine learning над данными, достаточно большими, чтобы не поместиться в основную память всех узлов кластера.

Тем не менее, эти подходы не всегда оптимальны для случаев, когда данные могут вместиться в оперативную память узлов кластера. Плюс к этому, по природе интерактивные алгоритмы, или же алгоритмы наиболее просто формализуемые в терминах операций над массивами, довольно тяжело выражаются программными моделями подобными Map/Reduce. В конце концов, динамично развивающаяся экосистема Hadoop, в рамках которой было разработано множество библиотек для анализа данных и machine learning подобных Mahout, Pegasus и HAMA не использует потенциал существующих развитых масштабируемых библиотек линейной алгебры подобных PBLAS и ScaLAPACK, библиотек, которые оптимизировались и выверялись годами.

В тоже время, такие библиотеки как Message Passing Interface или MPI идеально подходят для эффективной обработки данных размещаемых в оперативной памяти на больших кластерах но являются чрезвычайно трудно программируемыми. Пользователь такой библиотеки должен очень тщательно следить за реализацией алгоритмов передачи данных между узлами кластера и различными параллельными процессами работающими внутри них. Если это делается не достаточно тщательно, то результатом разработки таких ”высоко производительных программ” может быть чрезвычайно низкая масштабируемость и большая вероятность непредсказуемых сбоев, зависаний и аварийных завершений восстановление после которых невозможно.

Абстракции и интерфейсы предоставляемые “Cloud Numerics” не содержат каких либо низкоуровневых конструкций для организации параллельных вычислений. Параллелизм реализован неявно и скрыт от пользователя за операциями над типами данных, такими как распределенные матрицы. Скрытые параллельные операции приводят к простой и эффективной работе кода и используют существующие библиотеки BLAS и ScaLAPACK.

Пример “Hello World”

Для краткой иллюстрации параллельной программной модели “Cloud Numerics” приведу пример на C#, который загружает в память распределенную матрицу, параллельно вычисляет ее собственные значения и выводит на печать двойную норму и обусловленность матрицы.