@@ -10,7 +10,7 @@ envelope, Central Processing Units (CPUs) now improve performance by adding
1010multiple cores.
1111Graphics Processing Units (GPUs) have also evolved from fixed function
1212rendering devices into programmable parallel processors.
13- As todays computer systems often include highly parallel CPUs, GPUs and
13+ As today's computer systems often include highly parallel CPUs, GPUs and
1414other types of processors, it is important to enable software developers to
1515take full advantage of these heterogeneous processing platforms.
1616
@@ -76,19 +76,6 @@ devices; and a set of optional extensions that are likely to move into the
7676core specification in later revisions of the OpenCL specification.
7777
7878
79- == Normative References
80-
81- Normative references are references to external documents or resources to
82- which implementers of OpenCL must comply with all, or specified portions of,
83- as described in this specification.
84-
85- [[iso-c11]]
86- _ISO/IEC 9899:2011 - Information technology - Programming languages - C_,
87- https://www.iso.org/standard/57853.html (final specification),
88- http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf (last public
89- draft).
90-
91-
9279== Version Numbers
9380
9481The OpenCL version number follows a _major.minor-revision_ scheme. When this
@@ -124,3 +111,96 @@ versions of OpenCL support that feature.
124111 glossary.
125112 * Universal: Features that have no mention of what version they are missing
126113 before or deprecated by are available in all versions of OpenCL.
114+
115+
116+ [[introduction-document-conventions]]
117+ == Document Conventions
118+
119+ The OpenCL specification is intended for use by both implementors of the API and
120+ application developers seeking to make use of the API, forming a contract
121+ between these parties.
122+ The OpenCL specification text may address either party; typically the intended
123+ audience can be inferred from context, though some sections address only one of
124+ these parties.
125+
126+ [[introduction-normative-requirements]]
127+ === Normative Requirements
128+
129+ The OpenCL Specification uses a combination of
130+ <<introduction-normative-terminology, normative terminology>> and
131+ <<introduction-normative-descriptions, normative descriptions>> to express
132+ the requirements that it imposes on applications and implementations.
133+ An application which complies with all normative requirements imposed on
134+ applications is said to make *valid use* of the API; failing to comply with
135+ such requirements may result in undefined behavior, as described in the
136+ <<valid-usage, Valid Usage>> section.
137+ In the context of this document, an implementation which complies with all
138+ normative requirements imposed on implementations is said to be
139+ *conformant*.
140+
141+ [[introduction-normative-terminology]]
142+ ==== Normative Terminology
143+
144+ Within this specification, the key words must, required, should, may,
145+ and optional are to be interpreted as described in
146+ https://www.ietf.org/rfc/rfc2119.txt[RFC 2119 - Key words for use in RFCs to
147+ Indicate Requirement Levels] (https://www.ietf.org/rfc/rfc2119.txt).
148+ The additional key word optionally is an alternate form of optional, for
149+ use where grammatically appropriate.
150+
151+ [[introduction-normative-descriptions]]
152+ ==== Normative Descriptions
153+
154+ The normative term must is primarily used to describe *application* behavior,
155+ and in particular to constrain what inputs or commands issued by the application
156+ to the implementation are considered valid.
157+
158+ To constrain *implementation* behavior, the specification sometimes uses
159+ must, but more often simply describes the behavior of the implementation in
160+ response to specified commands and inputs.
161+ Unless explicitly stated otherwise, such references to implementation
162+ behavior describe the behavior of *conformant* implementations, and express
163+ normative requirements which an implementation must satisfy in order to
164+ conform to the specification.
165+
166+ When the normative terms may, should, or optional are used to describe
167+ implementation behavior, they define alternative or optional behaviors which
168+ a conformant implementation may or may not exhibit.
169+ Such statements are also normative.
170+
171+ [[introduction-normative-references]]
172+ ==== Normative References
173+
174+ References to external documents are considered normative references if the
175+ OpenCL specification uses <<introduction-normative-terminology, normative
176+ terminology>> or <<introduction-normative-descriptions, normative descriptions>>
177+ to refer to them or their requirements, either as a whole or in part.
178+
179+ The following documents are referenced by normative sections of the
180+ specification:
181+
182+ [[iso-c11]]
183+ _ISO/IEC 9899:2011 - Information technology - Programming languages - C_,
184+ https://www.iso.org/standard/57853.html (final specification),
185+ http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf (last public
186+ draft)
187+
188+ [[spirv-spec]]
189+ _SPIR-V Specification, Version 1.6, Unified_.
190+ https://registry.khronos.org/spir-v/
191+
192+ [[introduction-error-codes]]
193+ === Error Codes
194+
195+ In many cases, the OpenCL specification describes conditions when an
196+ implementation must return an error code due to invalid application usage.
197+ If multiple conditions are described for an error code, the error code must be
198+ returned if any of the conditions are met.
199+ If error conditions are met for multiple error codes, the implementation may
200+ return any of the error conditions.
201+
202+ [[introduction-strings]]
203+ === String Representation
204+
205+ Unless specified otherwise, strings passed to or returned from OpenCL API
206+ functions are defined to be null-terminated and UTF-8 encoded.
0 commit comments