Файл: Дипломный проект Калинин Е.А. 10.05.11 (финал).doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.12.2024

Просмотров: 4280

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Содержание

Глава 1. Обзор литературы и постановка задачи 8

1.4 Модели программирования 41

6.4.10 Мероприятия и средства по защите окружающей среды 103

Введение

Глава 1. Обзор литературы и постановка задачи

1.1 Высокопроизводительные вычисления

1.2 Архитектура суперкомпьютеров.

1.2.1 Коммуникационные среды.

1.2.2 Топология соединительной сети суперкомпьютеров

1.2.3 Обзор коммуникационных сред

1.3. Программное обеспечение

1.3.1 Классификация ос

1.3.2Компиляторы

1.3.3 Компилятор gnu Compiler Collection

1.3.6 Библиотеки для программирования параллельных вычислений.

1.3.7 Библиотеки программирования вMpi,cudAиshmem.

1.4 Модели программирования

1.4.1 Модель передачи сообщенийMpi

1.4.2 ТехнологияOpenMp

1.4.3 Технология: shmem.

1.5 Постановка задачи.

Глава 2. Разработка Алгоритма тестирования

2.1 Алгоритм теста латентности и коммуникационной производительности.

2.2. Блок схема алгоритма

Глава 3. Разработка программного обеспечения

3.1 Описание и состав суперкомпьютера «эск-е»

3.2 Функциональная схема коммуникационной среды.

3.3 Основная конфигурацияPci

3.4 Текст программы

3.4.1 Объяснение значений параметров тестового по.

Глава 4. Экспериментальные исследования

Глава 5. Организационно – экономическая часть.

5.1. Технико-экономическое обоснование объекта проектирования.

5.2. Состав конструкторской группы и их должностные оклады.

5.3. Перечень этапов опытно-конструкторских работ при разработке программного обеспечения.

5.4. Расчёт сметы затрат на окр при разработке программного обеспечения.

5.5. Вывод

Глава 6. Безопасность и экологичность проектных решений

6.1. Цель и решаемые задачи

6.2. Опасные и вредные факторы при работе с пэвм

6.3. Характеристика объекта исследования

6.4. Мероприятия по безопасности труда и сохранению работоспособности.

6.4.1. Обеспечение требований эргономики и технической эстетики

6.4.1.1. Планировка помещения и размещение оборудования

6.4.1.2. Эргономические решения по организации рабочего места пользователя пэвм

6.4.1.3. Цветовое оформление помещения

6.4.2. Обеспечение оптимальных параметров воздуха рабочих зон

6.4.2.1. Нормирование параметров микроклимата

6.4.2.2. Нормирование уровней вредных химических веществ

6.4.2.3. Нормирование уровней аэроионизации

6.4.3. Создание рационального освещения

6.4.4 Защита от шума

6.4.5 Обеспечение режимов труда и отдыха

6.4.6. Обеспечение электробезопасности

6.4.7. Защита от статического электричества

6.4.8. Обеспечение допустимых уровней электромагнитных полей

6.4.9 Обеспечение пожаробезопасности

6.4.9.1 Обеспечение безопасной эвакуации персонала

6.4.9.2 Средства извещения и сигнализации о пожаре.

6.4.9.3 Способы и средства тушения пожара

Пути снижения выбросов и токсичности: стимулом к сокращению объёмов предполагается заинтересованность в сокращении расхода топлива.

6.4.10.1 Утилизация компьютеров и оргтехники

6.5. Инженерные расчеты

6.5.1. Расчет эвакуационного выхода.

Заключение

BPAR

01

PPAR

23

PPAR

45

Regs

SBAR

01

SBAR

23

SBAR

45

Коммуникационная среда pci Express

Рис 3.4. Расширенное представление не транслируемого моста.

3.4 Текст программы

