`CO_BROADCAST` — 현재 이미지 집합에 값 복사

CO_BROADCAST — 현재 이미지 집합에 값 복사

코어레이(coarray) 프로그래밍에서 한 이미지가 가진 값을 다른 모든 이미지에 똑같이 전달해야 할 때가 있어요. CO_BROADCAST는 지정한 이미지의 값을 현재 팀의 모든 이미지로 복사해 주는 집합적 서브루틴이에요.

출처: gfortran 문서 — CO_BROADCAST

본문

시그니처

CALL CO_BROADCAST(A, SOURCE_IMAGE [, STAT, ERRMSG])

설명

CO_BROADCAST는 이미지 인덱스가 SOURCE_IMAGE인 이미지의 인자 A 값을, 현재 팀의 모든 이미지로 복사해요. A는 내장 대입(intrinsic assignment)을 통해 정의됩니다. 실행이 성공하고 STAT가 있으면 STAT에 0이 할당돼요. 실행이 실패하면 STAT에 0이 아닌 값이 할당되고, ERRMSG가 있으면 발생한 오류를 설명하는 값이 할당돼요.

분류

집합적 서브루틴(Collective subroutine)

인자

  • AINTENT(INOUT) 인자로, 현재 팀의 모든 이미지에서 같은 동적 타입과 타입 매개변수를 가져야 해요. 배열이면 모든 이미지에서 같은 모양이어야 합니다.
  • SOURCE_IMAGE — 스칼라 정수식이에요. 모든 이미지에서 같은 값을 가져야 하고, 현재 팀의 한 이미지를 가리켜야 해요.
  • STAT — (선택) 스칼라 정수 변수예요.
  • ERRMSG — (선택) 스칼라 문자 변수예요.

예제

program test
  integer :: val(3)
  if (this_image() == 1) then
    val = [1, 5, 3]
  end if
  call co_broadcast (val, source_image=1)
  print *, this_image, ":", val
end program test

1번 이미지에서만 val을 설정하고, co_broadcast로 모든 이미지에 그 값을 복사한 뒤 각 이미지가 출력하는 흐름이에요.

표준

기술 사양(TS) 18508 이상

참고

  • CO_MAX — 현재 이미지 집합의 최댓값
  • CO_MIN — 현재 이미지 집합의 최솟값
  • CO_SUM — 현재 이미지 집합의 합
  • CO_REDUCE — 현재 이미지 집합의 축소