이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
arrayfun
GPU에서 배열의 각 요소에 함수 적용
설명
참고
함수 실행이 CPU가 아닌 GPU에서 발생한다는 점을 제외하면 이 함수는 MATLAB® 함수 arrayfun
과 유사하게 작동합니다. GPU에 아직 없는 모든 필수 데이터는 GPU 메모리로 이동합니다. 실행을 위해 전달된 MATLAB 함수는 컴파일되고 GPU에서 실행됩니다. 모든 출력 인수는 gpuArray
객체로 반환됩니다. gather
함수를 사용하여 gpuArray
데이터를 가져올 수 있습니다.
는 함수 B
= arrayfun(FUN
,A
)FUN
을 gpuArray
A
의 각 요소에 적용합니다. 그런 다음, arrayfun
은 FUN
의 출력값을 출력 gpuArray
B
로 결합합니다. B
는 A
와 크기가 같고 B(i,j,...) = FUN(A(i,j,...))
입니다. 입력 인수 FUN
은 하나의 입력 인수를 취하고 스칼라 값을 반환하는 MATLAB 함수에 대한 함수 핸들입니다. FUN
은 A
의 요소 수만큼 호출됩니다.
arrayfun
이 B
의 요소를 계산하는 순서를 사용자가 지정할 수 없으며, 또한 특정 순서로 수행된다고 믿어서도 안 됩니다.
예제
입력 인수
출력 인수
팁
GPU에서 특정 함수를 실행하기 위해 처음으로
arrayfun
을 호출할 때에는 GPU 실행을 위한 함수를 설정하기 위해 약간의 오버헤드 시간이 발생합니다. 동일한 함수를 사용한arrayfun
의 후속 호출은 더 빠르게 실행될 수 있습니다.입력 배열의 비한원소 차원은 서로 일치해야 합니다. 즉, 인수
A1,...,An
의 대응하는 차원은 서로 같거나 1이어야 합니다. 입력 배열의 차원이 한원소(즉,1
)이면arrayfun
은 한원소 확장을 사용합니다. 실제 계산에서 배열은 나머지 배열 중 가장 큰 차원과 일치하도록 한원소 차원을 따라 복제됩니다. 입력 배열의 차원이 한원소이고 다른 인수 배열의 대응하는 차원이 0인 경우,arrayfun
은 실제 계산에서 한원소 차원을0
으로 줄입니다.출력 배열
B
의 각 차원은 크기가 0이 아니라면 입력 배열에서 가장 큰 차원과 크기가 같아야 하고, 그렇지 않으면 0이어야 합니다. 다음 코드는 크기가1
인 차원이 다른 인수의 대응하는 차원과 크기가 일치하도록 확대 또는 축소되는 방식을 보여줍니다.R1 = rand(2,5,4,"gpuArray"); R2 = rand(2,1,4,3,"gpuArray"); R3 = rand(1,5,4,3,"gpuArray"); R = arrayfun(@(x,y,z)(x+y.*z),R1,R2,R3); size(R)
2 5 4 3
R1 = rand(2,2,0,4,"gpuArray"); R2 = rand(2,1,1,4,"gpuArray"); R = arrayfun(@plus,R1,R2); size(R)
2 2 0 4
arrayfun
이 지원하는 연산은 엄격하게 요소별로 수행되고, 각 요소의 각 계산은 다른 요소와 독립적으로 수행되기 때문에 다음과 같은 특정 제한이 적용됩니다.입력 배열과 출력 배열은 형태나 크기를 변경할 수 없습니다.
rand
와 같은 배열 생성 함수는 크기 사양을 지원하지 않습니다. 난수로 구성된 배열에는 각 요소에 대한 독립적인 스트림이 있습니다.
MATLAB의
arrayfun
과 마찬가지로 행렬 지수 거듭제곱, 곱셈 및 나눗셈(^
,*
,/
,\
)은 요소별 계산만 수행합니다.입력 배열이나 출력 배열의 크기나 형태를 변경하는 연산(
cat
,reshape
등)은 지원되지 않습니다.읽기 전용 인덱싱(
subsref
)은 지원되며, 중첩 함수 내에서 부모(바깥쪽) 함수 작업 공간의 변수에 대한 액세스도 지원됩니다. GPU에서 실행되기 전에 함수에 존재하는 변수를 인덱싱할 수 있습니다. 중첩 함수 내에서 이러한 변수의 할당이나subsasgn
인덱싱은 지원되지 않습니다. 지원되는 사용법에 대한 예제는 Stencil Operations on a GPU 항목을 참조하십시오.익명 함수는 부모 함수 작업 공간에 액세스할 수 없습니다.
지원되는 함수를 오버로드하는 것은 허용되지 않습니다.
코드는 스크립트를 호출할 수 없습니다.
할당되지 않은 계산 결과를 저장할
ans
변수가 없습니다. 모든 계산 결과를 변수에 명시적으로 할당하십시오.영구 변수 또는 전역 변수,
parfor
,spmd
,try
/catch
와 같은 언어 기능은 지원되지 않습니다.P 코드 파일에는
gpuArray
데이터를 갖는arrayfun
에 대한 호출을 포함할 수 없습니다.