////***** Martin Lukačovič *****////
////***** VYUŽITIE GRAFICKÝCH PROCESOROV PRE UNIVERZÁLNE VÝPOČTY V PRIEMYSELNÝCH SYSTÉMOCH *****////
////***** Bakalárska práca *****////
////***** 4.6.2014, VUT v Brne *****////
////***** Vytvorené na základe vzorov v INTEL SDK APP *****////

#include < stdio.h >                                                                                                                                                
#include < stdlib.h > 
#include < CL/cl.h > 

int main() { 

    int i, j; 

    char* hodnota; 
    size_t rozmerHodnoty; 
    cl_uint pocetPlatform; 
    cl_platform_id* platforma; 
    cl_uint pocetZariadeni; 
    cl_device_id* zariadenie; 
    cl_uint vypoctoveJednotky; 

             clGetPlatformIDs(0, NULL, &pocetPlatform); 
             platforma = (cl_platform_id*) malloc(sizeof(cl_platform_id) * pocetPlatform); 

			 clGetPlatformIDs(pocetPlatform, platforma, NULL); 

			 for (i = 0; i < pocetPlatform; i++) { 

		     clGetDeviceIDs(platforma[i], CL_DEVICE_TYPE_ALL, 0, NULL, &pocetZariadeni); 
			 zariadenie = (cl_device_id*) malloc(sizeof(cl_device_id) * pocetZariadeni); 

			 clGetDeviceIDs(platforma[i], CL_DEVICE_TYPE_ALL, pocetZariadeni, zariadenie, NULL); 

			 for (j = 0; j < pocetZariadeni; j++) { 

	         clGetDeviceInfo(zariadenie[j], CL_DEVICE_NAME, 0, NULL, &rozmerHodnoty); 
             hodnota = (char*) malloc(rozmerHodnoty); 

             clGetDeviceInfo(zariadenie[j], CL_DEVICE_NAME, rozmerHodnoty, hodnota, NULL); 
             printf("%d. Zariadenie: %s\n", j+1, hodnota); 
             free(hodnota); 

             clGetDeviceInfo(zariadenie[j], CL_DEVICE_VERSION, 0, NULL, &rozmerHodnoty); 
             hodnota = (char*) malloc(rozmerHodnoty); 

             clGetDeviceInfo(zariadenie[j], CL_DEVICE_VERSION, rozmerHodnoty, hodnota, NULL); 
             printf(" %d.%d Hardware verzia: %s\n", j+1, 1, hodnota); 
	         free(hodnota); 

             clGetDeviceInfo(zariadenie[j], CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(vypoctoveJednotky), &vypoctoveJednotky, NULL); 
			 printf(" %d.%d Pocet paralelnych vypoctovych jednotiek: %d\n", j+1, 4, vypoctoveJednotky); 
        }
    free(zariadenie); 
    } 
    free(platforma); 
	system("pause");
	return 0;
}
