CO_MIN — 현재 팀 이미지 집합에서의 최솟값
CO_MIN — 현재 팀 이미지 집합에서의 최솟값
병렬 실행(Fortran의 coarrays)에서 여러 이미지가 각자 다른 값을 들고 있을 때, 그중 최솟값을 모으고 싶은 경우가 있어요. CO_MIN은 현재 팀에 속한 모든 이미지에서 A의 원소별 최솟값을 구하는 집합적 서브루틴(colletive subroutine)이에요.
본문
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 — 값을 현재 이미지 집합 전체로 복사