Main Content

CWT의 CUDA 코드

이 예제에서는 생성된 CUDA® 코드를 사용하여 CWT(연속 웨이블릿 변환)를 수행하기 위해 MEX 파일을 생성하는 방법을 보여줍니다.

먼저 CUDA 지원 GPU와 NVCC 컴파일러가 있는지 확인하십시오. 구성이 적절한지 확인하려면 The GPU Environment Check and Setup App (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

참고 항목

|