Ниже я привожу текст программы, выполняющей тестирование пропускной способности по топологиям: КОЛЬЦО, ПОЛНЫЙ ГРАФ, ЗВЕЗДА. Программа была написана из под ОС Linux Red Hat Enterprise с помощью библиотеки shmem.

static char print_mode = PRINT_AVERAGE_RATES;

unsigned int run_chaos_test = 1;

unsigned int msglen_unit = DEFAULT_MSGLEN_UNIT;

static char unit_char = 'M';

static char unit_str[] = "MB";

unsigned int rate_unit = DEFAULT_RATE_UNIT;

static char rate_unit_str[] = "MB/sec";

int i_am_the_master = 0;

static int msglen_min = MIN_MESSAGE_LENGTH;

static int msglen_max = MAX_MESSAGE_LENGTH;

static int TIMES = DEFAULT_TIMES;

static int msglen_step = 0;

static int msglen_multiplier = 2;

FILE *out;

static char output_file_name[256];

int pool_size,rank;


int MASTER_RANK = MASTER;

#define COMM shmem_COMM_WORLD

static char nodename[32];

static char* nodenames;

int namelen = 32;

void calculate_best_rates(double *R, int n, double *bestR);

void print_help();

/***************************************************************************

Code section

***************************************************************************/

int main (int argc, char *argv[]){

int i;

int msglen;

double R[6] = {0, 0, 0, 0, 0, 0}; /* rates */

double bestR[6] = {0, 0, 0, 0, 0, 0}; /* best rates */

double t0,t1,TestTime;

char processor_name[128];

int namelen = 128;

shmem _Status status;

int repeat = 1,repeatcnt;

out = stdout;

shmem_Init (&argc,&argv);

shmem_Comm_size(COMM,&pool_size);

shmem_Comm_rank(COMM,&rank);

t0 = Wtime();

if (pool_size < 3)

finish( "At least 3 nodes required" );

i_am_the_master = (rank == MASTER ) ? 1 : 0;

/* parse command line */

if(i_am_the_master){

for(i = 1; i < argc; i ++)

switch(argv[i][0]){

case 'h': print_help(); exit(1);

case 'm': msglen_min = atoi(argv[i]+1); break;

case 'M': msglen_max = atoi(argv[i]+1); break;

case 'T': TIMES = atoi(argv[i]+1); break;

case 's': msglen_step = atoi(argv[i]+1); msglen_multiplier = 1; break;

case 'R': repeat = atoi(argv[i]+1); break;

case 'K': msglen_multiplier = atoi(argv[i]+1); msglen_step = 0; break;

case 'P': print_mode = argv[i][1]; break;

case 'C': run_chaos_test = atoi(argv[i]+1); break;

case 'u':

unit_char = argv[i][1];

if(unit_char == 'M'){

msglen_unit = 1024 * 1024;

strcpy(unit_str,"Mb");

}

else if(unit_char == 'K'){

msglen_unit = 1024;

strcpy(unit_str,"Kb");

}

else if(unit_char == 'B' || unit_char == 'b'){

msglen_unit = 1;

strcpy(unit_str,"b");

}

break;

case 'o':

strcpy(output_file_name,argv[i]+1);

out = fopen(output_file_name,"a+");

if(out == NULL){

printf("WARNING: Can't open or create %s, writing to stdout\n",output_file_name);

out = stdout;

}

else

printf("Writing output to %s\n",output_file_name);

break;

default: fprintf(stderr,"WARNING: unrecognized option: %s\n",argv[i]);

break;

}

fprintf(out,"\nNETTEST/shmem of %s is running with following parameters:\n",version_date_string);

fprintf(out,"\tMessage length unit is 1%s = %d bytes\n",unit_str,msglen_unit);


fprintf(out,"\tMessages: %d to %d units, step %d, multiplier %d\n",msglen_min,msglen_max,msglen_step,msglen_multiplier);

fprintf(out,"\t%d times for each test routine, %d iterations for whole test\n",TIMES,repeat);

if(run_chaos_test)

fprintf(out,"\tRunning chaos test with %d logical links used.\n",pool_size*(pool_size-1)/2);

else

fprintf(out,"\tNot running chaos test.\n");

}

shmem_Bcast(&msglen_unit,1, shmem_INT,MASTER,COMM);

shmem_Bcast(&msglen_min,1, shmem_INT,MASTER,COMM);

shmem_Bcast(&msglen_max,1, shmem_INT,MASTER,COMM);

shmem_Bcast(&msglen_step,1, shmem_INT,MASTER,COMM);

shmem_Bcast(&msglen_multiplier,1, shmem_INT,MASTER,COMM);

shmem_Bcast(&repeat,1, shmem _INT,MASTER,COMM);

shmem_Bcast(&TIMES,1,shmem_INT,MASTER,COMM);

shmem_Bcast(&run_chaos_test,1, shmem_INT,MASTER,COMM);

shmem_Get_processor_name(nodename,&namelen);

if(i_am_the_master){

nodenames = (char*) malloc(35*pool_size);

strcpy(nodenames,nodename);

for(i = 1; i < pool_size; i ++){

strcat(nodenames," ");

shmem_Recv(nodename,32, shmem _CHAR,i,2011,COMM,&status);

strcat(nodenames,nodename);

}

fprintf(out,"\tNodes: %s\n",nodenames);

fflush(out);

}

else

shmem_Send(nodename,32, shmem_CHAR,0,2011,COMM);

if(i_am_the_master){

if(print_mode == PRINT_TOTAL_RATES)

fprintf(out,"\n\tNetwork throughput values in %s\n",rate_unit_str);

else

if(print_mode == PRINT_LOCAL_RATES)

fprintf(out,"\n\tLocal node throughput values in %s\n",rate_unit_str);

else

fprintf(out,"\n\tAverage link transfer rates in %s\n",rate_unit_str);

fprintf(out,"Size,%c\tStar\tStar2\tChaos\tChaos2\tRing\tRing2\n",unit_char);

}

for(repeatcnt = 0; repeatcnt < repeat; repeatcnt ++){

for(msglen = msglen_min; msglen <= msglen_max; msglen = msglen * msglen_multiplier + msglen_step){

R[0] = Star(msglen*msglen_unit,TIMES)/rate_unit;

R[1] = Star2(msglen*msglen_unit,TIMES)/rate_unit;

if(run_chaos_test){

R[2] = Chaos(msglen*msglen_unit,TIMES)/rate_unit;

R[3] = Chaos2(msglen*msglen_unit,TIMES)/rate_unit;

}

R[4] = Ring(msglen*msglen_unit,TIMES)/rate_unit;

R[5] = Ring2(msglen*msglen_unit,TIMES)/rate_unit;

#define P pool_size

switch(print_mode){

case PRINT_LOCAL_RATES:

R[0] = R[0] * (P-1);

R[1] = R[1] * (P-1);

R[2] = R[2] * (P-1);

R[3] = R[3] * (P-1);

R[4] = R[4] * 2;

R[5] = R[5] * 2;

break;

case PRINT_TOTAL_RATES:

R[0] = R[0] * (P-1);

R[1] = R[1] * (P-1);

R[2] = R[2] * P * (P-1) / 2;

R[3] = R[3] * P * (P-1) / 2;


R[4] = R[4] * P;

R[5] = R[5] * P;

break;

}

#undef P

calculate_best_rates(R,6,bestR);

if(i_am_the_master){

fprintf(out,"%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",msglen,R[0],R[1],R[2],R[3],R[4],R[5]);

fflush(out);

}

}

}

t1 = Wtime();

TestTime = t1 - t0;

if (i_am_the_master){

fprintf(out,"\nshmem Network Test complete in %.2f sec\n",TestTime);

if(print_mode == PRINT_TOTAL_RATES)

fprintf(out,"\n\tBest network throughput values in %s\n",rate_unit_str);

else

if(print_mode == PRINT_LOCAL_RATES)

fprintf(out,"\n\tBest local node throughput values in %s\n",rate_unit_str);

else

fprintf(out,"\n\tBest average link transfer rates in %s\n",rate_unit_str);

fprintf(out,"\tStar\tStar2\tChaos\tChaos2\tRing\tRing2\n");

fprintf(out,"\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",bestR[0],bestR[1],bestR[2],bestR[3],bestR[4],bestR[5]);

fflush(out);

fflush(stdout);

}

shmem_Finalize();

exit(0);

return 0;

} /* end of main() */

