Skip to content

Commit 8a059aa

Browse files
committed
Added required keys to fake_results, fixed formatting
1 parent a5c3189 commit 8a059aa

File tree

2 files changed

+33
-31
lines changed

2 files changed

+33
-31
lines changed

kernel_tuner/file_utils.py

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,8 @@ def store_output_file(output_filename, results, tune_params, objective="time"):
2525
if output_filename[-5:] != ".json":
2626
output_filename += ".json"
2727

28-
timing_keys = [
29-
"compile_time", "benchmark_time", "framework_time", "strategy_time",
30-
"verification_time"
31-
]
32-
not_measurement_keys = list(
33-
tune_params.keys()) + timing_keys + ["timestamp"]
28+
timing_keys = ["compile_time", "benchmark_time", "framework_time", "strategy_time", "verification_time"]
29+
not_measurement_keys = list(tune_params.keys()) + timing_keys + ["timestamp"]
3430

3531
output_data = []
3632

@@ -39,10 +35,8 @@ def store_output_file(output_filename, results, tune_params, objective="time"):
3935
out = {}
4036

4137
out["timestamp"] = result["timestamp"]
42-
out["configuration"] = {
43-
k: v
44-
for k, v in result.items() if k in tune_params
45-
}
38+
out["configuration"] = { k: v
39+
for k, v in result.items() if k in tune_params }
4640

4741
# collect configuration specific timings
4842
timings = dict()
@@ -110,14 +104,12 @@ def get_dependencies(package='kernel_tuner'):
110104

111105
def get_device_query(target):
112106
if target == "nvidia":
113-
nvidia_smi_out = subprocess.run(["nvidia-smi", "--query", "-x"],
114-
capture_output=True)
107+
nvidia_smi_out = subprocess.run(["nvidia-smi", "--query", "-x"], capture_output=True)
115108
nvidia_smi = xmltodict.parse(nvidia_smi_out.stdout)
116109
del nvidia_smi["nvidia_smi_log"]["gpu"]["processes"]
117110
return nvidia_smi
118111
elif target == "amd":
119-
rocm_smi_out = subprocess.run(["rocm-smi", "--showallinfo", "--json"],
120-
capture_output=True)
112+
rocm_smi_out = subprocess.run(["rocm-smi", "--showallinfo", "--json"], capture_output=True)
121113
return json.loads(rocm_smi_out.stdout)
122114
else:
123115
raise ValueError("get_device_query target not supported")
@@ -135,8 +127,7 @@ def store_metadata_file(metadata_filename, target="nvidia"):
135127
# only works if nvidia-smi (for NVIDIA) or rocm-smi (for AMD) is present, raises FileNotFoundError when not present
136128
device_query = get_device_query(target)
137129

138-
metadata["environment"] = dict(device_query=device_query,
139-
requirements=get_dependencies())
130+
metadata["environment"] = dict(device_query=device_query, requirements=get_dependencies())
140131

141132
# write metadata to JSON file
142133
version, _ = output_file_schema("metadata")

test/test_integration.py

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,31 @@
66

77
from kernel_tuner import integration
88
from kernel_tuner import util
9+
from datetime import datetime, timezone
10+
911

1012
@pytest.fixture()
1113
def fake_results():
1214
#create fake results for testing
13-
tune_params = {"a": [1, 2, 4], "b": [4, 5, 6]}
15+
tune_params = {
16+
"a": [1, 2, 4],
17+
"b": [4, 5, 6]
18+
}
1419
problem_size = 100
1520
parameter_space = itertools.product(*tune_params.values())
1621
results = [dict(zip(tune_params.keys(), element)) for element in parameter_space]
17-
for i,r in enumerate(results):
18-
r["time"] = 100.0+i
19-
env = {"device_name": "My GPU"}
22+
23+
for i, r in enumerate(results):
24+
r["time"] = 100.0 + i
25+
r["compile_time"] = 20.0 + (i / 5)
26+
r["benchmark_time"] = 20.0 + (i / 5)
27+
r["framework_time"] = 20.0 + (i / 5)
28+
r["strategy_time"] = 20.0 + (i / 5)
29+
r["verification_time"] = 20.0 + (i / 5)
30+
r["timestamp"] = str(datetime.now(timezone.utc))
31+
env = {
32+
"device_name": "My GPU"
33+
}
2034

