حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

وبلاگ دانشگاهی حسین خسروی، عضو هیات علمی دانشگاه صنعتی شاهرود

حسین خسروی

باتوجه به محدودیتهای صفحه شخصی موجود در سایت دانشگاه، این بلاگ را راه اندازی کردم.
اطلاعیه های مربوط به دروسی که تدریس می کنم و تمرینها در این وبلاگ قرار خواهد گرفت.
برای آگاهی از مطالب مربوط به هر درس، در قاب زیر (طبقه بندی موضوعی) روی نام درس کلیک کنید.

پیوندهای روزانه
  • ۰
  • ۰

مثال شماره 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;
}

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

خروجی

OpenCL reports 2 platforms.
********************
Platform 0: Advanced Micro Devices, Inc. AMD Accelerated Parallel Processing OpenCL 2.0 AMD-APP (2117.8)

        Num of compute units: 6
        Device #0) NAME: Oland
        VERSION: OpenCL 1.2 AMD-APP (2117.8)
        ADDRESS_WIDTH: 32
        EXTENSIONS: cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_khr_image2d_from_buffer cl_khr_spir cl_khr_gl_event cl_amd_liquid_flash
        ----------

        Num of compute units: 4
        Device #1) NAME: Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
        VERSION: OpenCL 1.2 AMD-APP (2117.8)
        ADDRESS_WIDTH: 32
        EXTENSIONS: cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_gl_sharing cl_ext_device_fission cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_d3d10_sharing cl_khr_spir cl_khr_gl_event
        ----------

********************
Platform 1: Intel(R) Corporation Intel(R) OpenCL OpenCL 1.2

        Num of compute units: 20
        Device #0) NAME: Intel(R) HD Graphics 4400
        VERSION: OpenCL 1.2
        ADDRESS_WIDTH: 64
        EXTENSIONS: cl_intel_accelerator cl_intel_advanced_motion_estimation cl_intel_ctz cl_intel_d3d11_nv12_media_sharing cl_intel_dx9_media_sharing cl_intel_motion_estimation cl_intel_simultaneous_sharing cl_intel_subgroups cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_depth_images cl_khr_dx9_media_sharing cl_khr_gl_depth_images cl_khr_gl_event cl_khr_gl_msaa_sharing cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_gl_sharing cl_khr_icd cl_khr_image2d_from_buffer cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_spir
        ----------

        Num of compute units: 4
        Device #1) NAME: Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
        VERSION: OpenCL 1.2 (Build 10039)
        ADDRESS_WIDTH: 32
        EXTENSIONS: cl_khr_icd cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_depth_images cl_khr_3d_image_writes cl_intel_exec_by_local_thread cl_khr_spir cl_khr_dx9_media_sharing cl_intel_dx9_media_sharing cl_khr_d3d11_sharing cl_khr_gl_sharing cl_khr_fp64
        ----------

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی