CO_MIN — 현재 팀 이미지 집합에서의 최솟값

CO_MIN — 현재 팀 이미지 집합에서의 최솟값

병렬 실행(Fortran의 coarrays)에서 여러 이미지가 각자 다른 값을 들고 있을 때, 그중 최솟값을 모으고 싶은 경우가 있어요. CO_MIN은 현재 팀에 속한 모든 이미지에서 A의 원소별 최솟값을 구하는 집합적 서브루틴(colletive subroutine)이에요.

출처: gfortran 공식 문서 - CO_MIN

본문

CALL CO_MIN(A [, RESULT_IMAGE, STAT, ERRMSG])

설명(Description)

CO_MIN은 현재 팀의 모든 이미지에서 A의 원소별 최솟값을 결정해요. RESULT_IMAGE가 주어지면 최솟값은 지정된 이미지의 A에만 돌아가고, 다른 이미지의 A 값은 정의되지 않은 상태가 돼요. RESULT_IMAGE가 없으면 모든 이미지에 값이 돌아가요. 실행이 성공하고 STAT가 있으면 0이 할당되고, 실패하면 0이 아닌 값이 할당되며 ERRMSG가 있으면 발생한 오류를 설명하는 값이 할당돼요.

분류(Class)

집합적 서브루틴(Collective subroutine)

인자(Arguments)

  • A — 정수·실수·문자 변수여야 하며, 팀의 모든 이미지에서 같은 타입과 타입 파라미터를 가져야 해요.
  • RESULT_IMAGE — (선택) 스칼라 정수 표현식이에요. 주어지면 모든 이미지에서 같은 값을 가져야 하고 현재 팀의 이미지를 가리켜야 해요.
  • STAT — (선택) 스칼라 정수 변수예요.
  • ERRMSG — (선택) 스칼라 문자 변수예요.

예제

program test
  integer :: val
  val = this_image ()
  call co_min (val, result_image=1)
  if (this_image() == 1) then
    write(*,*) "Minimal value", val  ! prints 1
  end if
end program test

1번 이미지에만 최솟값이 기록되므로, 값이 0일 때 this_image() == 1인 이미지가 "Minimal value 1"을 출력해요.

표준(Standard)

Technical Specification (TS) 18508 이상

같이 보기

CO_MAX — 현재 이미지 집합에서의 최댓값, CO_SUM — 현재 이미지 집합에서의 합, CO_REDUCE — 현재 이미지 집합에서의 리덕션, CO_BROADCAST — 값을 현재 이미지 집합 전체로 복사