CO_SUM — 현재 팀 이미지 집합에서의 합
CO_SUM — 현재 팀 이미지 집합에서의 합
여러 이미지가 나눠 들고 있는 값을 한 데 모아 합을 구해야 할 때가 coarray 병렬 코드에서 자주 나와요. CO_SUM은 현재 팀에 속한 모든 이미지에서 A의 각 원소를 더해 합을 구하는 집합적 서브루틴이에요.
본문
CALL CO_SUM(A [, RESULT_IMAGE, STAT, ERRMSG])
설명(Description)
CO_SUM은 현재 팀의 모든 이미지에서 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_sum (val, result_image=1)
if (this_image() == 1) then
write(*,*) "The sum is ", val ! prints (n**2 + n)/2,
! with n = num_images()
end if
end program test
각 이미지가 자기 번호(1, 2, ..., n)를 담고 있을 때 그 합은 n(n+1)/2, 즉 (n**2 + n)/2가 돼요.
표준(Standard)
Technical Specification (TS) 18508 이상
같이 보기
CO_MAX — 현재 이미지 집합에서의 최댓값, CO_MIN — 현재 이미지 집합에서의 최솟값, CO_REDUCE — 현재 이미지 집합에서의 리덕션, CO_BROADCAST — 값을 현재 이미지 집합 전체로 복사