void calculate_best_rates(double *R, int n, double *bestR){

int i;

for(i = 0; i < n; i ++)

if(R[i]>bestR[i])

bestR[i]=R[i];

}

void print_help(){

printf(" Options:\n m[min_msg_length]\n M[max_msg_length]\n T[every_test_repetitions]\n"

" R[whole_test_repetitions]\n s[msg_length_increment]\n K[msg_length_multiplier]\n"

" P[mode]\n C (run chaos test)\n u[units]\n o out_file\n\n"

" mode - t (total rates), a (average rates) or l (local rates)\n"

" units - M (megabytes), K (kilobytes) or b (bytes)\n\n");

}


3.4.1 Объяснение значений параметров тестового по.

np (number of processes) - параметр shmemrun, число запускаемых процессов;

u (unit) - единицы измерения длины сообщений; возможные значения: b (байты), K (килобайты), M (мегабайты);

m (minimum) - начальная (наименьшая) длина сообщения (здесь и далее все размеры указываются в единицах);

M (Maximum) - наибольшая длина сообщения;

s (step) - шаг увеличения длины сообщения (в случае использования множителя K шаг не используется);

K (coeficient) - множитель для увеличения длины сообщения (обычно используются значения 2 или 10);

R (repeat) - число глобальных повторов (итераций) всего теста;

