arrayfun
GPU에서 배열의 각 요소에 함수 적용
설명
참고
함수 실행이 CPU가 아닌 GPU에서 발생한다는 점을 제외하면 이 함수는 MATLAB® 함수 arrayfun과 유사하게 작동합니다. GPU에 아직 없는 모든 필수 데이터는 GPU 메모리로 이동합니다. 실행을 위해 전달된 MATLAB 함수는 컴파일되고 GPU에서 실행됩니다. 모든 출력 인수는 gpuArray 객체로 반환됩니다.
는 함수 B = arrayfun(func,A)func를 gpuArray A의 각 요소에 적용한 다음 func의 출력값을 출력 gpuArray B로 결합합니다. B는 A와 크기가 같고 B(i,j,...) = func(A(i,j,...))입니다. 입력 인수 func는 하나의 입력 인수를 받고 스칼라를 반환하는 MATLAB 함수에 대한 함수 핸들입니다. func는 A의 요소 수만큼 호출됩니다.
예제
입력 인수
출력 인수
제한 사항
A1,...,An의 크기는 서로 일치하거나 호환되어야 합니다. 출력 배열B의 크기는A1,...,An의 크기에 따라 달라집니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오.arrayfun이 지원하는 연산은 엄격하게 요소별로 수행되고, 각 요소의 각 계산은 다른 요소와 독립적으로 수행되기 때문에 다음과 같은 특정 제한이 적용됩니다.입력 배열과 출력 배열은 형태나 크기를 변경할 수 없습니다.
rand와 같은 배열 생성 함수는 크기 사양을 지원하지 않습니다. 난수로 구성된 배열에는 각 요소에 대한 독립적인 스트림이 있습니다.
arrayfun이 출력 배열B의 요소를 계산하는 순서를 사용자가 지정할 수 없으며, 또한 특정 순서로 수행된다고 믿어서도 안 됩니다.MATLAB의
arrayfun과 마찬가지로 행렬 지수 거듭제곱, 곱셈 및 나눗셈(^,*,/,\)은 요소별 계산만 수행합니다.입력 배열이나 출력 배열의 크기나 형태를 변경하는 연산(
cat,reshape등)은 지원되지 않습니다.읽기 전용 인덱싱(
subsref)은 지원되며, 중첩 함수 내에서 부모(바깥쪽) 함수 작업 공간의 변수에 대한 액세스도 지원됩니다. GPU에서 실행되기 전에 함수에 존재하는 변수를 인덱싱할 수 있습니다. 중첩 함수 내에서 이러한 변수의 할당이나subsasgn인덱싱은 지원되지 않습니다. 지원되는 사용법에 대한 예제는 Stencil Operations on a GPU 항목을 참조하십시오.익명 함수는 부모 함수 작업 공간에 액세스할 수 없습니다.
지원되는 함수를 오버로드하는 것은 허용되지 않습니다.
코드는 스크립트를 호출할 수 없습니다.
할당되지 않은 계산 결과를 저장할
ans변수가 없습니다. 모든 계산 결과를 변수에 명시적으로 할당하십시오.영구 변수 또는 전역 변수,
parfor,spmd,try/catch와 같은 언어 기능은 지원되지 않습니다.
팁
GPU에서 특정 함수를 실행하기 위해 처음으로
arrayfun을 호출할 때에는 GPU 실행을 위한 함수를 설정하기 위해 약간의 오버헤드 시간이 발생합니다. 동일한 함수를 사용한arrayfun의 후속 호출은 더 빠르게 실행될 수 있습니다.