2135
return "fake_kernel", "fake_string", tune_params, problem_size, parameter_space, results, env
2236

@@ -41,14 +55,14 @@ def test_store_results(fake_results):
4155
assert len([d for d in stored_data if d["device_name"] == "My_GPU" and d["problem_size"] == "1000"]) == 3
4256

4357
#test if results for a different GPU can be added
44-
integration.store_results(filename, kernel_name, kernel_string, tune_params, problem_size, results, {"device_name": "Another GPU"}, top=3)
58+
integration.store_results(filename, kernel_name, kernel_string, tune_params, problem_size, results, { "device_name": "Another GPU"}, top=3)
4559
meta, stored_data = integration._read_results_file(filename)
4660

4761
assert len(set([d["device_name"] for d in stored_data])) == 2
4862

4963
#test if overwriting results works
50-
for i,r in enumerate(results):
51-
r["time"] = 50.0+i
64+
for i, r in enumerate(results):
65+
r["time"] = 50.0 + i
5266
integration.store_results(filename, kernel_name, kernel_string, tune_params, problem_size, results, env, top=0.1)
5367
meta, stored_data = integration._read_results_file(filename)
5468

@@ -60,7 +74,6 @@ def test_store_results(fake_results):
6074
util.delete_temp_file(filename)
6175

6276

63-
6477
def test_setup_device_targets(fake_results):
6578

6679
results_filename = "temp_test_results_file.json"
@@ -82,7 +95,7 @@ def test_setup_device_targets(fake_results):
8295
assert "#define b 4" in output_str
8396

8497
#test output when more then one problem size is used, and best configuration is different
85-
for i,e in enumerate(results):
98+
for i, e in enumerate(results):
8699
if e['a'] == 1 and e['b'] == 4:
87100
e['time'] += 100
88101
integration.store_results(results_filename, kernel_name, kernel_string, tune_params, 1000, results, env, top=3)
@@ -94,7 +107,7 @@ def test_setup_device_targets(fake_results):
94107
assert expected in output_str
95108

96109
#test output when more then one problem size is used, and best configuration depends on total time
97-
for i,e in enumerate(results):
110+
for i, e in enumerate(results):
98111
if e['a'] == 1 and e['b'] == 6:
99112
e['time'] -= 3
100113
integration.store_results(results_filename, kernel_name, kernel_string, tune_params, 1000, results, env, top=3)
@@ -106,7 +119,7 @@ def test_setup_device_targets(fake_results):
106119
assert expected in output_str
107120

108121
#test output when more then one GPU is used
109-
for i,e in enumerate(results):
122+
for i, e in enumerate(results):
110123
if e['a'] == 1 and e['b'] == 6:
111124
e['time'] += 3.1
112125
env['device_name'] = "My_GPU2"
@@ -134,7 +147,7 @@ def test_setup_device_targets_max(fake_results):
134147
kernel_name, kernel_string, tune_params, problem_size, parameter_space, results, env = fake_results
135148

136149
#add GFLOP/s as metric
137-
for i,e in enumerate(results):
150+
for i, e in enumerate(results):
138151
e['GFLOP/s'] = 1e5 / e['time']
139152

140153
try:
@@ -148,7 +161,7 @@ def test_setup_device_targets_max(fake_results):
148161
assert "#define b 4" in output_str
149162

150163
#test output when more then one problem size is used, and best configuration is different
151-
for i,e in enumerate(results):
164+
for i, e in enumerate(results):
152165
if e['a'] == 1 and e['b'] == 4:
153166
e['time'] += 100
154167
e['GFLOP/s'] = 1e5 / e['time']
@@ -160,8 +173,6 @@ def test_setup_device_targets_max(fake_results):
160173
expected = "\n".join(["TARGET_My_GPU", "#define a 1", "#define b 5"])
161174
assert expected in output_str
162175

163-
164176
finally:
165177
util.delete_temp_file(results_filename)
166178
util.delete_temp_file(header_filename)
167-

0 commit comments

Comments
 (0)