.. _onemkl_blas_sdsdot:

sdsdot
======

Computes a vector-vector dot product with double precision.

Description
***********

The ``sdsdot`` routines perform a dot product between two vectors with double precision. 
The operation is defined as:

.. math::

      \mathrm{result} = sb + \sum_{i=1}^n X_i Y_i


sdsdot (Buffer Version)
***********************

Syntax
------

.. code-block:: cpp

   namespace oneapi::mkl::blas::column_major {
       void sdsdot(sycl::queue &queue,
                   std::int64_t n,
                   float sb,
                   sycl::buffer<float,1> &x,
                   std::int64_t incx,
                   sycl::buffer<float,1> &y,
                   std::int64_t incy,
                   sycl::buffer<float,1> &result)
   }

.. code-block:: cpp

   namespace oneapi::mkl::blas::row_major {
       void sdsdot(sycl::queue &queue,
                   std::int64_t n,
                   float sb,
                   sycl::buffer<float,1> &x,
                   std::int64_t incx,
                   sycl::buffer<float,1> &y,
                   std::int64_t incy,
                   sycl::buffer<float,1> &result)
   }

Input Parameters
----------------

queue
   The queue where the routine should be executed.

n
   Number of elements in vectors ``x`` and ``y``.

sb
   Single precision scalar to be added to the dot product.

x
   Buffer holding input vector ``x``. Size of the buffer must be at
   least (1 + (``n`` - 1)\*abs(``incx``)). See ref:`matrix-storage` for more details.

incx
   Stride of vector ``x``.

y
   Buffer holding input vector ``y``. Size of the buffer must be at
   least (1 + (``n`` - 1)\*abs(``incxy``)). See ref:`matrix-storage` for more details.

incy
   Stride of vector ``y``.

Output Parameters
-----------------

result
   Buffer where the result (a scalar) will be stored. If ``n`` < 0
   the result is ``sb``.


sdsdot (USM Version)
***********************

Syntax
------

.. code-block:: cpp

   namespace oneapi::mkl::blas::column_major {
       sycl::event sdsdot(sycl::queue &queue,
                          std::int64_t n,
                          float sb,
                          const float *x,
                          std::int64_t incx,
                          const float *y,
                          std::int64_t incy,
                          float *result,
                          const std::vector<sycl::event> &dependencies = {})
   }

.. code-block:: cpp

   namespace oneapi::mkl::blas::row_major {
       sycl::event sdsdot(sycl::queue &queue,
                          std::int64_t n,
                          float sb,
                          const float *x,
                          std::int64_t incx,
                          const float *y,
                          std::int64_t incy,
                          float *result,
                          const std::vector<sycl::event> &dependencies = {})
   }

Input Parameters
----------------

queue
   The queue where the routine should be executed.

n
   Number of elements in vectors ``x`` and ``y``.

sb
   Single precision scalar to be added to the dot product.

x
   Pointer to input vector ``x``. Size of the array must be at
   least (1 + (``n`` - 1)\*abs(``incx``)). See ref:`matrix-storage` for more details.

incx
   Stride of vector ``x``.

y
   Pointer to the input vector ``y``. Size of the array must be at
   least (1 + (``n`` - 1)\*abs(``incy``)). See ref:`matrix-storage` for more details.

incy
   Stride of vector ``y``.

dependencies
   List of events to wait for before starting computation, if any.
   If omitted, defaults to no dependencies.

Output Parameters
-----------------

result
   Pointer to where the result (a scalar) will be stored. If ``n``
   < 0 the result is ``sb``.

Return Values
-------------

Output event to wait on to ensure computation is complete.