diff --git a/src/main.cpp b/src/main.cpp index e1acfd41..c21eef81 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -68,23 +68,68 @@ int main() { // TODO 1.2 // Аналогично тому, как был запрошен список идентификаторов всех платформ - так и с названием платформы, теперь, когда известна длина названия - его можно запросить: std::vector platformName(platformNameSize, 0); - // clGetPlatformInfo(...); + OCL_SAFE_CALL(clGetPlatformInfo(platform, CL_PLATFORM_NAME, platformNameSize, platformName.data(), nullptr)); std::cout << " Platform name: " << platformName.data() << std::endl; // TODO 1.3 // Запросите и напечатайте так же в консоль вендора данной платформы + size_t platformVendorSize = 0; + OCL_SAFE_CALL(clGetPlatformInfo(platform, CL_PLATFORM_VENDOR, 0, nullptr, &platformVendorSize)); + + std::vector platformVendor(platformVendorSize, 0); + OCL_SAFE_CALL(clGetPlatformInfo(platform, CL_PLATFORM_VENDOR, platformVendorSize, &platformVendor[0], nullptr)); + std::cout << " Platform vendor: " << platformVendor.data() << std::endl; // TODO 2.1 // Запросите число доступных устройств данной платформы (аналогично тому, как это было сделано для запроса числа доступных платформ - см. секцию "OpenCL Runtime" -> "Query Devices") cl_uint devicesCount = 0; + OCL_SAFE_CALL(clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, nullptr, &devicesCount)); + std::cout << " Number of OpenCL devices: " << platformsCount << std::endl; + + std::vector devices(devicesCount); + OCL_SAFE_CALL(clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, devicesCount, devices.data(), 0)); for (int deviceIndex = 0; deviceIndex < devicesCount; ++deviceIndex) { + std::cout << " Device #" << (deviceIndex + 1) << "/" << devicesCount << std::endl; + cl_device_id device = devices[deviceIndex]; // TODO 2.2 // Запросите и напечатайте в консоль: // - Название устройства + size_t deviceNameSize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_NAME, 0, nullptr, &deviceNameSize)); + std::vector deviceName(deviceNameSize, 0); + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_NAME, deviceNameSize, deviceName.data(), nullptr)); + std::cout << " Device name: " << deviceName.data() << std::endl; // - Тип устройства (видеокарта/процессор/что-то странное) + cl_device_type deviceType = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(deviceType), &deviceType, nullptr)); + std::cout << " Device type: "; + switch (deviceType) + { + case CL_DEVICE_TYPE_CPU: + std::cout << "CPU"; + break; + case CL_DEVICE_TYPE_GPU: + std::cout << "GPU"; + break; + case CL_DEVICE_TYPE_ACCELERATOR: + std::cout << "other accelerator"; + break; + default: + std::cout << "unknown"; + break; + } + std::cout << std::endl; // - Размер памяти устройства в мегабайтах + cl_ulong deviceMemSize; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(deviceMemSize), &deviceMemSize, nullptr)); + std::cout << " Device memory size (Mb): " << (deviceMemSize >> 20) << std::endl; // - Еще пару или более свойств устройства, которые вам покажутся наиболее интересными + size_t openCLVersionSize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_VERSION, 0, nullptr, &openCLVersionSize)); + std::vector openCLVersion(openCLVersionSize, 0); + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_VERSION, openCLVersionSize, openCLVersion.data(), nullptr)); + std::cout << " OpenCL version: " << openCLVersion.data() << std::endl; } }