infoware icon indicating copy to clipboard operation
infoware copied to clipboard

GPU/GC abstraction

Open ThePhD opened this issue 8 years ago • 9 comments

We need a way of finding out all relevant GPU information. This issue will be for what should theoretically be in there.

  • [x] Vendor
  • [x] Name / ID information
  • [ ] Thread count (WARPs or max workgroups or whatever)
  • [ ] OpenGL / D3D / Vulkan, or at least supported version?
  • [x] Memory (size in bytes)
  • [x] Clock Speed

ThePhD avatar May 31 '16 19:05 ThePhD

IDXGIAdapter::GetDesc from D3D11. https://cgit.freedesktop.org/mesa/demos/tree/src/xdemos/glxinfo.c, basically fucking around with OpenGL.

I might as well do OpenGL first and then D3D11 afterwards, just to verify a few extra bits of information...

ThePhD avatar Jun 01 '16 23:06 ThePhD

So, Using OpenGL/OpenCL/D3D is only ever going to be a half-assed way of handling this. It's never going to give us all the information we need, just things like "and hey, this is how capable your DirectX Card is"/""this is how capable your OpenGL card is".

We might want to relegate DirectX capabilities of a GPU device to either OpenGL / DirectX, and depending on INFOWARE_USE_D3D/OPENGL/OPENCL fill out separate sub-structures that describe the capabilities specific to that device for that specific API.

ThePhD avatar Jun 16 '16 14:06 ThePhD

ENOPARSE Half-assed way of handling what? What while doing things like [...]?

We don't have any DX caps as of now (and your comment is the only mention of DX here) so we can't relegate them.

nabijaczleweli avatar Jun 16 '16 14:06 nabijaczleweli

FYI the GPU memory size is incorrect for my 8GiB RX580 Series card, it just shows 3Gib.

captainwong avatar Apr 07 '18 17:04 captainwong

Which detector (D3D/OCL/OGL)?

nabijaczleweli avatar Apr 07 '18 20:04 nabijaczleweli

@captainwong ping

nabijaczleweli avatar Jun 04 '19 20:06 nabijaczleweli

The following patch adds (max) GPU clock speed via OpenCL. Problem is, despite purportedly an API existing for that on Winblows, I couldn't find it.

diff --git a/include/infoware/gpu.hpp b/include/infoware/gpu.hpp
index c77a300..fa88b01 100644
--- a/include/infoware/gpu.hpp
+++ b/include/infoware/gpu.hpp
@@ -34,6 +34,7 @@ namespace iware {
 			std::string name;
 			std::size_t memory_size;
 			std::size_t cache_size;
+			std::uint64_t max_frequency;
 		};
 
 
diff --git a/src/gpu/memory/OpenCL.cpp b/src/gpu/memory/OpenCL.cpp
index c1a4d6c..9ab9d55 100644
--- a/src/gpu/memory/OpenCL.cpp
+++ b/src/gpu/memory/OpenCL.cpp
@@ -51,13 +51,15 @@ std::vector<iware::gpu::device_properties_t> iware::gpu::device_properties() {
 			char vendorname[256];
 			cl_ulong cache;
 			cl_ulong memory;
+			cl_uint max_frequency;
 
 			clGetDeviceInfo(devices[j], CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, sizeof(cache), &cache, nullptr);
+			clGetDeviceInfo(devices[j], CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(max_frequency), &max_frequency, nullptr);
 			clGetDeviceInfo(devices[j], CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(memory), &memory, nullptr);
 			clGetDeviceInfo(devices[j], CL_DEVICE_VENDOR, sizeof(vendorname) / sizeof(*vendorname), &vendorname, nullptr);
 			clGetDeviceInfo(devices[j], CL_DEVICE_NAME, sizeof(name) / sizeof(*name), &name, nullptr);
 
-			ret.push_back({parse_vendor(vendorname), name, memory, cache});
+			ret.push_back({parse_vendor(vendorname), name, memory, cache, max_frequency});
 		}
 	}
 
diff --git a/src/gpu/memory/d3d.cpp b/src/gpu/memory/d3d.cpp
index e7933c3..95178dc 100644
--- a/src/gpu/memory/d3d.cpp
+++ b/src/gpu/memory/d3d.cpp
@@ -57,7 +57,7 @@ std::vector<iware::gpu::device_properties_t> iware::gpu::device_properties() {
 		auto device             = iware::detail::identify_device(adapterdesc.VendorId, adapterdesc.DeviceId);
 		std::string device_name = device.device_name ? device.device_name : iware::detail::narrowen_winstring(adapterdesc.Description);
 
-		devices.push_back({vendor_from_name(device.vendor_name), device_name, adapterdesc.DedicatedVideoMemory, adapterdesc.SharedSystemMemory});
+		devices.push_back({vendor_from_name(device.vendor_name), device_name, adapterdesc.DedicatedVideoMemory, adapterdesc.SharedSystemMemory, 0});
 	}
 	return devices;
 }

nabijaczleweli avatar Oct 16 '19 18:10 nabijaczleweli

https://github.com/ROCm-Developer-Tools/HIP?

clinfo

nabijaczleweli avatar Oct 17 '19 01:10 nabijaczleweli

Played around with HIP – it's a whole thing and beyond the scope of me being able to build it (at least at this current moment).

nabijaczleweli avatar Oct 18 '19 10:10 nabijaczleweli