現在地 >> メニュー >> CUDA >> CUDA::基本編07 >> CUDA::基本編07まとめコード1

問題


以下の複素数データに対し、1次元離散フーリエ変換を行え。

(実部, 虚部) = (0,0) (0,0) (1,0) (1,0) (1,0) (1,0) (0,0) (0,0) (※方形波)

答え


#include <iostream>
#include <cutil.h>
#include <cufft.h>


//---------- 各種外部変数 ------------//
const int ElementNum = 8;


//------------ メイン関数 --------------//
int main(int argc, char **argv)
{
	CUT_DEVICE_INIT(argc,argv); //初期化
	
	cufftComplex *HostData, *DeviceData; //データ
	

	//メモリ確保
	HostData = new cufftComplex[ElementNum];

	//データ設定
	for(int loop = 0; loop < ElementNum; ++loop){
		if (loop >1 && loop < 6) {
			HostData[loop].x = 1;
			HostData[loop].y = 0;
		}else{
			HostData[loop].x = 0;
			HostData[loop].y = 0;
		}
	}

	//デバイス側のメモリ確保
	int nbyte = sizeof(cufftComplex)*ElementNum;
	cudaMalloc( reinterpret_cast<void**>( &DeviceData), nbyte);

	//デバイスへメモリコピー
	cudaMemcpy(DeviceData, HostData, nbyte,cudaMemcpyHostToDevice);

	//プラン作成
	cufftHandle plan;//cufft用プラン
	cufftPlan1d(&plan, 8, CUFFT_C2C,2 ); //1次元離散フーリエ返還

	//離散フーリエ
	cufftExecC2C(plan, DeviceData, DeviceData, CUFFT_FORWARD);
	cudaMemcpy(HostData, DeviceData, nbyte,cudaMemcpyDeviceToHost);
	
	//出力結果を表示
	for(int loop = 0; loop < ElementNum; ++loop){
		std::cout << HostData[loop].x << ", " << HostData[loop].y << "\n";
	}

	cufftDestroy(plan); //プランの破棄
	cudaFree(DeviceData); //メモリ解放
	delete [] HostData;


	CUT_EXIT(argc, argv);//終了

	return EXIT_SUCCESS;
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます