CWT의 CUDA 코드
이 예제에서는 생성된 CUDA® 코드를 사용하여 CWT(연속 웨이블릿 변환)를 수행하기 위해 MEX 파일을 생성하는 방법을 보여줍니다.
먼저 CUDA 지원 GPU와 NVCC 컴파일러가 있는지 확인하십시오. 구성이 적절한지 확인하려면 GPU 환경 검사 및 설정 앱 (GPU Coder) 항목을 참조하십시오.
GPU 코더 구성 객체를 만듭니다.
cfg = coder.gpuConfig("mex");
1,000Hz에서 100,000개 샘플의 신호를 생성합니다. 신호는 시간적으로 서로 겹치지 않는 지지 범위를 갖는 두 개의 코사인파로 구성됩니다.
t = 0:.001:(1e5*0.001)-0.001; x = cos(2*pi*32*t).*(t > 10 & t<=50)+ ... cos(2*pi*64*t).*(t >= 60 & t < 90)+ ... 0.2*randn(size(t));
단정밀도를 사용하도록 신호를 형변환합니다. GPU 계산은 단정밀도에서 더 효율적인 경우가 많습니다. 그러나 NVIDIA® GPU가 배정밀도를 지원하는 경우 배정밀도 코드를 생성할 수도 있습니다.
x = single(x);
GPU MEX 파일과 코드 생성 리포트를 생성합니다. MEX 파일 생성을 허용하려면 다음 입력 파라미터 3개의 속성(클래스, 크기, 실수/복소수 여부)을 지정해야 합니다.
coder.typeof(single(0),[1 1e5])
는single
형 실수 값을 포함하는 길이가 100,000인 행 벡터를 지정합니다.coder.typeof('c',[1 inf])
는 임의 길이의 문자형 배열을 지정합니다.coder.typeof(0)
은double
형 실수 값을 지정합니다.
sig = coder.typeof(single(0),[1 1e5]); wav = coder.typeof('c',[1 inf]); sfrq = coder.typeof(0); codegen cwt -config cfg -args {sig,wav,sfrq} -report
Code generation successful: View report
-report 플래그는 선택 사항입니다. -report
를 사용하면 코드 생성 리포트가 생성됩니다. 리포트의 요약 탭에서 GPU 코드 메트릭 링크를 찾을 수 있습니다. 이 링크에서는 생성된 CUDA 커널의 개수 및 할당된 메모리 양과 같은 자세한 정보를 제공합니다.
데이터에 대해 MEX 파일을 실행하고 스케일로그램을 플로팅합니다. 플롯이 서로 겹치지 않는 두 코사인파와 일치하는지 확인합니다.
[cfs,f] = cwt_mex(x,'morse',1e3); image("XData",t,"YData",f,"CData",abs(cfs),"CDataMapping","scaled") set(gca,"YScale","log") axis tight xlabel("Time (Seconds)") ylabel("Frequency (Hz)") title("Scalogram of Two-Tone Signal")
_
mex
를 추가하지 않고 위의 CWT 명령을 실행합니다. MATLAB® 스케일로그램과 GPU MEX 스케일로그램이 동일한지 확인합니다.
[cfs2,f2] = cwt(x,'morse',1e3);
max(abs(cfs2(:)-cfs(:)))
ans = single
7.3380e-07