- •Введение
- •1 Параллельные и распределенные вычислительной системы
- •1.1 Понятие параллельной и распределенной вычислительной системы
- •1.2 Архитектура параллельной и распределенной вычислительной системы
- •1.3 Программное обеспечение для различных высокопроизводительных систем
- •1.4 Языки высокопроизводительных вычислений
- •1.5 Интегрированная среда разработки многопоточных приложений
- •2.1 Общие сведения об Oracle Solaris Studio ide
- •2.2 Профилировщик Performance Analyzer.
- •2.3 Профилирование приложений в Oracle Solaris Studio.
- •Заключение
- •Список используемых источников
- •Приложение а
- •Приложение б
Заключение
В ходе работы были даны понятия параллельной и распределенной вычислительной системы, рассмотрена архитектура данных систем, представлены средства для разработки высокопроизводительных приложений на языках С, С++, рассмотрены 2 класса высокопроизводительных приложений: многопоточные и распределенные, а также, предъявляемые критерии для разработки многопоточных и распределённых приложений в ИСР.
В результате исследования Oracle Solaris Studio IDE показала себя как мощный и эффективный набор инструментов для разработки высокопроизводительных приложений с удобным графическим интерфейсом. В ее состав входят основные библиотеки для программирования: Pthread, OpenMP и MPI. OSS поддерживает высокопроизводительные языки С, С++ и HPF. Также, в ее состав входит внутренний профилировщик – в виде компонентов Monitor Main Project и Data Races and Deadlocks для быстрого анализа многопоточных приложений, и профилировщик Performance Analyzer, представленный как отдельная программа. При помощи Performance Analyzer можно произвести детальный анализ многопоточных и распределенных приложений и получить ответы на различные вопросы, относящиеся к производительности и эффективности параллельного кода.
Основной недостаток OSS – это поддержка только ОС Oracle Solaris, Oracle linux и Red Hat Linux.
Список используемых источников
Баденко В. Л. Высокопроизводительные вычисления: учеб. пособие – СПб.: Изд-во Политехн. ун-та, 2010. – 180 с.
Таненбаум, Э. Распределенные системы. Принципы и парадигмы / М. ван Стеен. – СПб.: Питер, 2003. – 877с.
Андрианов С.Н., Дегтярев А.Б., Параллельные и распределенные вычисления. Часть1. – СПб.: «СОЛО», 2007. – 60 с.
Эндрюс, Г.Р. Основы многопоточного, параллельного и распределенного программирования. : Пер. с .англ. – М. : Издательский дом «Вильямс», 2003. – 512 с.: ил. – Парал. тит. англ.
Портал – ru.wikipedia.org. Статья: Oracle Solaris Studio – https://ru.wikipedia.org/wiki/Oracle_Solaris_Studio.
Портал – www.opennet.ru. Статья: Вышел набор компиляторов Oracle Solaris Studio 12.4 для Solaris и Linux – https://www.opennet.ru/opennews/art.shtml?num=32607.
Портал – http://www.oracle.com/technetwork/server-storage/developerstudio.
Дьяченко, С.В. Средства профилирования и анализа многопоточных приложений Oracle Studio Performance Analyzer / Г.А. Багдасаров: 2012. – 15 с.
Портал – http://bourabai.ru. Статья: Интегрированные среды разработки программ – http://bourabai.ru/einf/ide.htm.
Приложение а
Код приложения 1.
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <pthread.h>
#include <unistd.h>
#include <malloc.h>
#include <semaphore.h>
int *mass;
int nom=0;
unsigned N=10;
sem_t semW,semR;
pthread_mutex_t lock;
void* funcR(void *arg)
{
int id_t=*(int *) arg;
printf(" Thread R %d Start \n",id_t);
while(1){
printf(" Thread R %d wait semaf\n",id_t);
sem_wait(&semR);
printf(" Thread R %d wait mutex\n",id_t);
pthread_mutex_lock(&lock);
if(nom>500){
pthread_mutex_unlock(&lock);
printf(" Thread R %d free mutex\n",id_t);
sem_post(&semW);
break;
}
for(int i=0;i<N;i++){
if(mass[i]==1) {
mass[i]=0;
break;
}
}
nom++;
printf(" Thread R %d wr 0\n",id_t);
pthread_mutex_unlock(&lock);
sleep(0.1);
printf(" Thread R %d free mutex\n",id_t);
sem_post(&semW);
printf(" Thread R %d free semaf\n",id_t);
}
}
void* funcW(void *arg)
{
int id_t=*(int *) arg;
printf(" Thread W %d Start \n",id_t);
while(1){
printf(" Thread W %d wait semaf\n",id_t);
sem_wait(&semW);
printf(" Thread W %d wait mutex\n",id_t);
pthread_mutex_lock(&lock);
if(nom>500){
pthread_mutex_unlock(&lock);
printf(" Thread W %d free mutex\n",id_t);
sem_post(&semR);
break;
}
for(int i=0;i<N;i++){
if(mass[i]==0) {
mass[i]=1;
break;
}
}
printf(" Thread W %d wr 1\n",id_t);
sleep(0.1);
pthread_mutex_unlock(&lock);
printf(" Thread W %d free mutex\n",id_t);
sem_post(&semR);
printf(" Thread W %d free semaf\n",id_t);
}
}
int main() {
pthread_t thR[4];
pthread_t thW[4];
int per;
mass=(int*) malloc(N*sizeof(int));
sem_init(&semW,0,3);
sem_init(&semR,0,0);
pthread_mutex_init(&lock,NULL);
for(int i=0;i<10;i++){
mass[i]=0;
}
for(int i=0;i<4;i++){
per = pthread_create(&thR[i],NULL, funcR,&i);
if(per!=0){
perror("error 111R");
return EXIT_FAILURE;
}
per = pthread_create(&thW[i],NULL, funcW,&i);
if(per!=0){
perror("error 111W");
return EXIT_FAILURE;
}
}
for(int i=0;i<4;i++){
pthread_join(thW[i],NULL);
pthread_join(thR[i],NULL);
}
free(mass);
pthread_mutex_destroy(&lock);
sem_destroy(&semW);
sem_destroy(&semR);
printf(" DONE\n");
return (EXIT_SUCCESS);
}
