add information about found GPU's

This commit is contained in:
2025-11-08 16:49:57 +02:00
parent edb9e941d7
commit 776c09908e

View File

@@ -5,8 +5,8 @@
#include <iostream> #include <iostream>
#include <limits> #include <limits>
#include <vector> #include <vector>
#include <vulkan/vulkan_core.h>
/// TODO: Print available GPU's
/// TODO: Run benchmark on all GPU's /// TODO: Run benchmark on all GPU's
/// TODO: Pinned memory /// TODO: Pinned memory
/// TODO: Plot by buffer size /// TODO: Plot by buffer size
@@ -21,6 +21,24 @@ VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
return VK_FALSE; return VK_FALSE;
} }
const char *getGpuTypeName(VkPhysicalDeviceType type) {
switch (type) {
case VK_PHYSICAL_DEVICE_TYPE_OTHER:
return "Other";
case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:
return "Integrated GPU";
case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:
return "Discrete GPU";
case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:
return "Virtual GPU";
case VK_PHYSICAL_DEVICE_TYPE_CPU:
return "CPU";
default:
return "Invalid Type";
}
return "Invalid Type";
}
uint32_t findMemory(VkPhysicalDevice phy, uint32_t typeBits, uint32_t findMemory(VkPhysicalDevice phy, uint32_t typeBits,
VkMemoryPropertyFlags props) { VkMemoryPropertyFlags props) {
VkPhysicalDeviceMemoryProperties mem; VkPhysicalDeviceMemoryProperties mem;
@@ -93,9 +111,8 @@ double benchCopy(VkDevice dev, VkCommandPool pool, VkQueue queue, VkBuffer src,
return std::chrono::duration<double, std::milli>(t1 - t0).count(); return std::chrono::duration<double, std::milli>(t1 - t0).count();
} }
// ---------- main ----------
int main() { int main() {
// ---- instance ----
VkApplicationInfo app{}; VkApplicationInfo app{};
app.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; app.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app.pApplicationName = "VulkanTransferBench"; app.pApplicationName = "VulkanTransferBench";
@@ -108,6 +125,8 @@ int main() {
VkInstance inst; VkInstance inst;
vkCreateInstance(&ici, nullptr, &inst); vkCreateInstance(&ici, nullptr, &inst);
std::cout << "Starting benchmark..." << std::endl;
// ---- physical device ---- // ---- physical device ----
uint32_t n = 0; uint32_t n = 0;
vkEnumeratePhysicalDevices(inst, &n, nullptr); vkEnumeratePhysicalDevices(inst, &n, nullptr);
@@ -115,6 +134,20 @@ int main() {
vkEnumeratePhysicalDevices(inst, &n, gpus.data()); vkEnumeratePhysicalDevices(inst, &n, gpus.data());
VkPhysicalDevice phy = gpus[0]; VkPhysicalDevice phy = gpus[0];
std::cout << "Found " << gpus.size() << " gpus." << std::endl;
{
std::vector<VkPhysicalDeviceProperties> gpu_properties(n);
// Print info
for (uint32_t i = 0; i < gpus.size(); i++) {
VkPhysicalDeviceProperties *prop = &gpu_properties[i];
vkGetPhysicalDeviceProperties(gpus[i], prop);
std::cout << "GPU: [" << i << "] " << prop->deviceName << " ("
<< getGpuTypeName(prop->deviceType) << ")" << std::endl;
}
}
// ---- logical device ---- // ---- logical device ----
float prio = 1.0f; float prio = 1.0f;
VkDeviceQueueCreateInfo qi{}; VkDeviceQueueCreateInfo qi{};