ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.12.2024
Просмотров: 4280
Скачиваний: 1
СОДЕРЖАНИЕ
Глава 1. Обзор литературы и постановка задачи 8
1.4 Модели программирования 41
6.4.10 Мероприятия и средства по защите окружающей среды 103
Глава 1. Обзор литературы и постановка задачи
1.1 Высокопроизводительные вычисления
1.2 Архитектура суперкомпьютеров.
1.2.2 Топология соединительной сети суперкомпьютеров
1.2.3 Обзор коммуникационных сред
1.3.3 Компилятор gnu Compiler Collection
1.3.6 Библиотеки для программирования параллельных вычислений.
1.3.7 Библиотеки программирования вMpi,cudAиshmem.
1.4.1 Модель передачи сообщенийMpi
Глава 2. Разработка Алгоритма тестирования
2.1 Алгоритм теста латентности и коммуникационной производительности.
Глава 3. Разработка программного обеспечения
3.1 Описание и состав суперкомпьютера «эск-е»
3.2 Функциональная схема коммуникационной среды.
3.4.1 Объяснение значений параметров тестового по.
Глава 4. Экспериментальные исследования
Глава 5. Организационно – экономическая часть.
5.1. Технико-экономическое обоснование объекта проектирования.
5.2. Состав конструкторской группы и их должностные оклады.
5.3. Перечень этапов опытно-конструкторских работ при разработке программного обеспечения.
5.4. Расчёт сметы затрат на окр при разработке программного обеспечения.
Глава 6. Безопасность и экологичность проектных решений
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.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 Утилизация компьютеров и оргтехники
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. Экспериментальные исследования
В данной главе приведены результаты экспериментальных исследований пропускной способности коммуникационной среды, полученных при помощи тестового программного обеспечения на блоке суперкомпьютера «ЭСК-Е» с конфигурацией: