| Name Strings |
| |
| cl_intel_driver_diagnostics |
| |
| Contributors |
| |
| Michal Mrozek, Intel |
| Mateusz Hoppe, Intel |
| Adam Lake, Intel |
| Ben Ashbaugh, Intel |
| Tim Bauer, Intel |
| Tom Craver, Intel |
| Eric Palmer, Intel |
| Bartosz Dunajski, Intel |
| |
| Contact |
| |
| Michal Mrozek, Intel (michal.mrozek 'at' intel.com) |
| |
| Version |
| |
| Version 1, July 25, 2016 |
| |
| Number |
| |
| OpenCL Extenstion #47 |
| |
| Status |
| |
| Final Draft |
| |
| Dependencies |
| |
| Support for OpenCL 1.2 is required. |
| |
| This spec is written against revision 19 of the OpenCL 1.2 specification. |
| |
| Overview |
| |
| The OpenCL specification allows registering a callback function during |
| OpenCL context creation that will be called whenever there is an error. |
| This extension extends this mechanism by allowing the driver to pass |
| additional strings containing diagnostic information. The diagnostic |
| messages can help to understand how the driver works and can provide |
| guidance to modify an application to improve performance. |
| |
| New Types |
| |
| Add the following new type to describe the types of diagnostic messages |
| that will be passed through the context callback: |
| |
| typedef cl_bitfield cl_diagnostic_verbose_level_intel; |
| |
| New API Enums |
| |
| Accepted as a property name in the <properties> parameter of |
| clCreateContext and clCreateContextFromType: |
| |
| CL_CONTEXT_SHOW_DIAGNOSTICS_INTEL 0x4106 |
| |
| The value for the property CL_CONTEXT_SHOW_DIAGNOSTICS_INTEL is a bitfield |
| of type cl_diagnostic_verbose_level_intel that controls the types of |
| diagnostic messages that are reported. Valid bits in this bitfield are: |
| |
| CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL 0x2 |
| |
| Messages under bad verbose level report cases that may result in |
| degraded performance. |
| |
| CL_CONTEXT_DIAGNOSTICS_LEVEL_GOOD_INTEL 0x1 |
| |
| Messages under good verbose level report good use cases to verify that |
| that the driver is used properly and optimally. |
| |
| CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL 0x4 |
| |
| Messages under neutral verbose level report cases that may or may not |
| have performance implications. Additionally, neutral diagnostic |
| messages may inform developers about specific internal driver |
| properties. |
| |
| Additions to Chapter 4 of the OpenCL 1.2 Specification |
| |
| Add a row describing CL_CONTEXT_DRIVER_DIAGNOSTICS_INTEL to Table 4.5 - |
| "List of supported properties by clCreateContext": |
| |
| "---------------------------------------------------------------------------- |
| cl_context_properties Property Value Description |
| enum |
| --------------------- ------------------ -------------------------------- |
| CL_CONTEXT_DRIVER_ cl_diagnostics_ Specifies whether the caller |
| DIAGNOSTICS_INTEL verbose_level_ wants to receive diagnostic |
| intel information from the driver. |
| If CL_CONTEXT_DRIVER_ |
| DIAGNOSTICS_INTEL is not |
| specified or set to zero then |
| driver diagnostics strings will |
| not be provided. Since this |
| value is a bitset, multiple |
| diagnostic message types may be |
| requested. If this value is set |
| to a nonzero value then a |
| callback function must be |
| provided to clCreateContext. |
| ---------------------------------------------------------------------------" |
| |
| Also, replace the description of pfn_notify in Section 4.4 - "Contexts" |
| with: |
| |
| "<pfn_notify> is a callback function that can be registered by the |
| application. This callback function will be used by the OpenCL |
| implementation to report information on errors during context creation as |
| well as errors that occur at runtime in this context. Additionally if |
| CL_CONTEXT_DRIVER_DIAGNOSTICS_INTEL is set to a nonzero value via context |
| creation <properties>, then this callback function will be used by the |
| OpenCL implementation to report diagnostic information. This callback |
| function may be called asynchronously by the OpenCL implementation. It is |
| the application's responsibility to ensure that the callback function is |
| thread-safe. The parameters to this callback function are: |
| |
| * <errinfo> is a pointer to an error string or diagnostic information. |
| * <private_info> and <cb> represent a pointer to binary data that is |
| returned by the OpenCL implementation that can be used to log |
| additional information helpful in debugging the error or analyzing the |
| diagnostic information. |
| * <user_data> is a pointer to user supplied data. |
| |
| If <pfn_notify> is NULL, no callback function is registered. |
| |
| NOTE: There are a number of cases where error notifications need to be |
| delivered due to an error that occurs outside a context. Such notifications |
| may not be delivered through the pfn_notify callback. Where these |
| notifications go is implementation-defined." |
| |
| Add to the list of errors for clCreateContext and clCreateContextFromType: |
| |
| "* CL_INVALID_PROPERTY if property CL_CONTEXT_SHOW_DIAGNOSTICS_INTEL is |
| set to a nonzero value and <pfn_notify> is NULL." |
| |
| Interactions with other extensions |
| |
| None |
| |
| Issues |
| |
| 1. How this mechanism work together with current error callback mechanism? |
| |
| RESOLVED: When driver diagnostics are enabled error strings are still |
| reported with callback mechanism. |
| |
| 2. When will callback be called? |
| |
| RESOLVED: Callbacks with diagnostic messages will be called in the same |
| moment given action occurs in the driver, it means that multiple diagnostic |
| strings may be provided from one API call. |
| |
| Sample Code |
| |
| void CL_CALLBACK NotifyFunction( |
| const char * pDiagnosticInfo, |
| const void * pPrivateData, |
| size_t SizeOfPrivateData, |
| void* pUserData ) |
| { |
| printf("%s\n", pDiagnosticInfo); |
| } |
| |
| int main() |
| { |
| ... |
| cl_context_properties properties[] = { |
| CL_CONTEXT_DRIVER_DIAGNOSTICS_INTEL, |
| CL_CONTEXT_DIAGNOSTICS_LEVEL_BAD_INTEL, |
| 0 |
| }; |
| ... |
| myContext = clCreateContext(properties, 1, &deviceID, |
| NotifyFunction, NULL, NULL); |
| ... |
| } |
| |
| Revision History |
| |
| Version 1 - Initial Revision |
| |