Pull to refresh
130.75
Rating
Microsoft
Microsoft — мировой лидер в области ПО и ИТ-услуг

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

Microsoft corporate blog
На прошлой неделе я опубликовал заметку о выпуске Microsoft'ом математической библиотеки для работы в облаке.

(Ссылка на сам продукт)

Мне поступило много вопросов о том, зачем нужна эта библиотека, чем она отличается от множества других и как она работает и я решил написать об этом подробнее и привести больше примеров. В этой публикации я приведу пересказ ранее опубликованных статей моим коллегой Ронни Хугервертом и простой пример. В следующих постах я планирую привести более сложные примеры работы 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#, который загружает в память распределенную матрицу, параллельно вычисляет ее собственные значения и выводит на печать двойную норму и обусловленность матрицы.

var A = Distributed.IO.Loader.LoadData(csvReader);
var S = Decompositions.SvdValues(A);
var s0 = ArrayMath.Max(S);
var s1 = ArrayMath.Min(S);
Console.WriteLine("Norm: {0}, Condition Number: {1}", s0, s0 / s1);

В следующих публикациях я приведу примеры использования библиотеки.
Tags:HPCCloudNumeric librariesMathematicMPI
Hubs: Microsoft corporate blog
Total votes 25: ↑18 and ↓7+11
Views4.8K

Popular right now