T (Times) - число итераций в каждой тестовой процедуре;

f (fix time) - этот параметр используется для увеличения числа итераций T, если общее время работы всех итераций тестовой процедуры меньше, чем f (задается в тысячных долях микросекунды).

H (Head) - указывает номер головного процесса; по умолчанию, головным является нулевой процесс;

b (buffer) - размер буфера shmem, дополнительно выделяемого с помощью shmem_Buffer_attach(). В большинстве случаев тест работает без дополнительного буфера.

P (Print mode) - режим вывода результатов; значение "time" соответствует выдачи времени (в микросекундах), а значение "rate" (по умолчанию) - скорости (в Мбайт/сек).

q (quiet) - флаг отключения дополнительной информации, будут печататься только результаты тестов;

o (output) - имя файла, в который будут печататься результаты (по умолчанию, результаты печатаются на терминал).

Пример запуска:

shmemrun -np 4 transf2 uK m1 M1024 K2 T10 f100 R2 otransfer.dat

Тест двунаправленных обменов с помощью shmem_Sendrecv будет запущен на 32 процессорах. В данном случае, в качестве единицы длины сообщения выбирается Кбайт (uK), длина сообщений увеличивается в геометрической прогрессии (K2) от 1 Кбайта (m1) до 1 Мбайта (M1024). По умолчанию, каждая тестовая процедура будет повторяться 10 раз (T10), но это количество будет увеличено, если общее время меньше, чем 0.1 сек (f100). Полностью тест будет повторен 2 раза (R2). Результаты будут записываться в файл transfer.dat в текущей директории (otransfer.dat).

Глава 4. Экспериментальные исследования

В данной главе приведены результаты экспериментальных исследований пропускной способности коммуникационной среды, полученных при помощи тестового программного обеспечения на блоке суперкомпьютера «ЭСК-Е» с конфигурацией: