TOpenCLVector.DotProd Method

Overload List

#SignatureDescription
1Double DotProd(TOpenCLMtxVec Vec)Scalar product of two real arrays.
└ indexed: Double DotProd(TOpenCLMtxVec Vec, Int32 VecIndex, Int32 Index, Int32 Len)
2void DotProd(Int32 DstIndex, TOpenCLMtxVec Vec1, TOpenCLMtxVec Vec2, TOpenCLMtxVec Buffer)Scalar product of two real arrays.
3void DotProd(Int32 DstIndex, TOpenCLMtxVec Vec1, TOpenCLMtxVec Vec2, Boolean ConjVec, TOpenCLMtxVec Buffer)Scalar product of two real or complex arrays.

Overload 1: Double DotProd(TOpenCLMtxVec Vec)

Scalar product of two real arrays.

#NameTypeDescription
1VecTOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix

Returns: Double

Remarks:

Calculates the dot product (scalar value) of the calling object and Vec object and returns a real scalar value. The dot product is defined by the equation:

VV=k=0Length1V[k]V[k]\text{V}\cdot \text{V} = \sum _{k=0} ^{\text{Length}-1}\text{V}[k]\cdot \text{V}[k]

Both objects must be of equal size. If they are not, the method will return the dot product of the largest sub-array.

Examples
using Dew.Math;
using Dew.Math.Units;

namespace Dew.Examples
{
    void Example()
    {
        TOpenCLVector a,b;
        clMtxVec.CreateIt(out a, out b);
        try
        {
            a.CopyFromArray(new double[] {1,2,3,4});
            b.CopyFromArray(new double[] {5,6,7,8});
            double prod = a.DotProd(b); // = 1*5 + 2*6 + * 3*7 + 4*8
        }
        finally
        {
            clMtxVec.FreeIt(ref a,ref b);
        }
    }
}

Indexed: Double DotProd(TOpenCLMtxVec Vec, Int32 VecIndex, Int32 Index, Int32 Len)

Returns the scalar product between Vec elements [VecIndex]..[VecIndex+Len-1] and calling object elements [Index]..[Index+Len-1].

#NameTypeDescription
1VecTOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix
2VecIndexInt32
3IndexInt32start index
4LenInt32element count

Returns: Double

Remarks:

An exception is raised if Vec and calling object Dew.Math.TOpenCLBase.Complex property is True. An exception is raised if array borders are overrun or underrun.

Overload 2: void DotProd(Int32 DstIndex, TOpenCLMtxVec Vec1, TOpenCLMtxVec Vec2, TOpenCLMtxVec Buffer)

Scalar product of two real arrays.

#NameTypeDescription
1DstIndexInt32destination start index
2Vec1TOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix
3Vec2TOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix
4BufferTOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix

Result: stored in self (calling object)

Remarks:

Calculates the dot product (scalar value) of the calling object and Vec object and returns a real scalar value. The result is stored at specified index in the calling vector in the GPU memory. This variant of the function is non-blocking (faster), because the result does not have to be copied to the CPU memory to be used.

The dot product is defined by the equation:

VV=k=0Length1V[k]V[k]\text{V}\cdot \text{V} = \sum _{k=0} ^{\text{Length}-1}\text{V}[k]\cdot \text{V}[k]

Both objects must be of equal size. If they are not, the method will return the dot product of the largest sub-array.

Examples
using Dew.Math;
using Dew.Math.Units;

namespace Dew.Examples
{
    void Example()
    {
        TOpenCLVector a,b,c;
        double[] ac;
        clMtxVec.CreateIt(out a, out b, out c);
        try
        {
            a.SetIt(false, new double[] {1,2,3,4});
            b.SetIt(false, new double[] {5,6,7,8});
            c.DotProd(0, a, b); // c[0] = 1*5 + 2*6 + * 3*7 + 4*8
            c.DotProd(1, a, b); // c[0] = 1*5 + 2*6 + * 3*7 + 4*8
            c.DotProd(2, a, b); // c[0] = 1*5 + 2*6 + * 3*7 + 4*8
            c.CopyToArray(ac); //ac = [70, 70, 70]
        }
        finally
        {
            clMtxVec.FreeIt(ref a,ref b, ref c);
        }
    }
}

Overload 3: void DotProd(Int32 DstIndex, TOpenCLMtxVec Vec1, TOpenCLMtxVec Vec2, Boolean ConjVec, TOpenCLMtxVec Buffer)

Scalar product of two real or complex arrays.

#NameTypeDescription
1DstIndexInt32destination start index
2Vec1TOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix
3Vec2TOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix
4ConjVecBoolean
5BufferTOpenCLMtxVecsource TOpenCLVector or TOpenCLMatrix

Result: stored in self (calling object)

Remarks:

Calculates the dot product (scalar value) of the Vec1 and Vec2 stores the result in calling vector at position DstIndex. ConjVec parameter is ignored if data is real. If ConjVec is true, the function computes: result = Vec1*conj(Vec2)

The dot product is defined by the equation:

VV=k=0Length1V[k]V[k]\text{V}\cdot \text{V} = \sum _{k=0} ^{\text{Length}-1}\text{V}[k]\cdot \text{V}[k]

Both objects must be of equal size. If they are not, the method will return the dot product of the largest sub-array.