مثال شماره 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 return 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 %s\n", 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("\n\tNum of compute units: %d\n", 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: %s\n\tVERSION: %s\n\tADDRESS_WIDTH: %u\n\tEXTENSIONS: %s\n\t----------\n",
				j, name_data, version, addr_data, ext_data);
		}
		free(devices);
	}
	getchar();
	free(platforms);
	return 0;
}
برای دیدن خروجی، ادامه مطلب را ببینید: