주요 콘텐츠

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

참고 항목

|