CUDADot[cuvec1,cuvec2]
gives the dot product of CUDA vectors cuvec1 and cuvec2.
CUDADot[cumat,cuvec]
gives the matrix-vector product of CUDA matrix cumat and CUDA vector cuvec.
CUDADot[cumat,cuspvec]
gives the matrix-vector product of CUDA matrix cumat and CUDA sparse vector cuspvec.
CUDADot[cumat1, cumat2]
gives the matrix-matrix product of CUDA matrices cumat1 and cumat2.
CUDADot[cuspmat1, cuspmat2]
gives the matrix-matrix product of CUDA sparse matrices cuspmat1 and cuspmat2.
CUDADot[cuspmat, cumat]
gives the matrix-matrix product of CUDA sparse matrix cuspmat and CUDA matrix and cumat.
CUDADot[vec1,vec2]
gives the dot product of vec1 and vec2.
CUDADot[mat,vec]
gives the matrix-vector product of mat and vec.
CUDADot[mat1, mat2]
gives the matrix-matrix product of mat1 and mat2.
CUDADot
CUDADot[cuvec1,cuvec2]
gives the dot product of CUDA vectors cuvec1 and cuvec2.
CUDADot[cumat,cuvec]
gives the matrix-vector product of CUDA matrix cumat and CUDA vector cuvec.
CUDADot[cumat,cuspvec]
gives the matrix-vector product of CUDA matrix cumat and CUDA sparse vector cuspvec.
CUDADot[cumat1, cumat2]
gives the matrix-matrix product of CUDA matrices cumat1 and cumat2.
CUDADot[cuspmat1, cuspmat2]
gives the matrix-matrix product of CUDA sparse matrices cuspmat1 and cuspmat2.
CUDADot[cuspmat, cumat]
gives the matrix-matrix product of CUDA sparse matrix cuspmat and CUDA matrix and cumat.
CUDADot[vec1,vec2]
gives the dot product of vec1 and vec2.
CUDADot[mat,vec]
gives the matrix-vector product of mat and vec.
CUDADot[mat1, mat2]
gives the matrix-matrix product of mat1 and mat2.
Details and Options
- The CUDALink application must be loaded using Needs["CUDALink`"].
- CUDADot works on CUDA matrix and CUDA vectors of types "Real64", "ComplexReal64", "Real32" and "ComplexReal32".
- CUDADot works only on general vectors types such as "Float", "Double", ….
- CUDADot does not work on fixed vector structure types like "Float[2]", "Integer32[2]", ….
Examples
open all close allBasic Examples (7)
First, load the CUDALink application:
Needs["CUDALink`"]This performs the dot product:
cuvec = CUDAVector[Range[10], "Real64"];CUDADot[cuvec, cuvec]This performs matrix-vector multiplication:
cumat = CUDAMatrix[Table[i, {i, 10}, {j, 10}], "Real64"];
cuvec = CUDAVector[Range[10], "Real64"];
res = CUDADot[cumat, cuvec];Contents of CUDAVector:
Normal[Normal[res]]//MatrixFormMultiply a CUDA matrix and a CUDA sparse vector
cuspvec = CUDASparseVector[SparseArray[Table[{2 ^ i} -> 1., {i, 12}]]];cumat = CUDAMatrix[ConstantArray[1, {5, 2 ^ 12}], "Real64"];res = CUDADot[cumat, cuspvec]Contents of CUDAVector:
Normal[Normal[res]]Multiply two CUDA matrices, result is a CUDA matrix:
A = CUDAMatrix[RandomReal[1, {3, 3}]];
B = CUDAMatrix[RandomReal[1, {3, 3}]];res = CUDADot[A, B]Contents of CUDAMatrix:
Normal[Normal[res]]//MatrixFormMultiply two CUDA sparse matrices, result is a CUDA sparse matrix:
sm = CUDASparseMatrix[SparseArray[Table[{2 ^ i, 2 ^ i} -> 2, {i, 4}]], "Real32"];res = CUDADot[sm, sm]Contents of CUDASparseMatrix:
Normal[Normal[res]]//MatrixFormMultiply CUDA sparse matrix with CUDA matrix, result is a CUDA matrix:
cuspmat = CUDASparseMatrix[SparseArray[{{1, 1} -> 1., {2, 2} -> 2., {3, 3} -> 3., {4, 4} -> 4.}]];cumat = CUDAMatrix[ConstantArray[1, {4, 3}], "Real64"]res = CUDADot[cuspmat, cumat]Contents of CUDAMatrix:
MatrixForm[Normal[Normal[res]]]Scope (3)
For large vectors, performing operations on the GPU can be quicker.
This creates a large CUDA vector of type "Real64":
Needs["CUDALink`"]data = RandomReal[1, {2 ^ 25}];
cudavector = CUDAVector[data, "Real64"];This performs dot product on the GPU and measures timing:
gpuRes = RepeatedTiming[CUDADot[cudavector, cudavector]]This performs dot product on the CPU and measures timing:
cpuRes = RepeatedTiming[Dot[data, data]]Performing dot product on the GPU is faster:
First[cpuRes] / First[gpuRes]Performance can be improved by using CUDA vector of type "Real32":
cudavector32 = CUDAVector[data, "Real32"];gpuRes32 = RepeatedTiming[CUDADot[cudavector32, cudavector32]]Performing dot product of CUDA vector of "Real32" on GPU is even faster:
First[cpuRes] / First[gpuRes32]CUDADot works with vectors in list form:
CUDADot[{1., 2., 3.}, {1., 2., 3.}]CUDADot supports CUDAMemory:
A = CUDAMemoryLoad[RandomReal[1, {3, 3}]];
B = CUDAMemoryLoad[RandomReal[1, {3, 3}]];This multiplies the two input memories together :
res = CUDADot[A, B]Memory is retrieved using CUDAMemoryGet:
CUDAMemoryGet[res]//MatrixFormMemory must be freed with CUDAMemoryUnload :
CUDAMemoryUnload[A, B]Related Guides
-
▪
- CUDALink
Text
Wolfram Research (2010), CUDADot, Wolfram Language function, https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html.
CMS
Wolfram Language. 2010. "CUDADot." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html.
APA
Wolfram Language. (2010). CUDADot. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html
BibTeX
@misc{reference.wolfram_2026_cudadot, author="Wolfram Research", title="{CUDADot}", year="2010", howpublished="\url{https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_cudadot, organization={Wolfram Research}, title={CUDADot}, year={2010}, url={https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html}, note=[Accessed: 13-June-2026]}