-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathtest_observers.py
More file actions
94 lines (75 loc) · 3.06 KB
/
Copy pathtest_observers.py
File metadata and controls
94 lines (75 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from pytest import raises
import kernel_tuner
from kernel_tuner.observers.nvml import NVMLObserver
from kernel_tuner.observers.observer import BenchmarkObserver
from kernel_tuner.observers.register import RegisterObserver
from .context import (
skip_if_no_cuda,
skip_if_no_cupy,
skip_if_no_gcc,
skip_if_no_openmp,
skip_if_no_opencl,
skip_if_no_pycuda,
skip_if_no_hip,
skip_if_no_pynvml,
)
from .test_hip_functions import env as env_hip # noqa: F401
from .test_opencl_functions import env as env_opencl # noqa: F401
from .test_compiler_functions import env as env_compiler # noqa: F401
from .test_runners import env # noqa: F401
@skip_if_no_cuda
@skip_if_no_pynvml
def test_nvml_observer(env):
nvmlobserver = NVMLObserver(["nvml_energy", "temperature"])
env[-1]["block_size_x"] = [128]
result, _ = kernel_tuner.tune_kernel(*env, observers=[nvmlobserver])
assert "nvml_energy" in result[0]
assert "temperature" in result[0]
assert result[0]["temperature"] > 0
@skip_if_no_cuda
def test_custom_observer(env):
env[-1]["block_size_x"] = [128]
class MyObserver(BenchmarkObserver):
def get_results(self):
return {"name": self.dev.name}
result, _ = kernel_tuner.tune_kernel(*env, observers=[MyObserver()])
assert "name" in result[0]
assert len(result[0]["name"]) > 0
@skip_if_no_openmp
@skip_if_no_gcc
def test_lambda_observer(env_compiler):
class MyObserver(BenchmarkObserver):
def __init__(self, args):
self.observer_args = args
def get_results(self):
return {"observer_args": self.observer_args}
result, _ = kernel_tuner.tune_kernel(*env_compiler, observers=[lambda args: MyObserver(args)], compiler_options=["-fopenmp"])
# Check if the observer has correctly received the lang option
assert result[0]["observer_args"]["lang"] == "C"
@skip_if_no_pycuda
def test_register_observer_pycuda(env):
result, _ = kernel_tuner.tune_kernel(*env, observers=[RegisterObserver()], lang='PYCUDA')
assert "num_regs" in result[0]
assert result[0]["num_regs"] > 0
@skip_if_no_cupy
def test_register_observer_cupy(env):
result, _ = kernel_tuner.tune_kernel(*env, observers=[RegisterObserver()], lang='CuPy')
assert "num_regs" in result[0]
assert result[0]["num_regs"] > 0
@skip_if_no_cuda
def test_register_observer_nvcuda(env):
result, _ = kernel_tuner.tune_kernel(*env, observers=[RegisterObserver()], lang='NVCUDA')
assert "num_regs" in result[0]
assert result[0]["num_regs"] > 0
@skip_if_no_opencl
def test_register_observer_opencl(env_opencl):
with raises(NotImplementedError) as err:
kernel_tuner.tune_kernel(*env_opencl, observers=[RegisterObserver()], lang='OpenCL')
assert err.errisinstance(NotImplementedError)
assert "OpenCL" in str(err.value)
@skip_if_no_hip
def test_register_observer_hip(env_hip):
with raises(NotImplementedError) as err:
kernel_tuner.tune_kernel(*env_hip, observers=[RegisterObserver()], lang='HIP')
assert err.errisinstance(NotImplementedError)
assert "Hip" in str(err.value)