Git Product home page Git Product logo

oneapi-spec's Introduction

oneAPI Specifications

image

REUSE status

image

This repository contains the sources for the oneAPI Specification. For the latest build from main branch, see HTML and PDF.

For more information about oneAPI, see oneapi.io. For information about future releases of the oneAPI specification, see the roadmap. To be notified about new releases, become a release-only watcher of this repo.

The document is written using reStructuredText and built with Sphinx using a theme provided by Read the Docs.

License

The oneAPI specification is licensed under the Creative Commons Attribution 4.0 International License.

See LICENSE for more information.

Contribute

See CONTRIBUTING for more information.

Build the Specification

To build the specification document locally, clone this repository to your local system and follow the setup and build instructions. The setup and build steps make use of scripts/oneapi.py, a helper script for maintenance tasks. You can also look at the source if you want to see how to do the same task manually.

Setup

Install Python 3, Doxygen (>= 1.8.17), LaTeX, etc. To install on Ubuntu:

sudo scripts/install.sh

Create and activate a Python virtual environment with all required tools:

python scripts/oneapi.py spec-venv
source spec-venv/bin/activate

To install directly with pip:

pip install -r requirements.txt

To install on Windows:

python scripts\oneapi.py spec-venv
spec-venv\Scripts\activate

Build the Docs

To build the HTML document, use the following command:

python scripts/oneapi.py html

The document is organized as a book with chapters. Each element of oneAPI is its own chapter and can be built separately. For example, to build the oneVPL chapter, use the following command:

python scripts/oneapi.py html source/elements/oneVPL

To view the HTML docs, visit build/html/index.html in your browser using a file:// URL.

Build the pdf version wit the following command:

python scripts/oneapi.py latexpdf

The generated PDF will be located at build/latexpdf/oneAPI-spec.pdf.

Spell check:

python oneapi.doc. --verbose spelling

CI

We use GitHub actions. See .github/workflows/ci.yml.

PR's trigger the CI to build the document and save it as an artifact. If you are working in a fork on GitHub, commits to the main branch will build and publish the document in the GitHub pages associated with the repository.

Adding licenses to files

Use the reuse tool

Code examples:

reuse addheader --copyright "Constributors to the oneapi-spec project" --license MIT source/examples/host-task.cpp

Doc sources:

reuse addheader --copyright "Constributors to the oneapi-spec project" --license CC-BY-4.0 source/index.rst

Making a Release

  1. Update:
    • oneapi-doc.json
    • releases/index.rst
  2. Tag it.
  3. Publish with oneAPI doc repo

oneapi-spec's People

Contributors

aepanchi avatar akukanov avatar akwrobel avatar alexey-katranov avatar amgrigoriev avatar andrewtbarker avatar andreynv avatar anton-potapov avatar baeseung-intel avatar dmnemshi avatar gajanan-choudhary avatar hdelassus avatar igorbelyakovintel avatar kboyarinov avatar mchernov-intel avatar mgouicem avatar michael-smirnov avatar mkrainiuk avatar mmeterel avatar mshiryaev avatar napetrov avatar no-ponomarev avatar rachelertl avatar rlnx avatar rscohn2 avatar sknepper avatar spencerpatty avatar tletnes avatar vepifanov avatar wuxun-zhang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

oneapi-spec's Issues

DPL: control over sequencing by accessing buffers

In SYCL, you control sequencing when using buffers by creating accessors and declaring if they are used read-only or read-write.
It seems like dpstd::begin should be able to express the same sequencing control, but there is no discussion in the text. Is dpstd::begin always creating a read/write accessor internally? Does a for_each wait on the queue when done? What happens when I intermix accessors and dpstd::begin?

DPL: USM & PSTL?

Needs some discussion of how USM & PSTL interact.
I should be able to do pass an iterator for data in USM to a for_each. I am not clear on how you would do sequencing for PSTL/PSTL as well as PSTL/direct SYCL access

notices link in footer is broken

Notices link in the footer always looks in the current directory. I could find a way to make it reference top of tree. There is always a notices link in the bottom left in the contents so I will delete it instead.

MKL: spec refers to product manual

Check that these links are appropriate. In general, we should not refer to product docs.

./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-commit.rst:66: Functions <https://software.intel.com/en-us/onemkl-developer-refer\
ence-c-status-checking-functions>__ ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-computebackward-typename-iotype.rst:45: transform <https://software.intel.com/en\
-us/onemkl-developer-reference-c-fourier-transform-functions#FORMULA>__ ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-computebackward-typename-iotype.rst:61: C/C++ <https://software.intel.com/en-us/o\ nemkl-developer-reference-c-configuring-and-computing-an-fft-in-c-c>.
./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-computebackward-typename-iotype.rst:66: Functions <https://software.intel.com/en-\
us/onemkl-developer-reference-c-status-checking-functions>__ ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-computeforward-typename-iotype.rst:44: transform <https://software.intel.com/en-\
us/onemkl-developer-reference-c-fourier-transform-functions#FORMULA>__ ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-computeforward-typename-iotype.rst:60: C/C++ <https://software.intel.com/en-us/on\ emkl-developer-reference-c-configuring-and-computing-an-fft-in-c-c>
.
./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-computeforward-typename-iotype.rst:65: Functions <https://software.intel.com/en-u\
s/onemkl-developer-reference-c-status-checking-functions>__ ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-getvalue.rst:44: DftiGetValue <https://software.intel.com/en-us/onemkl-developer\
-reference-c-dftigetvalue#BC7944B8-F01C-40C4-8EAA-6C3422C9C838>__ ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-getvalue.rst:58: Functions <https://software.intel.com/en-us/onemkl-developer-ref\ erence-c-status-checking-functions>__
./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-setvalue.rst:44: Params <https://software.intel.com/en-us/onemkl-developer-refere\
nce-c-dftisetvalue>__. ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-setvalue.rst:78: DftiSetValue <https://software.intel.com/en-us/onemkl-developer\
-reference-c-dftisetvalue#7E6778F1-D80D-4CED-82F4-90CF4600FA57>__. ./elements/oneMKL/source/domains/dft/mkl-dft-descriptor-mkl-dft-precision-mkl-dft-domain-setvalue.rst:83: Functions <https://software.intel.com/en-us/onemkl-developer-ref\ erence-c-status-checking-functions>__

Local memory

With the current DPC++, in order to use local memory in a device function called inside a kernel, we have to pass it as argument to the device function. Could DPC++ support static local memory (e.g., something like __local__ a[256]) anywhere in device code? Could it also support dynamic local memory (e.g., something like extern __local__ a[]) with the amount of local memory specified at runtime during kernel launch?

Global variables

Could DPC++ support global variables in device memory and USM, and a memcpy function for copying data from host to the global variable?

DNN: sphinx warnings

python ../../../scripts/element.py html

Ignore the RemovedInSphinx30 warnings, but please fix these or let me know if you would rather I look at them.

/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneDNN/source/index.rst:100: WARNING: Duplicate declaration, dnnl::me\ mory::undef /localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneDNN/source/index.rst:100: WARNING: Duplicate declaration, dnnl::un\ def /localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneDNN/source/index.rst:100: WARNING: Duplicate declaration, dnnl::un\ def /localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneDNN/source/index.rst:100: WARNING: Duplicate declaration, dnnl::un\ def /localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneDNN/source/index.rst:100: WARNING: Duplicate declaration, dnnl::en\ gine

MKL: roadmap milestones

Populate roadmap.rst with some milestones. For example 1st drop of API descriptions in RST. Final drop.

Subgroup size for subgroup primitives

Querying sycl::info::device::sub_group_size gives several numbers. For example, we get 8, 16 and 32 for Gen9. We would like to specify the sub group size and this feature is supported. All three sizes seem to work except that subgroup primitives such as shuffle_down do not work for all sizes. By try and error, we have found that shuffle_down works for 16. Could oneAPI provide a query function for returning the "primitive" subgroup size?

MKL: markup for classes is not correct

onemkl::rng::wichmann_hill
==========================


.. container::


   Wichmann-Hill pseudorandom number generator (a set of 273 basic
   generators) from NAG Numerical Libraries [NAG].


   .. container:: section
      :name: GUID-753F13BA-A3C7-4F24-90F1-14B6279BD95C


      .. rubric:: Syntax
         :class: sectiontitle


      .. container:: dlsyntaxpara


         .. cpp:function::  class wichmann_hill :         internal::engine_base<wichmann_hill>{

         .. cpp:function::  public:

         .. cpp:function::  wichmann_hill (cl::sycl::queue& queue,         std::uint32_t seed, std::uint32_t engine_idx)

         .. cpp:function::  wichmann_hill (cl::sycl::queue& queue,         std::initializer_list<std::uint32_t> seed, std::uint32_t         engine_idx)

         .. cpp:function::  wichmann_hill (const wichmann_hill& other)

         .. cpp:function::  wichmann_hill& operator=(const wichmann_hill&         other)

         .. cpp:function::  ~wichmann_hill()

         .. cpp:function::  }

         .. rubric:: Include Files

