Опубликован: 11.10.2012 | Доступ: свободный | Студентов: 307 / 59 | Длительность: 07:36:00
Специальности: Программист, Системный архитектор
Лекция 2:
Библиотеки Intel. Intel® Math Kernel Library
DFL – Data Fitting Library
Векторизованные функции, предназначенные для фитирования данных.
Структура
| Сплайны | Тип сплайна | Граничные условия | Внутренние условия |
|---|---|---|---|
| Линейные | 1-я производная | ||
| Квадратичные | Свободные | 2-я производная | |
| Кубические | Натуральные, эрмитовы, Бесселя, Акимы | 1-я производная на левой/правой границах интервала | Массив узлов |
| Кусочно-постоянные | Непрерывные слева, непрерывные справа | Периодические | |
| Определенные пользователем |
Производительность
Примеры
Вычисление скалярного произведения
#include <windows.h>
#include <stdio.h>
#include "mkl.h"
#include "gettimeofday.h"
#define N 100000000
double a[N + 1], b[N + 1];
int i;
double gDotProduct = 0;
int main()
{
// initialize vectors
for (i = 0; i < N; i++)
{
a[i] = 1.034; b[i] = 1.057;
}
printf("Computed value of vector sum: ");
gDotProduct = cblas_ddot(N, &a, 1, &b, 1);
//print dot product
printf("sum = %f\n", gDotProduct);
}Вычисление собственных значений
program eigenLAPACK
integer, parameter :: NIN = 5, NOUT = 6
integer :: I, IFAIL, INFO, J, N
character(1) :: UPLO='U'
real, allocatable, dimension(:,:) :: A
real, allocatable, dimension(:) :: D
real, allocatable, dimension(:) :: E, TAU
real, allocatable, dimension(:) :: WORK
real, allocatable, dimension(:,:) :: Z
external f06qfe, sorgtr, ssteqr, ssytrd, x04cae
write(NOUT, *) 'N=?'
read(NIN,*) N
allocate(D(N))
LWORK = 64 * N
allocate(WORK(LWORK))
allocate(E(N-1))
allocate(TAU(N-1))
LDA = N
allocate(A(LDA, N))
LDZ = N
allocate(Z(LDZ, N))
allocate(TAU(N-1))
LDA = N
allocate(A(LDA, N))
LDZ = N
allocate(Z(LDZ, N))
!
! Initialization of upper triangular part of A
!
do i=1, N
do j=i, N
a(i, j)=3.8*i-2.*j
enddo
enddo
!
! Reduce A to tridiagonal form
!
call ssytrd(UPLO, N, A, LDA, D, E, TAU, WORK, LWORK, INFO)
!
! Copy A into Z
!
call f06qfe(UPLO, N, N, A, LDA, Z, LDZ)
!
! Form Q explicitly, storing the result in Z
!
call sorgtr(UPLO, N, Z, LDZ, TAU, WORK, LWORK, INFO)
!
! Calculate all the eigenvalues and eigenvectors of A
!
call ssteqr('V', N, D, E, Z, LDZ, WORK, INFO)
write(NOUT,*)
if(INFO >0) then
write(NOUT,*) 'Failure to converge.'
else
!
! Uncomment to print eigenvalues and eigenvectors
!
!write(NOUT,*) 'Eigenvalues'
!write(NOUT, "(3X,(8F12.4))") (D(I),I=1,N)
!IFAIL = 0
!
!call x04cae('General', ' ', N, N, Z, LDZ, 'Eigenvectors', IFAIL)
end if
deallocate(D)
deallocate(WORK)
deallocate(E)
deallocate(TAU)
deallocate(A)
deallocate(Z)
end
