`CO_MAX` — 현재 이미지 집합의 최댓값
CO_MAX — 현재 이미지 집합의 최댓값
코어레이(coarray) 병렬 프로그램에서 각 이미지가 가진 값 중 최댓값을 모두가 공유하고 싶을 때가 있어요. CO_MAX는 현재 팀의 모든 이미지에 걸쳐 A의 최댓값을 원소별로 결정해 주는 집합적 서브루틴이에요.
본문
시그니처
CALL CO_MAX(A [, RESULT_IMAGE, STAT, ERRMSG])
설명
CO_MAX는 현재 팀의 모든 이미지에 있는 A의 최댓값을 원소별로 결정해요. RESULT_IMAGE가 있으면 최댓값은 지정된 이미지에서만 A에 돌아가고, 다른 이미지의 A 값은 정의되지 않는(undefined) 상태가 돼요. RESULT_IMAGE가 없으면 값은 모든 이미지에서 반환됩니다. 실행이 성공하고 STAT가 있으면 STAT에 0이 할당되고, 실행이 실패하면 STAT에 0이 아닌 값이, ERRMSG가 있으면 오류 설명 값이 할당돼요.
분류
집합적 서브루틴(Collective subroutine)
인자
A— 정수·실수·문자 변수여야 하고, 팀의 모든 이미지에서 같은 타입과 타입 매개변수를 가져야 해요.RESULT_IMAGE— (선택) 스칼라 정수식이에요. 있으면 모든 이미지에서 같은 값을 가져야 하고, 현재 팀의 한 이미지를 가리켜야 해요.STAT— (선택) 스칼라 정수 변수예요.ERRMSG— (선택) 스칼라 문자 변수예요.
예제
program test
integer :: val
val = this_image ()
call co_max (val, result_image=1)
if (this_image() == 1) then
write(*,*) "Maximal value", val ! prints num_images()
end if
end program test
각 이미지가 자기 이미지 번호를 val에 두고, co_max로 최댓값(num_images())을 구해 1번 이미지에서만 출력하는 예시예요.
표준
기술 사양(TS) 18508 이상
참고
CO_MIN— 현재 이미지 집합의 최솟값CO_SUM— 현재 이미지 집합의 합CO_REDUCE— 현재 이미지 집합의 축소CO_BROADCAST— 현재 이미지 집합에 값 복사