return 5;
}
// Загрузка количества точек в буфер передачи
smsg[0]=p_numb;
smsg[1]=i_numb;
// Считывание исходных точек из файла в буфер передачи
for (i=2;i<p_numb*2+2;i++)
{
res=fscanf(finp, " %f", &smsg[i]);
if (res !=1)
{
printf ("Error #7: Can't get points from file '%s'",argv[1]);
return 7;
}
}
// Закрытие файла ввода
fclose(finp);
// Подключение к именованному каналу
coid = name_open("int_server", 0);
if (coid == -1)
{
printf("Error #2: Can't find server 'int_server'\n");
return 2;
}
// Отправка сообщения серверу
res=MsgSend(coid, smsg, (p_numb*2+2)*sizeof(float), rmsg, i_numb*sizeof(float)*2);
// Если результат не равен количеству запрошенных точек, то ошибка
if (res != i_numb)
{
printf("Error #8: Interpolation failed");
return 8;
}
// Открытие файла результатов
foutp=fopen(argv[2],"w");
if (foutp==NULL)
{
printf ("Error #9: Can't open output file %s.",argv [2]);
return 9;
}
// Вывод рзультатов интерполяции в консоль и файл
printf("Time\tValue\n");
for (i=0;i<i_numb;i++)
{
printf ("%8.3f\t%8.3f\n",rmsg[2*i],rmsg[2*i+1]);
fprintf (foutp,"%8.3f\t%8.3f\n",rmsg[2*i],rmsg[2*i+1]);
}
// Закрытие файла вывода результатов
fclose (foutp);
// Успешный выход из программы
return 0;
}
Испытания приложений и оценка производительности
а) Рассмотрение примера на простом наборе данных
Входной файл:
5 20
0 6
1 7
2 6
3 10
4 5
Выходной файл:
0.000 6.000
0.211 7.450
0.421 7.982
0.632 7.896
0.842 7.445
1.053 6.847
1.263 6.273
1.474 5.856
1.684 5.688
1.895 5.819
2.105 6.256
2.316 6.967
2.526 7.879
2.737 8.876
2.947 9.802
3.158 10.459
3.368 10.608
3.579 9.969
3.789 8.220
4.000 5.000
График:
Рис. 2. Результаты интерполяции
Рис. 3. Временная диаграмма работы сервера.
Как видно из рис.3, интерполяция требует гораздо меньше времени, чем ввод и в особенности вывод информации. В дальнейшем будет оцениваться только производительность серверного приложения.
В данном случае время обработки данных сервером составило 7 микросекунд. По результатам прошлой лабораторной работы, время обработки сервером пустого сообщения составило около двух микросекунд. Следовательно, уже при таких параметрах интерполяции нагрузка на сервер становится заметной.
б) Исследование производительности приложений при различных исходных данных и параметрах интерполяции
При исследовании производительности клиент-серверного приложения фиксировались следующие параметры: время одного цикла исполнения программы, время обработки сервером и клиентом, а также чистое время обработки клиентом без ожидания.
Производительность клиент-серверного приложения. Табл. 1.
Nисх |
Nинт |
Tц, мкс |
Tсерв, мкс |
Tкл, мкс |
Tкл ч, мкс |
5 |
20 |
1334 |
7 |
1327 |
425 |
10 |
50 |
2945 |
48 |
2897 |
784 |
20 |
100 |
7394 |
264 |
7130 |
1000 |
35 |
300 |
18145 |
3024 |
15121 |
2037 |
50 |
500 |
30826 |
7684 |
23142 |
4650 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.