uzluga.ru
добавить свой файл
  1 ... 11 12 13 14

Имеются средства для распределения массивов по вычислительным узлам системы, а также для установления связи между потоками управления и данными, которые ими обрабатываются.

  • Поддерживаются как параллелизм по данным, так параллелизм задач.



  • Общая характеристика языков программы HPCS:…

    • Общая характеристика языков программы HPCS:…

    • Управление локальностью

    • Во всех трех языках обеспечивается доступ пользователей к виртуальным единицам локальности, называемых локалями (locale) в Chapel, регионами (region) в Fortress и участками (place) в X10.

    • Каждое выполнение программы привязывается к некоторому набору таких единиц локальности, которые отображаются операционной системой на физические сущности, такие как вычислительные узлы.

    • Это обеспечивает пользователей механизмом для (1) распределения коллекций данных по единицам локальности, (2) выравнивания различных коллекций данных и (3) установления связи между вычислительными потоками управления и данными, над которыми они работают.



    Общая характеристика языков программы HPCS:…

    • Общая характеристика языков программы HPCS:…

    • В Fortress и X10 обеспечиваются обширные библиотеки встроенных распределений, а также имеется возможность порождения новых, определяемых пользователями распределений данных путем декомпозиции пространства индексов или комбинирования распределений в разных измерениях.

    • В Chapel отсутствуют встроенные распределения, но обеспечивается обширная инфраструктура, которая поддерживает произвольные распределения данных, определяемые пользователями и являющиеся достаточно мощными для того, чтобы позволить работу с разреженными данными.



    Общая характеристика языков программы HPCS:…

    • Общая характеристика языков программы HPCS:…

    • Многопотоковость (распараллеливание циклов).

    • В Chapel различаются последовательные циклы «for» и параллельные циклы «forall», в которых итерации над элементами индексной области производятся без ограничений. За избежание зависимостей, приводящих к гонкам данных, отвечают пользователи.

    • В Fortress цикл «for» по умолчанию является параллельным, так что, если итерации цикл выполняются над распределенным измерением массива, эти итерации будут группироваться по процессорам в соответствии с распределениями данных.

    • В X10 различаются два вида параллельных циклов: цикл «foreach», который ограничен единственной единицей локальности, и цикл «ateach», позволяющий выполнять итерации над несколькими единицами локальности.



    Общая характеристика языков программы HPCS:



    Анонс – программа «Hello, world»

    • Анонс – программа «Hello, world»

    • Быстрое прототипирование

      • writeln(“Hello, world”);
    • Структурное программирование

      • def main() {
      • writeln(“Hello, world”);
      • }
    • Приложение

      • module HelloWorld {
      • def main() {
      • writeln(“Hello, world”);
      • }
      • }


    Общая характеристика:

    • Общая характеристика:

    • Синтаксис

      • Использование отдельных элементов C, C#, C++, Java, Ada, Perl, ...
    • Семантика

      • Императивный, блочно-структурированный, массивы
      • Объектно-ориентированное программирование (опционно)
      • Статический контроль типов


    Элементы языка - Диапазоны:

    • Элементы языка - Диапазоны:

    • Синтаксис

      • range-expr:
      • [low] .. [high] [by stride]
    • Семантика

      • Регулярная последовательность целых
      • stride > 0: low, low+stride, low+2*stride, ... ≤ high
      • stride < 0: high, high+stride, high+2*stride, ... ≥ low
    • Примеры

      • 1..6 by 2 // 1, 3, 5
      • 1..6 by -1 // 6, 5, 4, 3, 2, 1
      • 3.. by 3 // 3, 6, 9, 12, ...


    Элементы языка - Массивы:

    • Элементы языка - Массивы:

    • Синтаксис

      • array-type:
      • [ index-set-expr ] type
    • Семантика

      • Массив элементов, размер определяется множеством индексов
    • Примеры

      • var A: [1..3] int, // Массив из 3 элементов
      • B: [1..3, 1..5] real, // Двумерный массив
      • C: [1..3][1..5] real; // Массив массивов


    Элементы языка - Цикл:

    • Элементы языка - Цикл:

    • Синтаксис

      • for-loop:
      • for index-expr in iterator-expr { stmt-list }
    • Семантика

      • Выполнение тела цикла для каждого значения переменной цикла
    • Примеры

      • var A: [1..3] string = (“DO“, “RE“, “MI“);
      • for i in 1..3 do write(A(i)); // DOREMI
      • for a in A { a += “LA“; write(a); } // DOLARELAMILA


    Элементы языка - Условия:

    • Элементы языка - Условия:

    • Условие

      • if cond then computeA() else computeB();
    • Цикл while

      • while cond {
      • compute();
      • }
    • Выбор

      • select key {
      • when value1 do compute1();
      • when value2 do compute2();
      • otherwise compute3();
      • }


    Элементы языка - Функции:

    • Элементы языка - Функции:

    • Пример

      • def area(radius: real)
      • return 3.14 * radius**2;
      • writeln(area(2.0)); // 12.56
    • Пример функции с значениями по умолчанию

      • def writeCoord(x: real = 0.0, y: real = 0.0) {
      • writeln(“(“, x, “, “, y, “)“);
      • }
      • writeCoord(2.0); // (2.0, 0.0)
      • writeCoord(y=2.0); // (0.0, 2.0)


    Параллелизм задач: Оператор begin

    • Параллелизм задач: Оператор begin

    • Синтаксис

      • begin-stmt:
      • begin stmt
    • Семантика

      • Создает параллельную задачу для выполнения stmt
      • Выполнение программы-родителя не останавливается
    • Пример

      • begin writeln(“hello world”);
      • writeln(“good bye”);
      • Возможный вывод
      • (1) hello world (2) good bye
      • good bye hello world


    Параллелизм задач: Тип sync

    • Параллелизм задач: Тип sync

    • Синтаксис

      • sync-type:
      • sync type
    • Семантика

      • Переменные типа sync имеют два состояния – «full», «empty»
      • Запись в переменную типа sync переводит ее в состояние «full»
      • Чтение из переменной типа sync переводит в состояние «empty»
      • Примеры
      • (1) var lock$: sync bool; (2) var future$: sync real;
      • lock$ = true; begin future$ = compute();
      • critical(); computeSomethingElse();
      • lock$; useComputeResults(future$);


    Параллелизм задач: Оператор cobegin

    • Параллелизм задач: Оператор cobegin

    • Синтаксис

      • cobegin-stmt:
      • cobegin { stmt-list }
    • Семантика

      • Порождает параллельную задачу для каждого оператора stmt-list
      • Синхронизация при завершении блока
      • Пример
      • cobegin {
      • consumer(1);
      • consumer(2);
      • producer();
      • }


    Параллелизм задач: Оператор coforall

    • Параллелизм задач: Оператор coforall

    • Синтаксис

      • coforall-loop:
      • coforall index-expr in iterator-expr { stmt }
    • Семантика

      • Порождает параллельных задач для каждой итерации цикла
      • Синхронизация при завершении цикла
      • Пример (задача «производитель-потребитель»)
      • begin producer();
      • coforall i in 1..numConsumers {
      • consumer(i);
      • }


    Параллелизм задач: Оператор atomic

    • Параллелизм задач: Оператор atomic

    • Синтаксис

      • atomic-statement:
      • atomic stmt
    • Семантика

      • Выполнение stmt как атомарной операции
      • Пример
      • atomic A(i) = A(i) + 1;


    Массивы: Расширенные способы задания диапазонов

    • Массивы: Расширенные способы задания диапазонов

      • var Dense: domain(2) = [1..10, 1..20],
    • Strided: domain(2) = Dense by (2, 4),

    • Sparse: subdomain(Dense) = genIndices(),

    • Associative: domain(string) = readNames(),

    • Opaque: domain(opaque);



    Массивы: Расширенные операции

    • Массивы: Расширенные операции

      • forall (i,j) in Sparse {
      • DenseArr(i,j) += SparseArr(i,j);
      • }

































    << предыдущая страница