Главная страница
Навигация по странице:

  • Баканов Валерий Михайлович

  • Параллельные вычисления


    Скачать 1.75 Mb.
    НазваниеПараллельные вычисления
    Дата06.05.2019
    Размер1.75 Mb.
    Формат файлаpdf
    Имя файла[Bakanov_V.M.]_Parallelnuee_vuechisleniya__Uchebno(z-lib.org).pdf
    ТипУчебное пособие
    #76301
    страница16 из 16
    1   ...   8   9   10   11   12   13   14   15   16

    енных градиентов (CG),
    • обобщенный метод минимальных невязок (GMRES),
    • квадратичный метод сопряженных градиентов (CGS),
    • метод квазиминимальных невязок (TFQMR),
    • метод бисопряженного градиента (BiCGSTAB) со стабилизацией
    При решении СЛАУ используются как прямой метод LU, так и неполное
    LU-разложение в подобластях. Матрица системы может быть как общего ви- да, так и специального, возникающего при конечно-разностной аппроксима- ции дифференциальных уравнений в частных производных (PDE - Partial
    Differential Equations). Руководство по использованию AZTEC может быть получено с адреса http://rsusu1.rnd.runnet.ru/ncube/aztec/index.html.
    Библиотека ScaLAPACK (Scalable LAPACK, http://www.netlib.org/ scalapack/index.html
    ) ориентирована на решение задач линейной алгебры c матрицами общего вида. ScaLAPAC является расширением известной биб- лиотеки LAPACK (как считается, наиболее полно отвечающей архитектуре современных процессоров – напр., библиотечные подпрограммы оптимизи- рованы для эффективного использования кэш-памяти и т.п.) на многопроцес- сорную архитектуру.
    Пакет ScaLAPACK фактически является стандартом в программном обес- печении многопроцессорных систем. В нем почти полностью сохранены со- став и структура пакета LAPACK и практически не изменились обращения к


    - 113 - подпрограммам верхнего уровня. В основе успеха реализации этого проекта лежали два принципиально важных решения:

    В пакете LAPACK все элементарные векторные и матричные операции выполняются с помощью высокооптимизированных подпрограмм биб- лиотеки BLAS (Basic Linear Algebra Subprograms). По аналогии с этим при реализации ScaLAPACK была разработана параллельная версия этой библиотеки (названная PBLAS), что избавило от необходимости ради- кальным образом переписывать подпрограммы верхнего уровня.

    Все коммуникационные операции выполняются с использованием под- программ из специально разработанной библиотеки BLACS (Basic Linear
    Algebra Communication Subprograms), поэтому перенос пакета на различ- ные многопроцессорные платформы требует настройки только этой биб- лиотеки.
    Обозначенные как ‘глобальные’ компоненты пакета выполняются парал- лельно на заданном наборе процессоров и в качестве аргументов используют векторы и матрицы, распределенные по этим процессорам, подпрограммы из означенных как ‘локальные’ компонентов пакета вызы- ваются на одном процессоре и работают с локальными данными (рис.27). Имеется возможность работы с веще- ственными и комплексными данными одинарной или двойной точности, матрица- ми различного вида, выпол- нение факторизации, вычис- ление собственных значений и собственных векторов, оп- ределение сингулярных зна- чений и др.; руководство пользователя доступно на адресе http://rsusu1.rnd.runnet.ru/ncube/scalapack/scalapack_home.html
    Из иных библиотечных пакетов следует указать Block Solve (решение
    СЛАУ с редкозаполненной матрицей системы, Argonne National Laboratory, http://www.mcs.anl.gov, http://www- unix.mcs.anl.gov/sumaa3d/BlockSolver
    ), разрабо- танную в математическом отделении университета Бата (Англия) библиоте- ку DOUG (Domain On Unstructured Grids), позиционируемую как ‘параллель- ный решатель для систем, возникающих при решении методом конечных элементов’ (
    http://www.math.bath.ac.uk/mjh/doug
    ) и некоторые другие.
    Рисунок 27 — Структура пакета ScaLAPACK

    - 114 -
    Практически все предметно-ориентированные библиотеки для решения за- дач матфизики бесплатны и доступны в исходных кодах.
    4.5 Параллелизм в системах управления базами данных
    Управление большими базами данных – естественное применение много- процессорных вычислительных систем. В списке Top500 25-й редакции
    (июнь 2005) приведены данные 16 инсталляций МВС для применений в об- ласти финансов, максимальной LINPACK-производительностью в 4713
    GFlops обладает находящаяся на 62 месте система eServer BlueGene Solution
    (2048 процессоров фирмы IBM, поставленна для NIWS Co. Ltd, Япония в
    2005 г.). В СберБанке РФ с 2003 г. эксплуатируется 256-процессорная SMP- система HP SuperDome с процессорами PA-RISK 750 MHz производительно- стью 440 Gflops.
    Параллельная система баз данных - это система управления базами данных (СУБД), реализованная на многопроцессорной системе с высокой степенью связности. Под многопроцессорной системой с высокой степенью связности понимается система, включающую в себя много процессоров и много дисков, в которой процессоры объединены между собой с помощью некоторой соединительной сети, причем время обмена данными по сети
    сравнимо со временем обмена данными с диском. Приведенное опреде- ление исключает из рассмотрения распределенные СУБД, реализуемые на нескольких независимых компьютерах, объединенных локальной и/или глобальной сетями (
    *
    ).
    Основная нагрузка в параллельной системе баз данных приходится на выполнение запросов к БД. Обычно рассматривают несколько путей рас- параллеливания запросов: (
    **
    )
    • Горизонтальный параллелизм возникает при распределении хранящей- ся в БД информации по нескольким физическим устройствам (жестким дискам). При этом информация из одного соотношения разбивается на части по горизонтали (достигается сегментация данных), распараллели- вание заключается в выполнении одинаковых операций над разными
    физически хранимыми данными. Эти операции независимы и могут вы- полняться различными процессорами, конечный результат складывается из результатов выполнения отдельных операций (рис.28а).
    *
    Л.Б.Соколинский.
    Обзор архитектур параллельных систем баз данных.
    / ПРОГРАММИРОВАНИЕ, 2004, № 6, с. 49
    ÷
    63.
    **
    Т.С.Крюкова. Базы данных: модели, разработка, реализация. –CПб.: Питер, 2001. –304 c.

    - 115 -
    • Вертикальный параллелизм реализуется конвейерным способом вы- полнения cоставляющих запрос пользователя операций. При этом ядро
    СУБД должно произвести декомпозицию запроса с целью выявления параллельно выполняющихся шагов запроса (рис.28б).
    • Гибридный параллелизм предполагает совместное использование двух первых подходов (рис.28в).
    Рисунок 28 — Укрупненная схема выполнение запроса при а) – горизонтальном, б) - вертикальном и в) - гибридном параллелизме.

    - 116 -
    Классификация архитектур параллельных машин баз данных разрабо- тана в основном Стоунбрейкером (M. Stonebraker, 1986). Далее классифика- ция была расширена Ерхардом
    Рамом (E. Rahm, 1992) в сторо- ну гибридных архитектур и
    Копеландом (Copeland, 1989) и Келлером (Keller) в направ- ление иерархических архитек-
    тур.
    Автор работы (
    *
    )
    развивает подход Копеланда и Келлера, вводя и используя малоизу- ченную до сих пор альтерна- тивную трехуровневую иерар- хическую архитектуру, в осно- ве которой лежит понятие
    Омега-кластера. Эта архитек- тура (рис.29, ср. с рис.8в) предполагает наличие небольшого количества процессорных модулей PM и обслуживающего их модуля дисковой подсистемы DSM (последняя включает сопряженный с SCSI-шиной коммуникационный процессор, что дает воз- можность подключения до 7 дисковых накопителей) и является определен- ным продолжением и развитием идей проекта SDC (Super Database Computer,
    суперкомпьютер баз данных) токийского университета (
    **
    ).
    Несколько Омега-кластеров могут объединяться в систему верхнего уров- ня через свободные линки L процессорных модулей, топология межкластер- ных соединений может варьироваться от простой линейной до гиперкуба.
    Иерархическая архитектура системы Омега предполагает два уровня фраг- ментации. Каждое отношение может разделяться на фрагменты, размещае- мые в различных Омега-кластерах (межкластерная фрагментация). В свою очередь, каждый такой фрагмент разделяется на более мелкие фрагменты, распределяемые по различным узлам Омега-кластера (внутрикластерная
    фрагментация). Этот подход делает процесс балансировки загрузки более гибким, поскольку он может выполняться на двух уровнях - локальном, сре- ди процессорных модулей внутри Омега-кластера, и глобальном, среди Оме- га-кластеров. Описанная архитектура была реализована в прототипе парал- лельной СУБД Омега на базе МВС-100 в 8-процессорной конфигурации.
    *
    Л.Б.Соколинский. Проектирование и анализ архитектур параллельных машин баз дан- ных с высокой отказоустойчивостью. / Челябинский государственный университет.
    **
    Hirano M.S. et al. Architecture of SDC, the super database computer. // In Proceedings of
    JSPP'90. 1990.
    Рисунок 29 — Схема Омега-кластера.

    - 117 -
    Предложенная в работе
    (
    *
    ) классификация форм параллелизма обработки запросов в параллельных
    БД приведена на рис.30, несколько подробнее о возможных реализациях
    транзакций в распределенных
    БД реляционного типа см. в работе [7].
    Контрольные вопро-
    сы
    1. В чем заключается проблема переносимости параллельных программ?
    2. В чем суть функционального программирования и отличие его от опера- торного? В чем заключаются недостатки первого и второго?
    3. Что такое ‘процесс, управляемый данными’? В чем отличие его от тради- ционного подхода к управлению вычислениями? Есть ли недостатки у процесса управления данными?
    4. В чем выражается преимущество подхода ‘data flow’ и какими средствами оно может быть достигнуто?
    5. Каковы основные принципы построения языков (систем) программирова- ния параллельных вычислений?
    6. Какие принципы синхронизации независимо выполняющихся процессов известны? Для чего вообще необходима синхронизация?
    7. Каким образом параллельная обработка данных применяется в технологии баз данных? Какие формы параллелизма при обработке транзакций извест- ны?
    *
    Соколинский Л.Б. Методы организации параллельных систем баз данных на вычисли- тельных системах с массовым параллелизмом. Диссертация на соискание ученой сте- пени доктора физико-математических наук: 05.13.18 // Челябинский государственный университет, -Челябинск: 2003, -247 c.
    Рисунок 30 — Классификация форм параллелизма при обработке транзакций в параллельных базах данных.

    - 118 -
    Заключение
    Параллельные вычисления представляют собой целый куст смежных во- просов, включающих аппаратную поддержку, анализ структуры алгоритмов с цель выявления параллелизма и алгоритмические языки для программирова- ния параллельных задач. Технологии параллельных вычислений в настоящее время бурно развиваются в связи с требованиями мировой науки и техноло- гий.
    Сегодняшняя проблема – явный недостаток аппаратных средств для парал- лельных вычислений в учебных и научных учреждениях, что не дает воз- можности всестороннего освоения соответствующих технологий; часто прак- тикуемое чисто теоретическое изучение предмета приводит скорее к нега- тивным (отчуждение от предмета из-за схоластичности подхода), чем к пози- тивным следствиям. Только сейчас появляются технологии, позволяющие ввести практику параллельных вычислений в большинство учебных и произ- водственных лабораторий.
    Создание эффективных параллельных программ требует намного более серьезного и углубленного анализа структуры алгоритмов, нежели при тра- диционно-последовательном программировании, причем некоторые подходы невозможно реализовать без серьезного изменения мышления программи- стов. Наряду с теоретическим анализом для получения практически значи- мых результатов необходима постоянная практика в создании параллельных программ.

    - 119 -
    Список использованной литературы
    1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. –СПб.: БХВ-
    Петербург, 2004.
    -
    608 c.
    2. Гарви М.Дейтел. Введение в операционные системы (пер. с англ.
    Л.А.Теплицкого, А.Б.Ходулева, Вс.С.Штаркмана под редакцией Вс.С.
    Штаркмана). –М.: Мир, 1987 (электронная версия http://www.deepweb.ru
    ,
    2004)
    3. Гергель В.П., Стронгин Р.Г. Основы параллельных вычислений для много- процессорных вычислительных систем (учебное пособие, изд. 2, допол- ненное). -Н.Новгород.: изд. ННГУ им. Н.И.Лобачевского, –2003 (электрон- ная версия http://pilger.mgapi.edu/metods/1441/basic_pr.zip
    ).
    4. Корнеев В.В. Вычислительные системы. -М.: Гелиос АРВ, –2004, -512 c.
    5. Лацис А.О. Как построить и использовать суперкомпьютер. –M.: Бестсел- лер, 2003. –240 c.
    6. Крюков В.А.. Разработка параллельных программ для вычислительных кластеров и сетей. // Информационные технологии и вычислительные сис- темы. –M.: № 1
    ÷
    2, 2003, с.42
    ÷
    61.
    7. Шпаковский Г.И. Организация параллельных ЭВМ и суперскалярных процессоров. // Учеб. пособие. -Минск.: Белгосуниверситет, 1996. -296 с.
    (электронная версия http://pilger.mgapi.edu/metods/1441/spakovsk.zip
    )
    8. Шпаковский Г.И., Серикова Н.В. Программирование для многопроцессор- ных систем в стандарте MPI. -Минск:, БГУ, 2002. -325 с.
    (электронная версия http://www.cluster.bsu.by/download/book_PDF.pdf,
    http://pilger.mgapi.edu/metods/1441/pos_mpi.pdf
    )
    9. Андрианов А.Н., Бугеря А.Б., Ефимкин К.Н., Задыхайло И.Б. Норма. Опи- сание языка. Рабочий стандарт. // Препринт ИПМ им.М.В.Келдыша РАН,
    № 120, 1995, -50 с.8.
    10. Информационно-аналитические материалы по параллельным вычислени- ям (электронная версия http://parallel.ru
    )

    - 120 -
    Приложение 1.
    Примеры последовательной и параллельных реализаций алгоритма
    Якоби решения сеточных уравнений (по материалам работы [6])
    a) последовательная программа на языке Fortran’77
    PROGRAM JAC_F77
    PARAMETER (L=8, ITMAX=20)
    REAL A(L,L), B(L,L)
    PRINT *, '********** TEST_JACOBI **********'
    DO IT = 1, ITMAX
    DO J = 2, L-1
    DO I = 2, L-1
    A(I, J) = B(I, J)
    ENDDO
    ENDDO
    DO J = 2, L-1
    DO I = 2, L-1
    B(I, J) = 0, 25
    ×
    (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1))
    ENDDO
    ENDDO
    ENDDO
    END б) параллельная программа на языке HPF, цветом (насыщенностью) выделены HPF-предписания
    PROGRAM JAC_HPF
    PARAMETER (L=8, ITMAX=20)
    REAL A(L,L), B(L,L)
    !HPF$ PROCESSORS P(3,3)
    !HPF$ DISTRIBUTE ( BLOCK, BLOCK) :: A
    !HPF$ ALIGN B(I,J) WITH A(I,J)
    C arrays A and B with block distribution
    PRINT *, '********** TEST_JACOBI **********'
    DO IT = 1, ITMAX
    !HPF$ INDEPENDENT
    DO J = 2, L-1
    !HPF$ INDEPENDENT
    DO I = 2, L-1
    A(I, J) = B(I, J)
    ENDDO
    ENDDO
    !HPF$ INDEPENDENT
    DO J = 2, L-1
    !HPF$ INDEPENDENT
    DO I = 2, L-1
    B(I, J) = (A(I-1, J) + A(I, J-1) + A(I+1, J) + A(I, J+1)) / 4
    ENDDO
    ENDDO
    ENDDO
    END в) параллельная программа на языке Fortran’DVM, цветом (насыщенностью) выделены DVM-директивы
    PROGRAM JAC_DVM
    PARAMETER (L=8, ITMAX=20)
    REAL A(L,L), B(L,L)

    - 121 -
    СDVM$ DISTRIBUTE ( BLOCK, BLOCK) :: A
    СDVM$ ALIGN B(I,J) WITH A(I,J)
    С arrays A and B with block distribution
    PRINT *, '********** TEST_JACOBI **********'
    DO IT = 1, ITMAX
    СDVM$ PARALLEL (J, I) ON A(I, J)
    DO J = 2, L-1
    DO I = 2, L-1
    A(I, J) = B(I, J)
    ENDDO
    ENDDO
    СDVM$ PARALLEL (J, I) ON B(I, J), SHADOW_RENEW (A)
    С copying shadow elements of A-array from
    С neighboring processors before loop execution
    DO J = 2, L-1
    DO I = 2, L-1
    B(I, J) = (A( I-1, J ) + A( I, J-1 ) + A( I+1, J ) + A( I, J+1 )) / 4
    ENDDO
    ENDDO
    ENDDO
    END г) параллельная программа на языке Fortran с использованием MPI, цветом (насыщенностью) выделены относящиеся к MPI структуры
    PROGRAM JAC_MPI include 'mpif.h' integer me, nprocs
    PARAMETER (L=8, ITMAX=20, LC=2, LR=2)
    REAL A(0:L/LR+1, 0:L/LC+1), B(L/LR,L/LC)
    C arrays A and B with block distribution integer dim(2), coords(2) logical isper(2) integer status(
    MPI_STATUS_SIZE
    , 4), req(8),newcomm integer srow,lrow,nrow,scol,lcol,ncol integer pup,pdown,pleft,pright dim(1) = LR dim(2) = LC isper(1) = .false. isper(2) = .false. reor = .true. call MPI_Init(ierr) call MPI_Comm_rank(mpi_comm_world, me, ierr) call MPI_Comm_size(mpi_comm_world, nprocs, ierr) call MPI_Cart_create(mpi_comm_world,2,dim,isper, .true., newcomm, ierr) call MPI_Cart_shift(newcomm,0,1,pup,pdown, ierr) call MPI_Cart_shift(newcomm,1,1,pleft,pright, ierr) call MPI_Comm_rank (newcomm, me, ierr) call MPI_Cart_coords(newcomm,me,2,coords, ierr)
    C rows of matrix I have to process srow = (coords(1) * L) / dim(1) lrow = (((coords(1) + 1) * L) / dim(1))-1 nrow = lrow - srow + 1
    C colomns of matrix I have to process scol = (coords(2) * L) / dim(2) lcol = (((coords(2) + 1) * L) / dim(2))-1 ncol = lcol - scol + 1 call MPI_Type_vector(ncol,1,nrow+2,MPI_DOUBLE_PRECISION, vectype, ierr) call MPI_Type_commit(vectype, ierr)
    IF (me. eq. 0) PRINT *, '***** TEST_JACOBI *******'

    - 122 -
    DO IT = 1, ITMAX
    DO J = 1, ncol
    DO I = 1, nrow
    A(I, J) = B(I, J)
    ENDDO
    ENDDO
    C Copying shadow elements of array A from
    C neighboring processors before loop execution call MPI_Irecv(A(1,0),nrow,MPI_DOUBLE_PRECISION,pleft,1235,MPI_COMM_WORLD,req(1),ierr) call MPI_Isend(A(1,ncol),nrow,MPI_DOUBLE_PRECISION,pright,1235,MPI_COMM_WORLD,
    + req(2),ierr) call MPI_Irecv(A(1,ncol+1),nrow,MPI_DOUBLE_PRECISION,pright,1236,MPI_COMM_WORLD,
    + req(3),ierr) call MPI_Isend(A(1,1),nrow,MPI_DOUBLE_PRECISION,pleft,1236,MPI_COMM_WORLD,req(4),ierr) call MPI_Irecv(A(0,1),1,vectype,pup,1237,MPI_COMM_WORLD,req(5),ierr) call MPI_Isend(A(nrow,1),1,vectype,pdown,1237,MPI_COMM_WORLD,req(6),ierr) call MPI_Irecv(A(nrow+1,1),1,vectype,pdown,1238,MPI_COMM_WORLD,req(7),ierr) call MPI_Isend(A(1,1),1,vectype,pup,1238,MPI_COMM_WORLD,req(8),ierr) call MPI_Waitall(8,req,status,ierr)
    DO J = 2, ncol-1
    DO I = 2, nrow-1
    B(I, J) = (A( I-1, J ) + A( I, J-1 ) + A( I+1, J) + A( I, J+1 )) / 4
    ENDDO
    ENDDO
    ENDDO call MPI_Finalize(ierr)
    END
    Приложение 2.
    Параллельная Fortran-программа c использованием
    OpenMP (вычисление числа
    π
    , по материалам [9])
    Цветом (насыщенностью) выделены относящиеся к OpenMP структуры
    PROGRAM COMPUTE_PI parameter (n = 1000) integer i double precision w,x,sum,pi,f,a f(a) = 4.D0/(1.D0+a*a) w = 1.0D0/n sum = 0.0D0;
    !$OMP PARALLEL DO PRIVATE(x), SHARED(w)
    !$OMP& REDUCTION(+:sum)
    do i=1,n x = w*(i - 0.5D0) sum = sum + f(x) enddo pi = w * sum print *, 'pi = ',pi stop end
    Приложение 3.
    Программа рекурсивного обхода дерева
    (язык T++, основная часть кода).
    // Специальный заголовочный файл
    txx
    переопределяет (с помощью макроопределений)
    // все ключевые слова, добавленные в язык C++ для обеспечения функциональности Т++

    - 123 -
    #include
    #include
    #include struct tree { struct tree tptr left; struct tree tptr right; int value;
    }; struct tree tptr create_tree(int deep) { struct tree tptr res = new tval tree; res->value = 1; if (deep <= 1) { res->left = NULL; res->right = NULL;
    } else { res->left = create_tree(deep-1); res->right = create_tree(deep-1);
    } return res;
    } tfun int tsum(struct tree tptr tree) { tval int leftSum, rightSum; if (tree->left != NULL) { leftSum = tsum(tree->left);
    } else { leftSum = tree->value;
    } if (tree->right != NULL) { rightSum = tsum(tree->right);
    } else { rightSum = tree->value;
    } return leftSum + rightSum;
    } tfun int main (int argc, char* argv[])
    { struct tree tptr tree = create_tree(12); printf("sum = %d\n", (int) tsum(tree)); return 0;
    }
    Приложение 4.
    НОРМА- программа умножения матриц
    [c]=[a]
    ×[b]
    размерностью a[iMAX][kMAX], b[kMAX][jMAX], c[iMAX][jMAX]
    на линейке процессоров размерности 12
    MAIN PART MMmatrix.
    ! Программа умножения матриц (основной раздел)
    BEGIN
    Oi: (i=1..iMAX). ! определение одномерных областей
    Oj: (j=1..jMAX).

    - 124 -
    Ok: (k=1..kMAX).
    OA: (Oi; Ok). ! определение двумерных областей
    OB: (Ok; Oj).
    OC: (Oi; Oj).
    VARIABLE a DEFINED ON OA DOUBLE. ! определение переменных на областях
    VARIABLE b DEFINED ON OB DOUBLE.
    VARIABLE c DEFINED ON OC DOUBLE.
    OUTPUT c(FILE='MMmatrix.out') ON OC. ! операция вывода результирующей матрицы [C]
    DOMAIN PARAMETERS iMAX=500. ! определение констант
    DOMAIN PARAMETERS jMAX=1000.
    DOMAIN PARAMETERS kMAX=1000.
    FOR OA ASSUME a=(i-1)+(k-1). ! коллективная операция для задания
    FOR OB ASSUME b=(k-1)
    ×
    (j-1). ! начальных значений элементам a[i][k] и b[k][j] матриц
    COMPUTE Pmatrix(a ON OA, b ON OB RESULT c ON OC). ! вызов процедуры Pmatrix
    END PART. ! конец основного раздела
    PART Pmatrix. ! начало раздела Pmatrix a,b RESULT c ! a,b - входные параметры, с - выходной
    ! тело процедуры Pmatrix
    BEGIN
    DOMAIN
    PARAMETERS iMAX=500.
    DOMAIN PARAMETERS jMAX=1000.
    DOMAIN PARAMETERS kMAX=
    1000.
    Oi: (i=1..iMAX).
    Oj: (j=1..jMAX).
    Ok: (k=1..kMAX).
    OA: (Oi; Ok).
    OB: (Ok; Oj).
    OC: (Oi; Oj).
    VARIABLE a DEFINED ON OA DOUBLE.
    VARIABLE b DEFINED ON OB DOUBLE.
    VARIABLE c DEFINED ON OC DOUBLE.
    DISTRIBUTION INDEX i=1..12, k=1. ! описание топологии многопроцессорной системы
    FOR OC ASSUME c=SUM((Ok)a[i,k]
    ×
    b[k,j]). ! коллективная операция
    b
    a
    с
    kj
    kMAX
    k
    1
    k
    ik
    ij
    ×
    =

    =
    =
    END PART. ! конец раздела Pmatpix

    - 125 -
    Учебное издание.
    Баканов Валерий Михайлович
    Параллельные вычисления
    Учебное пособие
    ЛР № 020418 от 08 октября 1997 г.
    Подписано в печать 02.02.2006 г.
    Формат 60
    ×
    84. 1/16.
    Объем 7,5 п.л. Тираж 100 экз. Заказ 16.
    Московский государственный университет приборостроения и информатики.
    107996, Москва, ул.Стромынка, 20.
    1   ...   8   9   10   11   12   13   14   15   16


    написать администратору сайта