| import torch | |
| def is_available(): | |
| r"""Returns whether PyTorch is built with MKL support.""" | |
| return torch._C.has_mkl | |
| VERBOSE_OFF = 0 | |
| VERBOSE_ON = 1 | |
| class verbose(object): | |
| """ | |
| On-demand oneMKL verbosing functionality | |
| To make it easier to debug performance issues, oneMKL can dump verbose | |
| messages containing execution information like duration while executing | |
| the kernel. The verbosing functionality can be invoked via an environment | |
| variable named `MKL_VERBOSE`. However, this methodology dumps messages in | |
| all steps. Those are a large amount of verbose messages. Moreover, for | |
| investigating the performance issues, generally taking verbose messages | |
| for one single iteration is enough. This on-demand verbosing functionality | |
| makes it possible to control scope for verbose message dumping. In the | |
| following example, verbose messages will be dumped out for the second | |
| inference only. | |
| .. highlight:: python | |
| .. code-block:: python | |
| import torch | |
| model(data) | |
| with torch.backends.mkl.verbose(torch.backends.mkl.VERBOSE_ON): | |
| model(data) | |
| Args: | |
| level: Verbose level | |
| - ``VERBOSE_OFF``: Disable verbosing | |
| - ``VERBOSE_ON``: Enable verbosing | |
| """ | |
| def __init__(self, enable): | |
| self.enable = enable | |
| def __enter__(self): | |
| if self.enable == VERBOSE_OFF: | |
| return | |
| st = torch._C._verbose.mkl_set_verbose(self.enable) | |
| assert st, "Failed to set MKL into verbose mode. Please consider to disable this verbose scope." | |
| return self | |
| def __exit__(self, exc_type, exc_val, exc_tb): | |
| torch._C._verbose.mkl_set_verbose(VERBOSE_OFF) | |
| return False | |