diff --git a/src/main.cpp b/src/main.cpp index 90aaf4d1..86411e90 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -54,6 +54,7 @@ int main() // Откройте документацию по "OpenCL Runtime" -> "Query Platform Info" -> "clGetPlatformInfo" // Не забывайте проверять коды ошибок с помощью макроса OCL_SAFE_CALL size_t platformNameSize = 0; + // OCL_SAFE_CALL(clGetPlatformInfo(platform, 239, 0, nullptr, &platformNameSize)); OCL_SAFE_CALL(clGetPlatformInfo(platform, CL_PLATFORM_NAME, 0, nullptr, &platformNameSize)); // TODO 1.1 // Попробуйте вместо CL_PLATFORM_NAME передать какое-нибудь случайное число - например 239 @@ -70,15 +71,27 @@ int main() // TODO 1.2 // Аналогично тому, как был запрошен список идентификаторов всех платформ - так и с названием платформы, теперь, когда известна длина названия - его можно запросить: std::vector platformName(platformNameSize, 0); - // clGetPlatformInfo(...); - std::cout << " Platform name: " << platformName.data() << std::endl; + clGetPlatformInfo(platform, CL_PLATFORM_NAME, platformNameSize, platformName.data(), nullptr); + std::cout << " Platform name: " << platformName.data() << std::endl; + // TODO 1.3 + size_t platformVendorSize = 0; + clGetPlatformInfo(platform, CL_PLATFORM_NAME, 0, nullptr, &platformVendorSize); + std::vector platformVendor(platformVendorSize, 0); + + clGetPlatformInfo(platform, CL_PLATFORM_VENDOR, platformVendorSize, platformVendor.data(), nullptr); + std::cout << " Platform vendor: " << platformVendor.data() << std::endl; // Запросите и напечатайте так же в консоль вендора данной платформы // TODO 2.1 // Запросите число доступных устройств данной платформы (аналогично тому, как это было сделано для запроса числа доступных платформ - см. секцию "OpenCL Runtime" -> "Query Devices") cl_uint devicesCount = 0; + clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 100, nullptr, &devicesCount); + std::cout << " Number of devices: " << devicesCount << std::endl; + + std::vector devices(devicesCount); + clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, devicesCount, devices.data(), nullptr); for(int deviceIndex = 0; deviceIndex < devicesCount; ++deviceIndex) { @@ -88,6 +101,32 @@ int main() // - Тип устройства (видеокарта/процессор/что-то странное) // - Размер памяти устройства в мегабайтах // - Еще пару или более свойств устройства, которые вам покажутся наиболее интересными + std::cout << " Device #" << (deviceIndex + 1) << "/" << devicesCount << std::endl; + cl_device_id device = devices[deviceIndex]; + + size_t device_name_size = 0; + clGetDeviceInfo(device, CL_DEVICE_NAME, 0, nullptr, &device_name_size); + std::vector deviceName(device_name_size, 0); + clGetDeviceInfo(device, CL_DEVICE_NAME, device_name_size, deviceName.data(), nullptr); + std::cout << " Device name: " << deviceName.data() << std::endl; + + + + cl_device_type device_type; + clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(cl_device_type), &device_type, nullptr); + bool norm_device_type = false; + if ((device_type & CL_DEVICE_TYPE_CPU) == CL_DEVICE_TYPE_CPU) { + std::cout << " Device type: CPU" << std::endl; + norm_device_type = true; + } + if ((device_type & CL_DEVICE_TYPE_GPU) == CL_DEVICE_TYPE_GPU) { + std::cout << " Device type: GPU" << std::endl; + norm_device_type = true; + } + if (!norm_device_type) { + std::cout << " Device type: unknown" << std::endl; + } + } }