現在地 >> メニュー >> OpenCL >> OpenCL編01 >> OpenCL編01::まとめ2

問題


プラットフォーム、デバイス情報を出力せよ。
その他条件:
デバイス情報のデバイス名は「clGetDeviceInfo関数」でも取得してみる。

答え

#include <oclUtils.h>//OpenCL用ユーティティヘッダ
#include <iostream>


int main(int argc, const char** argv) 
{
	cl_platform_id clSelectedPlatformID = NULL;//プラットフォームID
	cl_int ciErrNum = oclGetPlatformID (&clSelectedPlatformID);//プラットフォームIDの取得
	oclCheckError(ciErrNum, CL_SUCCESS);//エラーチェック


	char cBuffer[1024];
	//プラットフォームの情報を取得
	//名前
	ciErrNum = clGetPlatformInfo (clSelectedPlatformID, CL_PLATFORM_NAME, sizeof(cBuffer), cBuffer, NULL);
	if (ciErrNum == CL_SUCCESS)
	{
		std::cout <<"Platform NAME : "<< cBuffer << "\n";
	}
	//プラットフォームのバージョン
	ciErrNum = clGetPlatformInfo (clSelectedPlatformID, CL_PLATFORM_VERSION, sizeof(cBuffer), cBuffer, NULL);
	if (ciErrNum == CL_SUCCESS)
	{
		std::cout <<"Platform version : "<< cBuffer << "\n";
	}


	//OpenCLのデバイス情報
	cl_uint ciDeviceCount;
	cl_device_id *devices = NULL;

	//使用可能なデバイスの数を取得
	ciErrNum = clGetDeviceIDs (clSelectedPlatformID, CL_DEVICE_TYPE_ALL, 0, NULL, &ciDeviceCount);
	std::cout << "there is " <<ciDeviceCount << " devices for OpenCL \n";

	//デバイスの詳細な情報を得るためのデータ構造のメモリ確保
	devices = new cl_device_id[ciDeviceCount];
	if (devices == NULL)
	{
		std::cout << "Failed to allocate memory for devices\n";
		shrEXIT(argc, argv);
	}

	ciErrNum = clGetDeviceIDs (clSelectedPlatformID, CL_DEVICE_TYPE_ALL, ciDeviceCount, devices, &ciDeviceCount);
	if (ciErrNum == CL_SUCCESS)
	{
	for(unsigned int i = 0; i < ciDeviceCount; ++i ) 
	{  
		std::cout << "---------------------------------\n";
		clGetDeviceInfo(devices[i], CL_DEVICE_NAME, sizeof(cBuffer), &cBuffer, NULL);
		std::cout << cBuffer << "\n---------------------------------\n";
		oclPrintDevInfo(LOGCONSOLE, devices[i]);//デバイス情報を出力
	}	
	}else
	{
		std::cerr << "error @ clGetDeviceIDs\n";
		shrEXIT(argc, argv);
	}

	delete [] devices;
	shrEXIT(argc, argv);
	return 0;

}
×

この広告は60日間更新がないwikiに表示されております。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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