GPU에서 복소수 사용하기
GPU에서 복소수를 사용하기 위한 조건
GPU에서 실행 중인 함수의 출력값이 복소수일 가능성이 있는 경우, complex
함수를 사용하여 이 함수의 입력 인수를 명시적으로 복소수로 지정해야 합니다. 이는 gpuArray
객체에 대해 직접적으로 연산을 수행하는 함수와 arrayfun
을 사용하여 gpuArray
데이터에 대해 연산을 수행하는 함수에 적용됩니다.
음수 요소가 포함된 gpuArray
를 만드는 경우 G = gpuArray(complex(x))
를 사용하면 sqrt(G)
를 성공적으로 실행할 수 있습니다. 예를 들면 다음과 같습니다.
x = [-1 0 1]; G = gpuArray(complex(x)); rootG = sqrt(G)
0.0000 + 1.0000i 0.0000 + 0.0000i 1.0000 + 0.0000i
결과가 복소수 데이터로 구성된 gpuArray
인데 모든 허수부가 0인 경우, 이러한 허수부는 유지되고 데이터는 복소수 상태를 유지합니다. 이로 인해, 예를 들어, sort
와 isreal
을 사용하여 데이터에 대해 연산을 수행할 때 불필요한 계산이 수행될 수 있습니다.
arrayfun
을 사용하는 경우 함수 입력값은 arrayfun
호출 내에 복소수로 지정될 수 있습니다. 예를 들면 다음과 같습니다.
x = [-1 0 1]; G = gpuArray(x); A = arrayfun(@(p) sqrt(complex(p)), G)
0.0000 + 1.0000i 0.0000 + 0.0000i 1.0000 + 0.0000i
복소수 데이터를 반환하는 함수
다음 표에는 복소수 데이터를 반환할 수도 있는 함수와 출력값이 실수로 유지되는 입력 범위가 나열되어 있습니다.
함수 | 실수 출력값이 가능한 입력 범위 |
---|---|
acos(x) | abs(x) <= 1 |
acosh(x) | x >= 1 |
acoth(x) | abs(x) >= 1 |
acsc(x) | abs(x) >= 1 |
asec(x) | abs(x) >= 1 |
asech(x) | 0 <= x <= 1 |
asin(x) | abs(x) <= 1 |
atanh(x) | abs(x) <= 1 |
log(x) | x >= 0 |
log1p(x) | x >= -1 |
log10(x) | x >= 0 |
log2(x) | x >= 0 |
power(x,y) | x >= 0 |
reallog(x) | x >= 0 |
realsqrt(x) | x >= 0 |
sqrt(x) | x >= 0 |