clVector.DotProd Method

Overload List

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

Overload 1: function DotProd(const Vec: TOpenCLMtxVec): Double;

Scalar product of two real arrays.

#NameTypeDescription
1VecTOpenCLMtxVec

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
var a,b: clVector;
prod: double;
begin
    a.CopyFromAray(TDoubleArray.Create(1,2,3,4));
    b.CopyFromAray(TDoubleArray.Create(5,6,7,8));
    prod := a.DotProd(b); // = 1*5 + 2*6 + * 3*7 + 4*8
end;
See Also: clVector.DotProdc

Indexed: function DotProd(const Vec: TOpenCLMtxVec; VecIndex: Integer; Index: Integer; Len: Integer): Double;

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

#NameTypeDescription
1VecTOpenCLMtxVec
2VecIndexInteger
3IndexIntegerstart index
4LenIntegerelement count

Returns: Double

Remarks:

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

Examples
var a,b: TOpenCLVector;
ac: TDoubleArray;
prod: double;
begin
    CreateIt(a,b,c);
    try
        a.CopyFromAray(TDoubleArray.Create(1,2,3,4));
        b.CopyFromAray(TDoubleArray.Create(5,6,7,8));
        c.Size(3);
        c.DotProd(0, a,b); // c[0] = 1*5 + 2*6 + * 3*7 + 4*8
        c.DotProd(1, a,b); // c[1] = 1*5 + 2*6 + * 3*7 + 4*8
        c.DotProd(2, a,b); // c[2] = 1*5 + 2*6 + * 3*7 + 4*8
        c.CopyToArray(ac); //ac = [70, 70, 70]
    finally
        FreeIt(a,b,c);
    end;
end;

Overload 2: procedure DotProd(DstIndex: Integer; const Vec1: TOpenCLMtxVec; const Vec2: TOpenCLMtxVec; const Buffer: TOpenCLMtxVec);

Scalar product of two real arrays.

#NameTypeDescription
1DstIndexIntegerdestination start index
2Vec1TOpenCLMtxVec
3Vec2TOpenCLMtxVec
4BufferTOpenCLMtxVec

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.

See Also: clVector.DotProdc

Overload 3: procedure DotProd(DstIndex: Integer; const Vec1: TOpenCLMtxVec; const Vec2: TOpenCLMtxVec; ConjVec: Boolean; const Buffer: TOpenCLMtxVec);

Scalar product of two real or complex arrays.

#NameTypeDescription
1DstIndexIntegerdestination start index
2Vec1TOpenCLMtxVec
3Vec2TOpenCLMtxVec
4ConjVecBoolean
5BufferTOpenCLMtxVec

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.

Examples
var a,b: clMatrix;
prod: double;
begin
    a.Size(2,2, clFloat, false);
    b.Size(2,2, clFloat, false);
    a.CopyFromAray(TDoubleArray.Create(1,2,3,4));
    b.CopyFromAray(TDoubleArray.Create(5,6,7,8));
    prod := a.DotProd(b); // = 1*5 + 2*6 + * 3*7 + 4*8
end;