Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

TOP500 суперкомпьютеров: "Туманность" готова поглотить "Ягуара"



Функция DisconnectNamedPipe отсоединяет экземпляра именованного канала серверной части.

BOOL DisconnectNamedPipe(HANDLE hNamedPipe // дескриптор именованного канала ); Параметры:

hNamedPipe – дескриптор экземпляра именованного канала. Этот дескриптор (handle) должен быть создан функцией CreateNamedPipe.

Возвращаемые значения:Если функция удачна, возвращаемое значение – отличное от нуля.Если функция неудачна, возвращаемое значение – нуль. Для получения более детальной информации вызовите GetLastError.

Программа «клиент»: Client.cpp:

// Client.cpp: Defines the entry point for the console application.

//

#include "stdafx.h"

#include <windows.h>

#include <stdio.h>

#include <conio.h>

LPSTR lpszPipeName = "\\\\.\\pipe\\simple";

//Два буфера для приема и для передачи

char outbuf[80];

char inbuf[80];

DWORD bytesRead;

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

{

printf("String 1 sending to server>");

scanf("%s",outbuf);

BOOL ret = CallNamedPipe(lpszPipeName,

outbuf, sizeof(outbuf),

inbuf, sizeof(inbuf),

&bytesRead, NMPWAIT_WAIT_FOREVER);

if (!ret) {

printf("client: CallNamedPipe failed, GetLastError = %d\n", GetLastError());

getch();

exit(1);

}

printf("\nclient: received 1\"%s\"\n", inbuf);

printf("String 2 sending to server>");

scanf("%s",outbuf);

//для каждой из передач вызываем CallNamedPipe

//

ret = CallNamedPipe(lpszPipeName,

outbuf, sizeof(outbuf),

inbuf, sizeof(inbuf),

&bytesRead, NMPWAIT_WAIT_FOREVER);

if (!ret) {

printf("client: CallNamedPipe failed, GetLastError = %d\n", GetLastError());

getch();

exit(1);

}

printf("\nclient: received 2\"%s\"\n", inbuf);

getch();

return 0;

}

Server.cpp:

#include "stdafx.h"

#include <windows.h>

#include <stdio.h>

#include <conio.h>

LPSTR lpszPipeName = "\\\\.\\pipe\\simple";

SECURITY_ATTRIBUTES sa;

PSECURITY_DESCRIPTOR pSD = NULL;

HANDLE hPipe = INVALID_HANDLE_VALUE;

OVERLAPPED os;

TCHAR szIn[80];

TCHAR szOut[80];

DWORD cbRead;

DWORD cbWritten;

DWORD dwWait;

HANDLE hEvent = NULL;

BOOL bRet;

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

{

pSD = (PSECURITY_DESCRIPTOR) malloc(SECURITY_DESCRIPTOR_MIN_LENGTH);

if (pSD == NULL)

{

printf("Failed to malloc SD");

goto cleanup;

}

if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION))

{

printf("Failed to initialize SD");

goto cleanup;

}

// add a NULL disc. ACL to the security descriptor.

//

if (!SetSecurityDescriptorDacl(pSD, TRUE, (PACL) NULL, FALSE))

{

printf("Failed to Set SD");

goto cleanup;

}

sa.nLength = sizeof(sa);

sa.lpSecurityDescriptor = pSD;

sa.bInheritHandle = TRUE;

hPipe = CreateNamedPipe(

lpszPipeName, // имя канала

FILE_FLAG_OVERLAPPED |

PIPE_ACCESS_DUPLEX, // режим открытия канала

PIPE_TYPE_MESSAGE |

PIPE_READMODE_MESSAGE |

PIPE_WAIT, // канал типа IO

1, // количество экземпляров

0, // размер outbuf (0 == allocate as necessary)

0, // размер inbuf

1000, // default time-out значение

&sa); // атрибуты безопасности

if (hPipe == INVALID_HANDLE_VALUE) {

printf("Failed to create named pipe");

goto cleanup;

}

hEvent = CreateEvent(

NULL, // нет атрибутов безопасности

TRUE, // руководство reset событий

FALSE, // not-signalled

NULL); // no name

if (hEvent == NULL)

{

printf("Failed to create event");

goto cleanup;

}

while (1)

