CUDALink`
CUDALink`

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 allclose all

Basic Examples  (7)

First, load the CUDALink application:

This performs the dot product:

This performs matrix-vector multiplication:

Contents of CUDAVector:

Multiply a CUDA matrix and a CUDA sparse vector

Contents of CUDAVector:

Multiply two CUDA matrices, result is a CUDA matrix:

Contents of CUDAMatrix:

Multiply two CUDA sparse matrices, result is a CUDA sparse matrix:

Contents of CUDASparseMatrix:

Multiply CUDA sparse matrix with CUDA matrix, result is a CUDA matrix:

Contents of CUDAMatrix:

Scope  (3)

For large vectors, performing operations on the GPU can be quicker.

This creates a large CUDA vector of type "Real64":

This performs dot product on the GPU and measures timing:

This performs dot product on the CPU and measures timing:

Performing dot product on the GPU is faster:

Performance can be improved by using CUDA vector of type "Real32":

Performing dot product of CUDA vector of "Real32" on GPU is even faster:

CUDADot works with vectors in list form:

CUDADot supports CUDAMemory:

This multiplies the two input memories together :

Memory is retrieved using CUDAMemoryGet:

Memory must be freed with CUDAMemoryUnload :

Wolfram Research (2010), CUDADot, Wolfram Language function, https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html.

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_2023_cudadot, author="Wolfram Research", title="{CUDADot}", year="2010", howpublished="\url{https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html}", note=[Accessed: 19-March-2024 ]}

BibLaTeX

@online{reference.wolfram_2023_cudadot, organization={Wolfram Research}, title={CUDADot}, year={2010}, url={https://reference.wolfram.com/language/CUDALink/ref/CUDADot.html}, note=[Accessed: 19-March-2024 ]}