×
現在地 >> メニュー >> CUDA >> CUDA::基本編06 >> CUDA::基本編06まとめ2
関連:CUBLAS::行列

問題


行列データを用意して、GPUにコピーせよ。
また、GPU上にあるデータの一部をCPUにコピーせよ。

答え

#include <iostream>
#include <algorithm>
#include <cublas.h>

float host[3][4]=
{
	{1,2,3,4},
	{5,6,7,8},
	{9,10,11,12},
};

int main(int argc, char **argv)
{

	float *gpu; //GPUメモリ格納用
	float *FromGpu = new float[9];

	cublasStatus status;
	status = cublasInit(); //初期化
	if (status != CUBLAS_STATUS_SUCCESS) {
		std::cerr << "Can't Initialization CUBLAS\n";
		return EXIT_FAILURE;
	}


	if ( cublasAlloc(12, sizeof(float), (void**)&gpu) != CUBLAS_STATUS_SUCCESS){ //メモリ確保
		std::cerr << "Can't allocate Device memory\n";
		return -1;
	}

	//row:y col:x
	cublasSetMatrix(3,4,sizeof(float),host,4,gpu,4);
	cublasGetMatrix(3,3,sizeof(float),gpu,4,FromGpu,3);//(3×3)分だけ取り出す


	cublasFree(gpu);//メモリ解放

	status = cublasShutdown(); //シャットダウン
	if (status != CUBLAS_STATUS_SUCCESS) {
		std::cerr << "Can't ShutDown CUBLAS\n";
		return EXIT_FAILURE;
	}
	

	std::copy(FromGpu,FromGpu+9,std::ostream_iterator<float>(std::cout,"\n"));//出力テスト

	delete [] FromGpu;


	return EXIT_SUCCESS;
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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

広告募集中