{

// инициализация overlapped-структуры

//

memset(&os, 0, sizeof(OVERLAPPED));

os.hEvent = hEvent;

ResetEvent(hEvent);

// ожидание соединения.

//

ConnectNamedPipe(hPipe, &os);

if (GetLastError() == ERROR_IO_PENDING)

{

dwWait = WaitForMultipleObjects(1, &hEvent, FALSE, INFINITE);

if (dwWait!= WAIT_OBJECT_0) // not overlapped i/o event - error occurred,

break; // or server stop signaled

}

// инициализация overlapped-структуры

//

memset(&os, 0, sizeof(OVERLAPPED));

os.hEvent = hEvent;

ResetEvent(hEvent);

// попытка схватить все пришедшее через канал

//

bRet = ReadFile(

hPipe, // файл, от куда читать

szIn, // адрес вводимого буфера

sizeof(szIn), // кол-во байт для чтения

&cbRead, // кол-во считанных байт

&os); // не нужно

if (!bRet && (GetLastError() == ERROR_IO_PENDING))

{

dwWait = WaitForMultipleObjects(1, &hEvent, FALSE, INFINITE);

if (dwWait!= WAIT_OBJECT_0+1) // не overlapped i/o событие - ошибка,

break; // или сервер прекратил сигналы

}

sprintf(szOut, "Server received %s", szIn);

memset(&os, 0, sizeof(OVERLAPPED));

os.hEvent = hEvent;

ResetEvent(hEvent);

// отослать обратно

//

bRet = WriteFile(

hPipe, // файл, куда писать (имеется ввиду канал, а не файл)

szOut, // адрес output буфера

sizeof(szOut), // кол-во байт для чтения

&cbWritten, // кол-во записанных байт

&os); // overlapped stuff, not needed

if (!bRet && (GetLastError() == ERROR_IO_PENDING))

{

dwWait = WaitForMultipleObjects(1,&hEvent, FALSE, INFINITE);

if (dwWait!= WAIT_OBJECT_0) // not overlapped i/o event - error occurred,

break; // or server stop signaled

}

// отсоединиться

//

DisconnectNamedPipe(hPipe);

}

cleanup:getch();

return 0;

}

На экране:

Рис.1

TOP500 суперкомпьютеров: "Туманность" готова поглотить "Ягуара"...

01.06.2010 [13:41], Иван Терехов

В рамках открытия Международной суперкомпьютерной конференции ISC`10 в немецком Ганновере, была опубликована новая редакция рейтинга TOP500 самых мощных вычислительных систем. И хотя на этот раз лидер не изменился, в спину ему дышит новичок - потенциальный фаворит. Авторы 35-го списка TOP500 отмечают, что интенсивное развитие суперкомпьютерной отрасли в Китае, речь о котором ведется на протяжении последних лет, начинает давать свои результаты. Впервые за 15 лет, в течение которых составляется рейтинг, КНР смогла в него попасть, причем сразу на второе место.

Суперкомпьютер Nebulae (Туманность), установленный в Национальном суперкомпьютерном центре в Шеньжене по результатам тестирования пакетом Linpack показал производительность на уровне 1,271 петафлопс, оказавшись на втором месте – между Ягуаром (Cray Jaguar – 1,75 петафлопс) и IBM Roadrunner (1,04 петафлопс).

Разработанный китайской компанией Dawning Information Industry, суперкомпьютер состоит из блейд-серверов TC3600, построенных на базе процессоров Intel Xeon 5650 и графических ускорителей NVIDIA Tesla C2050. Создатели заявляют, что возможностей масштабирования архитектуры хватит для достижения показателя в 3 петафлопс, в то время, как нынешний лидер может улучшить результат «всего» до 2,3 петафлопс.

Что касается российских систем, то их количество возросло до 11 машин (в предыдущем списке их было 8), или около 2% всех систем рейтинга. Среди 31 страны Россия занимает 6 место, отставая от США (282 системы), Великобритании (38), Франции (27), Германии и Китая (по 24 на каждую), и Японии (18). Самой мощной системой в России остается суперкомпьютер «Ломоносов», установленный в МГУ. В новой редакции списка он переместился на одну позицию вниз и теперь занимает 13 место. Пиковая производительность машины составляет 414 терафлопс, реальная – 350 терафлопс. Напомним, что в 2011 г. мощность этой системы планируется увеличить до 1 петафлопс.

Статистика рейтинга TOP500 говорит о том, что суммарная мощность всех 500 систем превышает 10 петафлопс. Большинство суперкомпьютеров (81,6%) работают на базе процессоров Intel, доля AMD составила 9,4%. Лидерами среди компаний-производителей являются IBM и Hewlett-Packard, на долю которых приходится 39,8% и 37% суперкомпьютеров соответственно.

В разрезе операционных систем подавляющее большинство принадлежит Linux – 91% (455 машин), на втором месте – Unix 4,4% (22), доля Windows, BSD и прочих ОС в сумме – менее 5 %.





Дата публикования: 2014-12-08; Прочитано: 197 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с)...