OpenCL - مثال 1 دریافت اطلاعات پردازنده ها

خرید بک لینک

مثال شماره 1 درس چند پردازنده

این مثال و برخی از مثالهایی که در جلسات آینده طرح خواهد شد، از مثالهای شرکت AMD است که با تغییراتی در این درس طرح می شوند.

دریافت اطلاعات پردازنده ها

// MultiCore Programming
// Hossein Khosravi
// Shahrood University of Technology

#include "stdafx.h"
// You might need to change this header based on your install:
#include <CL/cl.h>
#include <stdio.h>
#include <stdlib.h>

#pragma  comment(lib, "OpenCl.lib")
static void check_error(cl_int error, char* name) {
	if (error != CL_SUCCESS) {
		fprintf(stderr, "Non-successful retu code %d for %s.  Exiting.n", error, name);
		exit(1);
	}
}

int main(int argc, char const *argv[])
{
	cl_uint i;
	cl_int err;

	// Discover the number of platforms:
	cl_uint nplatforms;
	err = clGetPlatformIDs(0, NULL, &nplatforms);
	check_error(err, "clGetPlatformIds");

	// Now ask OpenCL for the platform IDs:
	cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * nplatforms);
	err = clGetPlatformIDs(nplatforms, platforms, NULL);
	check_error(err, "clGetPlatformIds");

	// Ask OpenCL about each platform to understand the problem:
	char name[128];
	char vendor[128];
	char version[128];

	fprintf(stdout, "OpenCL reports %d platforms.", nplatforms);
	cl_device_id devs[3];	
	for (i = 0; i < nplatforms; i++) {
		err |= clGetPlatformInfo(platforms[i], CL_PLATFORM_VENDOR, 128, vendor, NULL);
		err |= clGetPlatformInfo(platforms[i], CL_PLATFORM_NAME, 128, name, NULL);
		err |= clGetPlatformInfo(platforms[i], CL_PLATFORM_VERSION, 128, version, NULL);
		check_error(err, "clGetPlatformInfo");

		fprintf(stdout, "n********************nPlatform %d: %s %s %sn", i, vendor, name, version);

		cl_uint num_devices = 0;
		//find number of devices for each platform
		//status = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 0, NULL, &numDevices);
		err = clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
		check_error(err, "clGetDeviceIDs");
		cl_device_id* devices = (cl_device_id*) malloc(sizeof(cl_device_id) * num_devices);
		clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_ALL, num_devices, devices, NULL);
		for (int j = 0; j < num_devices; j++) 
		{
			int maxComputeUnits = 0;
			// print parallel compute units
			clGetDeviceInfo(devices[j], CL_DEVICE_MAX_COMPUTE_UNITS,
				sizeof(maxComputeUnits), &maxComputeUnits, NULL);
			printf("ntNum of compute units: %dn", maxComputeUnits);

			cl_uint addr_data = 0;			
			char name_data[100] = { 0 }, ext_data[4096] = { 0 }, version[100] = {0};
			err = clGetDeviceInfo(devices[j], CL_DEVICE_NAME, 
				sizeof(name_data), name_data, NULL);		
			
			err |= clGetDeviceInfo(devices[j], CL_DEVICE_VERSION,
				sizeof(version), version, NULL);

			err |= clGetDeviceInfo(devices[j], CL_DEVICE_ADDRESS_BITS,
				sizeof(addr_data), &addr_data, NULL);
			err |= clGetDeviceInfo(devices[j], CL_DEVICE_EXTENSIONS,
				sizeof(ext_data), ext_data, NULL);
			check_error(err, "clGetDeviceInfo");
			printf("tDevice #%d) NAME: %sntVERSION: %sntADDRESS_WIDTH: %untEXTENSIONS: %snt----------n",
				j, name_data, version, addr_data, ext_data);
		}
		free(devices);
	}

	getchar();
	free(platforms);
	retu 0;
}

برای دیدن خروجی، ادامه مطلب را ببینید:

ادامه مطلب
برنامه نویسی - تمرین سری صفرم...

ما را در سایت برنامه نویسی - تمرین سری صفرم دنبال می‌کنید

برچسب: نویسنده: بازدید: 106 تاريخ: جمعه 30 مهر 1395 ساعت: 4:04

صفحه بندی