CO_SUM — 현재 팀 이미지 집합에서의 합

CO_SUM — 현재 팀 이미지 집합에서의 합

여러 이미지가 나눠 들고 있는 값을 한 데 모아 합을 구해야 할 때가 coarray 병렬 코드에서 자주 나와요. CO_SUM은 현재 팀에 속한 모든 이미지에서 A의 각 원소를 더해 합을 구하는 집합적 서브루틴이에요.

출처: gfortran 공식 문서 - CO_SUM

본문

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 — 값을 현재 이미지 집합 전체로 복사