2013-08-19 36 views
0

FFTW를 사용하여 생성 된 전체 프로젝트가 있습니다. cuFFT 사용으로 전환하고 싶습니다. cuFFT에는 "호환 모드"가 있음을 이해합니다. 하지만 이것이 정확히 어떻게 작동합니까? The cuFFT manual는 말한다 :cuFFT에서 FFTW 호환 모드 사용

응용 프로그램이 FFTW3 인터페이스를 사용하여 작업을 한 후, 사용자가 에와 GPU에서 데이터를 이동하고 최선의 FFTW 변환 가이드에 설명 된 루틴을 사용하여 자신의 코드를 수정할 수 있습니다 공연.

이 실제로 내 개별 함수 호출을 변경해야 의미 하는가? 예를 들어, fftw_plan_dft_1d() 대신 cufftPlan1d()으로 전화하십시오.

또한 데이터 유형을 변경해야합니까?

내 모든 코드를 다시 작성해야하는거야 경우
fftw_complex *inputData; // fftw data storage gets replaced.. 
    cufft_complex *inputData; // ... by cufft data storage? 

    fftw_plan forwardFFT;  // fftw plan gets replaced... 
    cufftHandle forwardFFT;  // ... by cufft plan? 

, cufftSetCompatabilityMode(.)의 요점은 무엇입니까?

답변

3

은 아마 당신이 원하는 것은 cuFFTW interface to cuFFT입니다. 아마 당신이 염두에 두었던 것과 거의 흡사하기 때문에이 문서를 읽으시기 바랍니다. 이렇게하면 최소한의 변경 사항으로 FFTW 응용 프로그램에서 cuFFT를 사용할 수 있습니다.

  • 당신이 (가) 대신 같은 fftw3/fftw3f로 이중/단 정밀도 라이브러리와 링크의 cufftw.h
  • 와 파일 fftw3.h을 포함 교체하는 것이 좋습니다 : 문서에 나타난 바와 같이, 두 단계 requred이 있어야한다 그냥 cuFFTW 호환 인터페이스를 사용하는 경우 라이브러리, 당신은 발췌 다큐먼트 항목에 대해서는 모두 CUFFT 및 cUFFTW 라이브러리

와 링크 (명시 적으로 데이터를 이동)하는 단계가 필요하지 않습니다. 그러나 이러한 방식으로 최대 성능을 얻지 못할 수도 있습니다. 최대의 성능을 얻으려면 데이터 이동을 명시 적으로 관리 할 수 ​​있도록 cuFFT를 네이티브 방식으로 사용해야 할 수 있습니다. 여부에 상관없이이 응용 프로그램의 특정 구조에 따라 달라집니다 중요하다 (얼마나 많은 FFT의 당신이하고 있으며, 모든 데이터는 예를 들어, 여러 개의 FFT들 사이에 공유됩니다. 여부)는 기본적으로, 다음 설명이 적용 cuFFT를 사용하려는 경우 :

예, 당신은 당신의 개인 함수 호출을 변경해야합니다. API, 관련 헤더 파일 및 라이브러리의 함수 이름과 일치해야합니다. fftw_ 함수 이름은 cuFFT 라이브러리에 없습니다.

당신은 당신의 데이터 유형을 검사 할 수 있습니다 및 float, double가 복잡한 등 그들이 레이아웃 호환 cuFFT와 FFTW 사이에 있어야합니다 같은 기본 데이터 유형에 대한 것을 발견한다. 개인적으로 데이터 유형을 cuFFT 데이터 유형으로 변경하는 것이 좋지만 현재로서는 기능적 또는 성능 적 차이가 없어야합니다. 당신이 그것을 언급하지 않지만

, cuFFT는 CPU/호스트와 GPU, FFTW 관련이 없습니다 개념 사이의 데이터를 이동해야하는 것입니다.

cufftSetCompatibilityMode과 관련하여 function documentationFFTW compatibility mode에 대한 설명은 그 목적이 명확합니다. 전체 데이터 레이아웃, 특히 FFTW를위한 데이터 패딩과 관련이 있습니다.

+0

그래서'cuFFT '를 사용하는 경우에만'cufftSetCompatabilityMode()'가 관련이 있습니까? 그 방법의 첫 번째 매개 변수는 cuFFT 핸들입니다. 아마도 FFTW를 사용하고 있을지 모르겠습니다. 둘을 "혼합"할 수 있습니까? 예를 들어 "실행"을 제외한 모든 인터페이스를 사용하고 "실행"에 대해 기본 cuFFT를 사용합니까? 또한 인터페이스 만 사용하는 경우 함수 반환 값 (예 : CUFFT_SUCCESS)을 가져 오는 방법이 있습니까? – tir38

+0

예, cuFFTW 인터페이스를 엄격하게 사용하는 경우'cufftSetCompatibilityMode()'는 관련이 없습니다. 예, 2 개의 API를 혼합 할 수 있습니다. 실제로 FFTW 인터페이스로 실행하지 않으면 데이터 복사 프로세스에 영향을주지 않기 때문에 "실행"을 제외한 모든 작업에 FFTW 인터페이스를 사용할 수 없습니다. cuFFT "execute"는 데이터가 이미 복사되었다고 가정합니다. cuFFTW 인터페이스를 사용하여 함수 반환 값을 얻는 방법을 모르겠습니다. 그러나 지원되는 fftw 함수의 경우 모든 종류의 상태 매개 변수도 지원해야합니다. –