Вавренюк Основы программирования МРР-АРХИТЕКТУР 2010
.pdfprintf("S= %f step= %f\n",s,step);
printf("Simpson1 begins\n"); t1=timer_now();
for(ii=0;ii<10;ii++) |
|
|
{ |
|
|
n=500; |
|
|
intlast=12345.; |
|
|
do |
|
|
{ |
|
|
integr=0.0; |
|
|
n=n*2; |
|
|
step=(xk-x0)/(n-1); |
|
|
x[0]=x0; |
|
|
for(i=1;i<n;i++) |
|
|
{ |
|
|
x[i]=x[i-1]+step; |
|
|
y[i]=sin(x[i]); |
|
|
} |
|
|
/* vsin2sf(n,y,x,1,1); |
*/ |
|
vsimpsonsf(n,step,y,x,1,1); |
||
integr=y[n]; |
|
|
delta=intlast-integr; |
|
|
intlast=integr; |
|
|
printf(" |
delta=%f\n",delta); |
} while (fabs(delta)>eps);
}
t2=timer_now();
printf("TIME1*10= %d \n",(t2-t1)); printf("integr_summa=%f\n",integr);
}
81
Приложение 2
Библиотека некоторых функций Параллельного Си
Библиотека «The Parallel С Run Time Library» и «Optimized DSP/Vector Library for TMS320C40/C30» –
набор компилируемых функций, которые обеспечивают выполнение операций, не включенных в язык Си. Некоторые из них приведены ниже в таблице. Функции, обеспечивающие коммуникацию по linkканалам, подробно описаны в основном тексте.
Эта библиотека содержит набор функций, которые могут выполняться в программе, но не включаются сами собой. Такие функции, прежде всего, двух типов: стандартный набор функций языка Си, а также специальные канальные функции, обслуживающие обмен информацией между процессорами. Для подключения соответствующей библиотеки функций необходимо использовать стандартный для Си оператор include <заголовок.h >. В табл. П.2.1 приведены некоторые из этих функций с указанием имени заголовочного файла.
|
|
|
|
|
|
|
Таблица П.2.1 |
|
|
|
|
|
|
|
|
|
|
№ |
Имя |
Краткое описание |
Обращение и типы аргу- |
Описание аргументов |
Заголовочный |
|||
функ- |
||||||||
ментов (прототип) |
файл |
|||||||
|
ции |
|
|
|
|
|||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
1 |
abs |
Абсолютная |
вели- |
int abs(int arg) |
|
<stdlib.h> |
||
|
|
чина |
целого |
аргу- |
|
|
|
|
|
|
мента |
|
|
|
|
|
|
2 |
sin |
Синус |
аргумента, |
double sin(double x) |
|
<math.h> |
||
|
|
заданного в |
радиа- |
|
|
|
||
|
|
нах |
|
|
|
|
|
|
|
|
|
|
|
Продолжение 1 табл. П.2.1 |
|
|
|
|
|
|
|
|
|
|
Имя |
|
|
Обращение и типы аргу- |
|
|
Заголовочный |
№ |
функ- |
Краткое описание |
Описание аргументов |
|
|||
ментов (прототип) |
|
файл |
|||||
|
ции |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
cos |
Косинус аргумента, |
double cos(double x) |
|
|
<math.h> |
|
|
|
заданного в |
радиа- |
|
|
|
|
|
|
нах |
|
|
|
|
|
4 |
tan |
Тангенс аргумента, |
double tan(double x) |
|
|
<math.h> |
|
|
|
заданного в |
радиа- |
|
|
|
|
|
|
нах |
|
|
|
|
|
5 |
exp |
Вычисление |
экспо- |
double exp(double x) |
|
|
<math.h> |
|
|
ненты |
|
|
|
|
|
6 |
fabs |
Абсолютная |
вели- |
double fabs(double arg) |
|
|
<math.h> |
|
|
чина вещественного |
|
|
|
|
|
|
|
аргумента |
|
|
|
|
|
7 |
fmod |
Остаток от деления |
double fmod(double x, |
|
|
<math.h> |
|
|
|
x/y |
|
double y) |
|
|
|
8 |
fprintf |
Форматируемый |
Стандартные для языка |
|
|
<stdio.h> |
|
|
|
вывод |
|
Си |
|
|
|
9 |
log |
Вычисление |
лога- |
double log(double x) |
|
|
<math.h> |
|
|
рифма |
|
|
|
|
|
10 |
log10 |
Вычисление |
деся- |
double log10(double x) |
|
|
<math.h> |
|
|
тичного логарифма |
|
|
|
|
|
11 |
timer_n |
Возвращает |
значе- |
int timer_now() |
Разрешение таймера – одна миллисе- |
<timer.h> |
|
|
ow() |
ние таймера |
|
|
кунда, т.е. 1000 тиков за секунду |
|
|
|
|
|
|
|
|
|
Продолжение 2 табл. П.2.1 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
Имя |
|
|
|
|
|
Обращение и типы аргу- |
|
Заголовочный |
||
№ |
функ- |
|
Краткое описание |
|
Описание аргументов |
||||||
|
|
ментов (прототип) |
|
|
файл |
||||||
|
ции |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
12 |
vsin2sf |
|
Синус |
векто- |
|
void vsin2sf(int n, float*x, |
n – длина входного/выходного векто- |
<dspvec.h> |
|||
|
|
|
ра/массива |
|
|
|
float*y, intdx, intdy) |
ра; |
x, |
y |
должны |
|
|
|
|
|
|
|
|
x – выходной вектор; |
быть |
массива- |
|
|
|
|
|
|
|
|
|
y – входной вектор; |
ми! |
|
|
|
|
|
|
|
|
|
|
dx, dy – шаг внутри векторов, обычно |
|
|
|
|
|
|
|
|
|
|
|
равен 1 |
|
|
|
13 |
vcos2sf |
|
Косинус |
векто- |
|
void vsin2sf(int n, float*x, |
n – длина входного/выходного векто- |
<dspvec.h> |
|||
|
|
|
ра/массива |
|
|
|
float*y, intdx, intdy) |
ра; |
x, |
y |
должны |
|
|
|
|
|
|
|
|
x – выходной вектор; |
быть |
массива- |
|
|
|
|
|
|
|
|
|
y – входной вектор; |
ми! |
|
|
|
|
|
|
|
|
|
|
dx, dy – шаг внутри векторов, обычно |
|
|
|
|
|
|
|
|
|
|
|
равен 1 |
|
|
|
14 |
vtan2sf |
|
Тангенс |
векто- |
|
|
void vsin2sf(int n, float*x, |
n – длина входного/выходного векто- |
<dspvec.h> |
||
|
|
|
ра/массива |
|
|
float*y, intdx, intdy) |
ра; |
x, |
y |
должны |
|
|
|
|
|
|
|
|
|
x – выходной вектор; |
быть |
массива- |
|
|
|
|
|
|
|
|
|
y – входной вектор; |
ми! |
|
|
|
|
|
|
|
|
|
|
dx, dy – шаг внутри векторов, обычно |
|
|
|
|
|
|
|
|
|
|
|
равен 1 |
|
|
|
|
|
|
|
|
Продолжение 3 табл. П.2.1 |
||
|
|
|
|
|
|
|
|
|
Имя |
Краткое описа- |
Обращение и типы аргу- |
|
Заголовочный |
||
№ |
функ- |
Описание аргументов |
|||||
ние |
|
ментов (прототип) |
файл |
||||
|
ции |
|
|
||||
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
15 |
vsimp- |
Вычисление |
ин- |
vsimpsonsf(n,step,y,x,1,1) |
n – размерность входного и выходного |
<dspvec.h> |
|
|
sonf |
теграла методом |
n-int |
векторов; |
|
||
|
|
Симпсона |
|
step,x,y-float |
step – шаг интегрирования; |
|
|
|
|
|
|
|
y – выходной вектор частичных сумм; |
|
|
|
|
|
|
|
x – входной вектор; |
|
|
|
|
|
|
|
две единицы – значения шага по x и y, |
|
|
|
|
|
|
|
которые рекомендуется задавать = 1 |
|
|
16 |
vtrapzf |
Вычисление |
ин- |
vtrapzf(n,step,y,x,1,1) |
n – размерность входного и выходного |
<dspvec.h> |
|
|
|
теграла методом |
n-int |
векторов; |
|
||
|
|
трапеций |
|
step,x,y-float |
step – шаг интегрирования; |
|
|
|
|
|
|
|
y – выходной вектор частичных сумм; |
|
|
|
|
|
|
|
x – входной вектор; |
|
|
|
|
|
|
|
две единицы – значения шага по x и y, |
|
|
|
|
|
|
|
которые рекомендуется задавать = 1 |
|
|
17 |
vlinav- |
Вычисление |
|
vlinaver- |
n – длина векторов; |
|
|
|
eragesf |
взвешенного |
|
agesf(n,alpha,x,y,dx,dy) |
alpha – скалярная величина «взвеши- |
|
|
|
|
среднего |
двух |
int n,dx,dy |
вания»; |
|
|
|
|
векторов |
|
float *x,*y |
x – входной и выходной вектор; |
|
|
|
|
|
|
float alpha |
y – входной вектор; |
|
|
|
|
|
|
|
dx – шаг для x; |
|
|
|
|
|
|
|
dy – шаг для y |
|
|
|
|
|
|
|
Окончание табл. П.2.1 |
||
|
|
|
|
|
|
|
|
|
|
Имя |
Краткое описа- |
Обращение и типы аргу- |
|
Заголовочный |
|||
№ |
функ- |
Описание аргументов |
||||||
ние |
|
ментов (прототип) |
файл |
|||||
|
ции |
|
|
|||||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
18 |
rand |
Генератор |
|
псев- |
int rand(void) |
Функция возвращает псевдослучайное |
<stdlib.h> |
|
|
|
дослучайных |
|
целое значение в интервале от нуля до |
|
|||
|
|
целых чисел |
|
|
RAND_MAX, которое определено в |
|
||
|
|
|
|
|
|
<stdlib.h> и равно 2 31 – 1 |
|
|
19 |
srand |
Генератор |
псевдо- |
void arand(unsigned int seed) |
Использует свой аргумент, например |
<stdlib.h> |
||
|
|
случайных |
целых |
|
seed, для изменения последовательно- |
|
||
|
|
чисел, |
исполь- |
|
сти возвращаемых псевдослучайных |
|
||
|
|
зующий начальное |
|
чисел |
|
|||
|
|
значение |
|
|
|
|
|
|
20 |
vprodsf |
Вычисление |
|
void vprodsf(n,x.dx) |
n – длина входного вектора; |
<dspvec.h> |
||
|
|
среднего |
геомет- |
float vprodsf(n,x.dx) |
x – входной вектор; |
|
||
|
|
рического |
|
|
int n,dx; |
dx – шаг выборки элементов вектора x |
|
|
|
|
|
|
|
float *x |
|
|
|
21 |
vmul3f |
Умножение |
двух |
void vmul3f(n, z, x, y) |
n – длина входного и выходного век- |
<dspvec.h> |
||
|
|
вещественных |
int n; |
торов; |
|
|||
|
|
векторов |
|
|
float *z; |
z – выходной вектор; |
|
|
|
|
|
|
|
float *x; |
x – первый входной вектор; |
|
|
|
|
|
|
|
float *y; |
у – второй входной вектор |
|
|
22 |
mvmulf |
Умножение |
мат- |
void mvmulf(r,c,m,t,s) |
r – число строк; |
<dspvec.h> |
||
|
|
рицы на вектор |
int r,c; |
c – число столбцов; |
|
|||
|
|
|
|
|
m – входная матрица; |
|
||
|
|
|
|
|
float *m,*t,*s |
t – результирующий вектор; |
|
|
|
|
|
|
|
|
s – входной вектор |
|
А.Б. ВАВРЕНЮК, В.В. МАКАРОВ, Е.В. ЧЕПИН
ОСНОВЫ ПРОГРАММИРОВАНИЯ MPP-АРХИТЕКТУР
Учебно-методическое пособие
Под редакцией Е.В. Чепина
Издание 2-е, исправленное и дополненное
Редактор М.В. Макарова
Оригинал-макет изготовлен М.В. Макаровой
Подписано в печать 03.03.2010. Формат 60х84 1/16 Печ.л. 5,5. Уч.-изд.л. 5,5. Тираж 300 экз.
Изд. № 011-1. Заказ № 94
Национальный исследовательский ядерный университет «МИФИ». Типография НИЯУ МИФИ.
115409, Москва, Каширское ш., 31