BLAS Code Examples

Example. Using BLAS Level 1 Function

The following example illustrates a call to the BLAS Level 1 function sdot. This function performs a vector-vector operation of computing a scalar product of two single-precision real vectors x and y.

Parameters

 

n

Specifies the number of elements in vectors x and y.

incx

Specifies the increment for the elements of x.

incy

Specifies the increment for the elements of y.
program dot_main
real x(10), y(10), sdot, res
integer n, incx, incy, i
external sdot
n = 5
incx = 2
incy = 1
do i = 1, 10
  x(i) = 2.0e0
  y(i) = 1.0e0
end do
res = sdot (n, x, incx, y, incy)
print*, `SDOT = `, res
end

As a result of this program execution, the following line is printed:

SDOT = 10.000

Example. Using BLAS Level 1 Routine

The following example illustrates a call to the BLAS Level 1 routine scopy. This routine performs a vector-vector operation of copying a single-precision real vector x to a vector y.

Parameters

 

n

Specifies the number of elements in vectors x and y.

incx

Specifies the increment for the elements of x.

incy

Specifies the increment for the elements of y.
 
program copy_main
real x(10), y(10)
integer n, incx, incy, i
n = 3
incx = 3
incy = 1
do i = 1, 10
  x(i) = i
end do
call scopy (n, x, incx, y, incy)
print*, `Y = `, (y(i), i = 1, n)
end

As a result of this program execution, the following line is printed:

Y = 1.00000 4.00000 7.00000

Example. Using BLAS Level 2 Routine

The following example illustrates a call to the BLAS Level 2 routine sger. This routine performs a matrix-vector operation

a :=  alpha*x*y' + a.

Parameters

 

alpha

Specifies a scalar alpha.

x

m-element vector.

y

n-element vector.

a

m-by-n matrix.
program ger_main
real a(5,3), x(10), y(10), alpha
integer m, n, incx, incy, i, j, lda
m = 2
n = 3
lda = 5
incx = 2
incy = 1
alpha = 0.5
do i = 1, 10
  x(i) = 1.0
  y(i) = 1.0
end do
do i = 1, m
  do j = 1, n
    a(i,j) = j
  end do
end do
call sger (m, n, alpha, x, incx, y, incy, a, lda)
print*, `Matrix A: `
do i = 1, m
  print*, (a(i,j), j = 1, n)
end do
end

As a result of this program execution, matrix a is printed as follows:

Matrix A:

1.50000 2.50000 3.50000

1.50000 2.50000 3.50000

Example. Using BLAS Level 3 Routine

The following example illustrates a call to the BLAS Level 3 routine ssymm. This routine performs a matrix-matrix operation

c :=  alpha*a*b' + beta*c.

Parameters

 

alpha

Specifies a scalar alpha.

beta

Specifies a scalar beta.

a

Symmetric matrix

b

m-by-n matrix

c

m-by-n matrix
program symm_main
real a(3,3), b(3,2), c(3,3), alpha, beta
integer m, n, lda, ldb, ldc, i, j
character uplo, side
uplo = 'u'
side = 'l'
m = 3
n = 2
lda = 3
ldb = 3
ldc = 3
alpha = 0.5
beta = 2.0
do i = 1, m
  do j = 1, m
    a(i,j) = 1.0
  end do
end do
do i = 1, m
  do j = 1, n
    c(i,j) = 1.0
    b(i,j) = 2.0
  end do
end do
call ssymm (side, uplo, m, n, alpha,
a, lda, b, ldb, beta, c, ldc)
print*, `Matrix C: `
do i = 1, m
  print*, (c(i,j), j = 1, n)
end do
end

As a result of this program execution, matrix c is printed as follows:

Matrix C:

5.00000 5.00000

5.00000 5.00000

5.00000 5.00000

The following example illustrates a call from a C program to the Fortran version of the complex BLAS Level 1 function zdotc(). This function computes the dot product of two double-precision complex vectors.

Einzelheiten zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.