Jump to content

Атеджи ПХ

Атеджи ПХ
Парадигма -ориентированное объектно исчисление Пи
Дисциплина набора текста сильный , статичный
Лицензия коммерческая, бесплатная 30-дневная пробная версия Premium и бесплатная версия
Веб-сайт www.Ateji.com
Под влиянием
Ява

Ateji PX — это объектно-ориентированное расширение языка программирования для Java . Он предназначен для облегчения параллельных вычислений на многоядерных процессорах , графических процессорах , Grid и Cloud.

Ateji PX может быть интегрирован с Eclipse IDE , требует минимального изучения дополнительных параллельных конструкций и не меняет процесс разработки.

Примеры кода [ править ]

Привет, мир [ править ]

public class HelloWorld {
  public static void main(String[] args) {
    [
      || System.out.println("Hello");
      || System.out.println("World");
    ]
  }
}

Каждый || символ представляет параллельную ветвь. Запуск этой программы выведет либо

Hello
World

или

World
Hello

в зависимости от того, как запланированы параллельные ветки.

Параллелизм данных [ править ]

[
  || (int i : array.length) array[i]++;
]

Количественная оценка (int i : N) создает одну параллельную ветвь для каждого значения i. Эффект этого кода заключается в увеличении всех элементов array параллельно. Этот код эквивалентен

[
  || array[0]++;
  || array[1]++;
  ...
  || array[array.length-1]++;
]

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

[
|| (int i:N, int j:N, if i+j<N) matrix[i][j]++;
]

Код, который выполняет аналогичную и обычно небольшую операцию с большой коллекцией элементов, называется параллелизмом данных и часто встречается в высокопроизводительных научных приложениях. Типичным представителем языков с параллельными данными для экосистем C/C++ или Fortran является OpenMP .

Функции параллелизма данных также могут быть реализованы библиотеками с использованием специальных структур данных, таких как параллельные массивы .

Параллелизм задач [ править ]

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

int fib(int n) {
  if (n <= 1) return 1;
  int fib1, fib2;
  // recursively create parallel branches
  [
    || fib1 = fib(n-1);
    || fib2 = fib(n-2);
  ]
  return fib1 + fib2;
}

Параллелизм задач реализован в таких языках, как Cilk , и в библиотеках, подобных fork/join пара системных вызовов Unix.

Передача сообщений [ править ]

Параллельные ветки имеют два способа взаимодействия; либо путем одновременного чтения и записи общих переменных, либо путем отправки явных сообщений. Операторы ! и ? соответственно отправлять и получать сообщения по каналу.

В этом примере две параллельные ветки взаимодействуют посредством явной передачи сообщений:

Chan<String> chan = new Chan<String>();
[
  // branch 1 sends a value over the channel
  || chan ! "Hello";

  // branch 2 receives a value from the channel and prints it
  || chan ? s; System.out.println(s);
]

Поток данных [ править ]

Программу называют потоком данных , когда вычисления инициируются и синхронизируются наличием данных в потоке. Типичным примером является сумматор: он имеет два входа, один выход, и когда два входа готовы, он отправляет их сумму на выход.

void adder(Chan<Integer> in1, Chan<Integer> in2, Chan<Integer> out) {
  for (;;) {
    int value1, value2;
    [ in1 ? value1; || in2 ? value2; ];
    out ! value1 + value2;
}}

Обратите внимание на параллельное чтение [ in1 ? value1; || in2 ? value2; ]. Это означает, что два входных значения могут идти в любом порядке. Без этого код может зайти в тупик, если значения поступят в неправильном порядке. Это показывает, что параллельные примитивы в языке программирования касаются не только производительности, но и поведения программ.

Сумматор сам по себе ничего не делает, так как реагирует на входные данные. Его необходимо поместить в контекст, в котором другие части передают входные значения и считывают выходные значения. Это можно выразить, объединив все части в большой параллельный блок:

[
  || source(c1); // generates values on c1
  || source(c2); // generates values on c2
  || adder(c1, c2, c3);
  || sink(c3); // read values from c3
]

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

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: b47818620dadfc21b23cd484ef1a0574__1675508520
URL1:https://arc.ask3.ru/arc/aa/b4/74/b47818620dadfc21b23cd484ef1a0574.html
Заголовок, (Title) документа по адресу, URL1:
Ateji PX - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)