From 821f50cda1a1bde98b472c40033330e690dfaa22 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Thu, 9 Aug 2018 17:21:50 +0200 Subject: [PATCH] Benchmark: Workaround to show proper Vega card --- benchmark/space/__init__.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/benchmark/space/__init__.py b/benchmark/space/__init__.py index 13ad2f1..58e82c6 100644 --- a/benchmark/space/__init__.py +++ b/benchmark/space/__init__.py @@ -2,6 +2,7 @@ import datetime import json import os import platform +import subprocess import sys import tempfile from threading import Thread, Lock @@ -836,6 +837,36 @@ class BENCHMARK_OT_restart(bpy.types.Operator): ################################################################################ # Configuration. +def cl_query_executable_get(): + benchmark_data_dir = blender_benchmark_data_dir_get() + system = platform.system() + if system == "Linux": + return os.path.join(benchmark_data_dir, "bin", "cl_query") + elif system == "Windows": + return os.path.join(benchmark_data_dir, "bin", "cl_query.exe") + elif system == "Darwin": + return os.path.join(benchmark_data_dir, "bin", "cl_query") + else: + raise Exception("Needs implementation") + +def query_opencl_compute_units(): + binary = cl_query_executable_get() + output = subprocess.check_output([binary]) + lines = output.splitlines() + compute_units = [] + for line in lines: + (name, max_compute_units) = line.rsplit(b':', 1) + compute_units.append((name.decode(), max_compute_units.decode())) + return compute_units + +def find_first_device_index(compute_units, device_name): + if not compute_units: + return -1 + for index, value in enumerate(compute_units): + if value[0] == device_name: + return index + return -1 + def compute_device_list_get(self, context): global global_cached_system_info global global_cached_compute_devices @@ -847,12 +878,18 @@ def compute_device_list_get(self, context): ctx.blender = blender_executable_get() ctx.configure_script = configure_script_get() global_cached_system_info = system_info_get(ctx) + compute_units = query_opencl_compute_units() for device in global_cached_system_info["devices"]: device_type = device["type"] if device_type == "CPU": continue elif device_type in ("OPENCL", "CUDA"): device_name = correct_device_name(device["name"]) + index = find_first_device_index(compute_units, device['name']) + if index != -1: + if device["name"] == "Radeon RX Vega": + device_name += " " + compute_units[index][1] + del compute_units[index] device_id = "{}:{}" . format(device_type, device["name"]) compute_devices.append((device_id, device_name, "")) global_cached_compute_devices = compute_devices