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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
.. include:: subst.rst
OpenCL Runtime: Platforms, Devices and Contexts
===============================================
.. currentmodule:: pyopencl
Platform
--------
.. function:: get_platforms()
Return a list of :class:`Platform` instances.
.. class:: Platform
.. attribute:: info
Lower case versions of the :class:`platform_info` constants
may be used as attributes on instances of this class
to directly query info attributes.
.. method:: get_info(param)
See :class:`platform_info` for values of *param*.
.. method:: get_devices(device_type=device_type.ALL)
Return a list of devices matching *device_type*.
See :class:`device_type` for values of *device_type*.
.. versionchanged:: 2013.2
This used to raise an exception if no matching
devices were found. Now, it will simply return
an empty list.
.. automethod:: from_int_ptr
.. autoattribute:: int_ptr
|comparable|
Device
------
.. class:: Device
.. attribute:: info
Lower case versions of the :class:`device_info` constants
may be used as attributes on instances of this class
to directly query info attributes.
.. method:: get_info(param)
See :class:`device_info` for values of *param*.
.. automethod:: from_int_ptr
.. autoattribute:: int_ptr
.. method:: create_sub_devices(properties)
*properties* is an array of one (or more) of the forms::
[ dpp.EQUALLY, 8]
[ dpp.BY_COUNTS, 5, 7, 9, dpp.PARTITION_BY_COUNTS_LIST_END]
[ dpp.BY_NAMES, 5, 7, 9, dpp.PARTITION_BY_NAMES_LIST_END]
[ dpp.BY_AFFINITY_DOMAIN, dad.L1_CACHE]
where `dpp` represents :class:`device_partition_property`
and `dad` represent :class:`device_affinity_domain`.
`PROPERTIES_LIST_END_EXT` is added automatically.
Only available with CL 1.2.
.. versionadded:: 2011.2
Two instances of this class may be compared using *=="* and *"!="*.
Context
-------
.. class:: Context(devices=None, properties=None, dev_type=None, cache_dir=None)
Create a new context. *properties* is a list of key-value
tuples, where each key must be one of :class:`context_properties`.
At most one of *devices* and *dev_type* may be not `None`, where
*devices* is a list of :class:`Device` instances, and
*dev_type* is one of the :class:`device_type` constants.
If neither is specified, a context with a *dev_type* of
:attr:`device_type.DEFAULT` is created.
If *cache_dir* is not `None` - it will be used as default *cache_dir*
for all its' :class:`Program` instances builds (see also :meth:`Program.build`).
.. note::
Calling the constructor with no arguments will fail for recent
CL drivers that support the OpenCL ICD. If you want similar,
just-give-me-a-context-already behavior, we recommend
:func:`create_some_context`. See, e.g. this
`explanation by AMD <http://developer.amd.com/support/KnowledgeBase/Lists/KnowledgeBase/DispForm.aspx?ID=71>`_.
.. note::
Because of how OpenCL changed in order to support Installable Client
Drivers (ICDs) in OpenCL 1.1, the following will *look* reasonable
but often actually not work::
import pyopencl as cl
ctx = cl.Context(dev_type=cl.device_type.ALL)
Instead, make sure to choose a platform when choosing a device by type::
import pyopencl as cl
platforms = cl.get_platforms()
ctx = cl.Context(
dev_type=cl.device_type.ALL,
properties=[(cl.context_properties.PLATFORM, platforms[0])])
.. note::
For
:attr:`context_properties.CL_GL_CONTEXT_KHR`,
:attr:`context_properties.CL_EGL_DISPLAY_KHR`,
:attr:`context_properties.CL_GLX_DISPLAY_KHR`,
:attr:`context_properties.CL_WGL_HDC_KHR`, and
:attr:`context_properties.CL_CGL_SHAREGROUP_KHR`
:attr:`context_properties.CL_CGL_SHAREGROUP_APPLE`
the value in the key-value pair is a PyOpenGL context or display
instance.
.. versionchanged:: 0.91.2
Constructor arguments *dev_type* added.
.. attribute:: info
Lower case versions of the :class:`context_info` constants
may be used as attributes on instances of this class
to directly query info attributes.
.. method:: get_info(param)
See :class:`context_info` for values of *param*.
.. automethod:: from_int_ptr
.. autoattribute:: int_ptr
|comparable|
.. function:: create_some_context(interactive=True, answers=None, cache_dir=None)
Create a :class:`Context` 'somehow'.
If multiple choices for platform and/or device exist, *interactive*
is True, and *sys.stdin.isatty()* is also True,
then the user is queried about which device should be chosen.
Otherwise, a device is chosen in an implementation-defined manner.
|