8.66 CO_REDUCE — Сведение значений на текущем наборе изображений
- Описание:
-
CO_REDUCEопределяет поэлементное сведение значения A по всем изображениям текущей группы. Чистая функция, переданная как OPERATION, используется для парного сведения значений A, передавая либо значения A разных изображений, либо результирующие значения такого сведения в качестве аргументов. Если A является массивом, вычитание выполняется поэлементно. Если RESULT_IMAGE присутствует, результирующие значения возвращаются в A только на указанном изображении, а значение A на других изображениях становится неопределённым. Если RESULT_IMAGE отсутствует, значение возвращается на всех изображениях. Если выполнение прошло успешно и STAT присутствует, ему присваивается значение ноль. Если выполнение завершилось ошибкой, STAT получает ненулевое значение, а ERRMSG, если присутствует, получает значение, описывающее произошедшую ошибку. - Стандарт:
-
Технические спецификации (TS) 18508 или более поздние
- Класс:
-
Подпрограмма коллективного вычисления
- Синтаксис:
-
CALL CO_REDUCE(A, OPERATION, [, RESULT_IMAGE, STAT, ERRMSG]) - Аргументы:
-
A является INTENT(INOUT)аргументом и должен быть неполиморфным. Если он является распределяемым, он должен быть распределён; если он является указателем, он должен быть связан. A должен иметь тот же тип и параметры типа на всех изображениях группы; если он является массивом, он должен иметь ту же форму на всех изображениях.OPERATION чистая функция с двумя скалярными нераспределяемыми аргументами, которые должны быть неполиморфными и иметь тот же тип и параметры типа, что и A. Функция должна возвращать нераспределяемую скалярную величину того же типа и параметров типа, что и A. Функция должна быть одинаковой на всех изображениях и с точки зрения аргументов быть математически коммутативной и ассоциативной. Обратите внимание, что OPERATION может не быть элементарной функцией, если она не является встроенной функцией. RESULT_IMAGE (необязательно) скалярное целочисленное выражение; если присутствует, оно должно иметь то же значение на всех изображениях и ссылаться на изображение текущей группы. STAT (необязательно) скалярная целочисленная переменная ERRMSG (необязательно) скалярная символьная переменная - Пример:
-
program test integer :: val val = this_image () call co_reduce (val, result_image=1, operation=myprod) if (this_image() == 1) then write(*,*) "Product value", val ! prints num_images() factorial end if contains pure function myprod(a, b) integer, value :: a, b integer :: myprod myprod = a * b end function myprod end program test - Примечание:
-
Хотя правила допускают в принципе встроенную функцию, ни одна из встроенных функций в стандарте не удовлетворяет критериям наличия специфической функции, которая принимает два аргумента одного и того же типа и возвращает этот тип в качестве результата.
- См. также:
CO_MIN— Минимальное значение на текущем наборе изображений,CO_MAX— Максимальное значение на текущем наборе изображений,CO_SUM— Сумма значений на текущем наборе изображений,CO_BROADCAST— Копирование значения на все изображения текущего набора изображений
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gfortran/CO_005fREDUCE.html