DPL: Description of 'Specific API'

Can you write some text to describe algorithms for 'Specific API of oneDPL' If there is a product manual, you can copy from it.

From Timmie:

Yes, I can add that to the section. The description is where I'll also describe the optional parameters to the algorithms, e.g., initial values, comparators, etc. that @akukanov suggested earlier this week to reduce the number of functions we list in this section.

MKL: Malformed tables

localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/lapack/trtrs.rst:111: WARNING: Insufficient data supplied (1 row(s)); no data remaining for table body, required b\
y "list-table" directive.

.. list-table::
   :header-rows: 1

   * -     b
/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/clear_status.rst:36: WARNING: Error parsing content block for the "list-table" directive: uniform two-level bul\
let list expected, but row 2 does not contain the same number of items as row 1 (1 vs 2).

.. list-table::
   :header-rows: 1

   * -  Status
     -  Description
   * -  Successful Execution
   * -  ``status::success``
     -  VM function execution completed successfully
   * -  ``status::not_defined``
/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/create_error_handler.rst:113: WARNING: Error parsing content block for the "list-table" directive: uniform two-\
level bullet list expected, but row 2 does not contain the same number of items as row 1 (1 vs 2).

.. list-table::
   :header-rows: 1

   * -  Status
     -  Description
   * -  Successful Execution
   * -  ``status::success``
     -  VM function execution completed successfully
   * -  ``status::not_defined``
localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/get_mode.rst:33: WARNING: Error parsing content block for the "list-table" directive: uniform two-level bullet \
list expected, but row 2 does not contain the same number of items as row 1 (1 vs 2).

.. list-table::
   :header-rows: 1

   * -  Value of mode
     -  Description
   * -  Accuracy Control
   * -  ``mode::ha``
     -  High accuracy versions of VM functions.
   * -  ``mode::la``

/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/get_status.rst:34: WARNING: Error parsing content block for the "list-table" directive: uniform two-level bulle
t list expected, but row 2 does not contain the same number of items as row 1 (1 vs 2).

.. list-table::
   :header-rows: 1

   * -  Status
     -  Description
   * -  Successful Execution
   * -  ``status::success``
     -  VM function execution completed successfully
   * -  ``status::not_defined``
     -  VM status not define

/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/set_status.rst:36: WARNING: Error parsing content block for the "list-table" directive: uniform two-level bulle
t list expected, but row 2 does not contain the same number of items as row 1 (1 vs 2).

.. list-table::
   :header-rows: 1

   * -  Status
     -  Description
   * -  Successful Execution
   * -  ``status::success``
     -  VM function execution completed successfully
   * -  ``status::not_defined``
     -  VM status not defined
   * -  Warnings
   * -  ``status::accuracy_warning``

localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/setmode.rst:50: WARNING: Error parsing content block for the "list-table" directive: uniform two-level bullet l\
ist expected, but row 2 does not contain the same number of items as row 1 (1 vs 2).

.. list-table::
   :header-rows: 1

   * -  Value of mode
     -  Description
   * -  Accuracy Control
   * -  ``mode::ha``
     -  High accuracy versions of VM functions.
   * -  ``mode::la``

Option to be less OOP in DPC++

Request to provide access to thread id, group id, memory fence, barrier functions, etc. without using an nd_item like object

MKL: add exclude to mkl conf.py

mkl conf.py is not set to ignore inc.rst
Copy patter from to level conf.py

localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/vector_math.inc.rst:47: WARNING: toctree contains reference to nonexisting document 'domains/vm/vm/special-valu\
e-notations'
/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/vector_math.inc.rst:47: WARNING: toctree contains reference to nonexisting document 'domains/vm/vm/vm-mathemati\
cal-functions'
/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/vector_math.inc.rst:47: WARNING: toctree contains reference to nonexisting document 'domains/vm/vm/vm-service-f\
unctions'
/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/vector_math.inc.rst:47: WARNING: toctree contains reference to nonexisting document 'domains/vm/vm/miscellaneou\
s-vm-functions'
/localdisk/work/rscohn1/Projects/spec/oneapi-spec/source/elements/oneMKL/source/domains/vm/vector_math.inc.rst:47: WARNING: toctree contains reference to nonexisting document 'domains/vm/vm/bibliography\
'
/localdisk/work/rscohn1/Projects/spec/oneapi-sp

MKL: remove :name: with GUID

The :name: with GUID are introduced by conversion from DITA, but are not used
.. container:: section
:name: GUID-753F13BA-A3C7-4F24-90F1-14B6279BD95C

DPL: note SYCL C++ limitations

If you are doing a for_each with an execution policy that maps to sycl, the function will inherit the SYCL/DPC++ limitations for kernels. We should note that by referring to the DPC++ spec.

Host callback

Could DPC++ support adding host back functions to an ordered queue for device?

VPL: Clear doxygen warnings

Please try to clear all the doxygen warnings.
cd source/elements/oneVPL
doxygen Doxyfile /build/source/elements/oneVPL/include/vplmemory/vplm.h:339: warning: explicit link request to 'vplm_mem' could not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:339: warning: explicit link request to 'vplm_mem' could not be resolved /build/source/elements/oneVPL/include/vpl/vpl.hpp:30: warning: argument 'optional' of command @param is not found in the argument list \ of vpl::Decode::Decode(VplFourCC src_format, VplTargetDevice device=VPL_TARGET_DEVICE_DEFAULT) /build/source/elements/oneVPL/include/vpl/vpl.hpp:35: warning: The following parameter of vpl::Decode::Decode(VplFourCC src_format, Vpl\ TargetDevice device=VPL_TARGET_DEVICE_DEFAULT) is not documented: parameter 'device' /build/source/elements/oneVPL/include/vplmemory/vplm.h:339: warning: explicit link request to 'vplm_mem' could not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:339: warning: explicit link request to 'vplm_mem' could not be resolved /build/source/elements/oneVPL/include/vpl/vpl.hpp:30: warning: argument 'optional' of command @param is not found in the argument list \ of vpl::Decode::Decode(VplFourCC src_format, VplTargetDevice device=VPL_TARGET_DEVICE_DEFAULT) /build/source/elements/oneVPL/include/vpl/vpl.hpp:35: warning: The following parameter of vpl::Decode::Decode(VplFourCC src_format, Vpl\ TargetDevice device=VPL_TARGET_DEVICE_DEFAULT) is not documented: parameter 'device' /build/source/elements/oneVPL/include/vplmemory/vplm.h:294: warning: explicit link request to 'vplm_on_destroy_cb' could not be resolve\ d /build/source/elements/oneVPL/include/vplmemory/vplm.h:45: warning: explicit link request to '_vplm_status' could not be resolved <unknown>:1: warning: explicit link request to 'vplm_mem' could not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:319: warning: explicit link request to 'info' could not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:320: warning: explicit link request to 'info' could not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:324: warning: explicit link request to 'vplm_create_from_cpu_image' could not be\ resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:368: warning: explicit link request to 'vplm_unref' could not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm.h:380: warning: explicit link request to 'VPLM_PROPERTY_CALLBACK_ON_DESTROY' could\ not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm_opencl.h:102: warning: explicit link request to 'vplm_cl_begin_image_access' could\ not be resolved /build/source/elements/oneVPL/include/vplmemory/vplm_opencl.h:102: warning: explicit link request to 'vplm_cl_end_image_access' could n\ ot be resolved /build/source/elements/oneVPL/include/vplmemory/vplm_vaapi.h:59: warning: explicit link request to 'vplm_cl_begin_image_access' could n\ ot be resolved /build/source/elements/oneVPL/include/vplmemory/vplm_vaapi.h:59: warning: explicit link request to 'vplm_cl_end_image_access' could not\ be resolved

DPL: dpstd::begin

Can you write a sentence or 2 about why you need dpstd::begin vs standard C++ iterators? I think the answer is that by using buffers+dpstd::begin, data can live on the device between invocations. Also, I incorrectly assumed that you could not use C++ iterators so that would be clearer if you explained dpstd::begin.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.