From 940c13fa910987c8f38e6f3463e1e33e65a13ee9 Mon Sep 17 00:00:00 2001 From: kondaevnil Date: Tue, 17 Sep 2024 22:36:24 +0300 Subject: [PATCH 1/2] add: all todos --- src/main.cpp | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e1acfd41..75d4dafe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -53,8 +53,7 @@ int main() { // Не забывайте проверять коды ошибок с помощью макроса OCL_SAFE_CALL size_t platformNameSize = 0; OCL_SAFE_CALL(clGetPlatformInfo(platform, CL_PLATFORM_NAME, 0, nullptr, &platformNameSize)); - // TODO 1.1 - // Попробуйте вместо CL_PLATFORM_NAME передать какое-нибудь случайное число - например 239 + // Попробуйте вместо CL_PLATFORM_NAME передать какое-нибудь случайное число - например 30 // Т.к. это некорректный идентификатор параметра платформы - то метод вернет код ошибки // Макрос OCL_SAFE_CALL заметит это, и кинет ошибку с кодом // Откройте таблицу с кодами ошибок: @@ -68,15 +67,26 @@ 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.data(), nullptr)); + std::cout << " 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 devices: " << devicesCount << std::endl; + + std::vector devices(devicesCount); + OCL_SAFE_CALL(clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, devicesCount, devices.data(), nullptr)); for (int deviceIndex = 0; deviceIndex < devicesCount; ++deviceIndex) { // TODO 2.2 @@ -85,6 +95,31 @@ int main() { // - Тип устройства (видеокарта/процессор/что-то странное) // - Размер памяти устройства в мегабайтах // - Еще пару или более свойств устройства, которые вам покажутся наиболее интересными + std::cout << " Device #" << (deviceIndex + 1) << "/" << devicesCount << std::endl; + cl_device_id device = devices[deviceIndex]; + 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; + + size_t deviceTypeNameSize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_TYPE, 0, nullptr, &deviceTypeNameSize)); + cl_device_type deviceType = CL_DEVICE_TYPE_ALL; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_TYPE, deviceTypeNameSize, &deviceType, nullptr)); + std::cout << " Device type: " << deviceType << std::endl; + + size_t deviceMemorySize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, 0, nullptr, &deviceMemorySize)); + cl_ulong deviceGlobalMemSize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, deviceMemorySize, &deviceGlobalMemSize, nullptr)); + std::cout << " Device memory size: " << deviceGlobalMemSize << std::endl; + + size_t deviceVendorSize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_VENDOR, 0, nullptr, &deviceVendorSize)); + std::vector deviceVendor(deviceVendorSize, 0); + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_VENDOR, deviceVendorSize, deviceVendor.data(), nullptr)); + std::cout << " Vendor: " << deviceVendor.data() << std::endl; } } From 8cd6e09266ebf79b6e073d73e64775edb565625d Mon Sep 17 00:00:00 2001 From: kondaevnil Date: Tue, 17 Sep 2024 22:47:42 +0300 Subject: [PATCH 2/2] add: changed device info --- src/main.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 75d4dafe..c9060896 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -115,11 +115,11 @@ int main() { OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, deviceMemorySize, &deviceGlobalMemSize, nullptr)); std::cout << " Device memory size: " << deviceGlobalMemSize << std::endl; - size_t deviceVendorSize = 0; - OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_VENDOR, 0, nullptr, &deviceVendorSize)); - std::vector deviceVendor(deviceVendorSize, 0); - OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_VENDOR, deviceVendorSize, deviceVendor.data(), nullptr)); - std::cout << " Vendor: " << deviceVendor.data() << std::endl; + size_t deviceExtSize = 0; + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, 0, nullptr, &deviceExtSize)); + std::vector deviceExt(deviceExtSize, 0); + OCL_SAFE_CALL(clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, deviceExtSize, deviceExt.data(), nullptr)); + std::cout << " Extensions: " << deviceExt.data() << std::endl; } }