`CO_MAX` — 현재 이미지 집합의 최댓값

CO_MAX — 현재 이미지 집합의 최댓값

코어레이(coarray) 병렬 프로그램에서 각 이미지가 가진 값 중 최댓값을 모두가 공유하고 싶을 때가 있어요. CO_MAX는 현재 팀의 모든 이미지에 걸쳐 A의 최댓값을 원소별로 결정해 주는 집합적 서브루틴이에요.

출처: gfortran 문서 — CO_MAX

본문

시그니처

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 — 현재 이미지 집합에 값 복사