• Save
инструменты параллельного программирования
Upcoming SlideShare
Loading in...5
×
 

инструменты параллельного программирования

on

  • 1,869 views

 

Statistics

Views

Total Views
1,869
Views on SlideShare
1,865
Embed Views
4

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

инструменты параллельного программирования инструменты параллельного программирования Presentation Transcript

  • Инструменты параллельного программирования для .NET : ParallelFx, OpenMP и MPI.NET Александр Петров 445 группа Математико-механический факультет СПбГУ
  • План
    • ParallelFx
    • OpenMP
    • MPI.NET
  • ParallelFx : описание
    • Библиотека параллельных вычислений для управляемого кода
    • Текущее название: Parallel Extensions
      • Parallel LINQ (PLINQ)
      • Task Parallel Library (TPL)
      • Coordination Data Structures (CDS)
  • ParallelFx : история
    • Microsoft Research и CLR team
    • CTP
      • 29 ноября 2007
    • Обновления CTP
      • декабрь 2007
      • июнь 2008
        • CDS
    • Официальный выход с .NET 4.0
  • ParallelFx : PLINQ
    • Движок для параллельного выполнения запросов LINQ
      • Параллелизм запросов
        • LINQ - объекты
        • LINQ-X ML
    • Поддерживает все операторы LINQ
    • Требуется
      • Ссылки на сборку System.Concurrency.dll в ходе компиляции.
      • Обертывания источника данных в IParallelEnumerable<T> с вызовом метода расширения System.Linq.ParallelEnumerable.AsParallel.
  • ParallelFx : PLINQ пример
    • IEnumerable<T> data = ...;
    • var q = data.Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));
    • foreach (var e in q) a(e);
    • IEnumerable<T> data = ...;
    • var q = data.AsParallel().Where(x => p(x)).Orderby(x => k(x)).Select(x => f(x));
    • foreach (var e in q) a(e);
  • ParallelFx: TPL
    • Параллелизм на основе заданий ( task parallelism )
    • Task and Future
      • Task – это действие, которое может быть выполнено независимо от остальной программы
      • Future – это Task , который возвращает результат
    • Требуются механизмы синхронизации на общую память
  • ParallelFx: TPL пример
    • for (int i = 0; i < 100; i++)
    • {
    • a[i] = a[i]*a[i];
    • }
    • Parallel.For(0, 100, delegate(int i)
    • { a[i] = a[i]*a[i]; });
  • ParallelFx : CDS
    • Структуры данных
      • Легковесные
      • Масштабируемые
      • Безопасные
        • ConcurrentStack
    • Синхронизационные примитивы
      • Высокоуровневые
      • Легковесные
        • SemaphoreSlim
          • Оптимизирован для короткого времени ожидания
  • План
    • ParallelFx
    • OpenMP
    • MPI.NET
  • OpenMP
    • Интерфейс для программирования на SMP- системах в модели общей памяти (shared memory model).
    • Спецификации стандарта OpenMP
      • набор директив компилятора
      • набор процедур
      • набор переменных среды
    • Компилятор с поддержкой OpenMP
    • .NET
      • Visual C++.NET 2005
      • OpenMP 2.0
  • OpenMP пример
    • i nt j;
    • #pragma omp parallel for
    • for ( j = 0; j < ARRAY_SIZE; j++);
    • array[j] +=j;
  • Visual C++ OpenMP пример
    • // omp_in_parallel.cpp
    • // compile with: /openmp
    • #include <stdio.h>
    • #include <omp.h>
    • int main( )
    • {
    • omp_set_num_threads(4);
    • printf_s(&quot;%d &quot;, omp_in_parallel( ));
    • #pragma omp parallel
    • #pragma omp master
    • {
    • printf_s(&quot;%d &quot;, omp_in_parallel( ));
    • }
    • }
  • План
    • ParallelFx
    • OpenMP
    • MPI.NET
  • MPI
    • MPI ( Message Passing Interface )
      • Параллелизм на основе передачи сообщений
      • SPMD
      • Системы с распределенной памятью
        • Кластерные вычисления
        • Грид вычисления
      • С/С++, Fortran
      • MPICH, MPICH2
  • MPI.NET
    • Реализация MPI для .NET
      • MS-MPI
      • Microsoft HPC Server 2008
      • Windows Compute Cluster Server 2003 (CCS)
      • MPI.NET SDK
        • Microsoft Compute Cluster Pack SDK
  • MPI.NET : пример 1
    • using System;
    • using MPI;
    • class MPIHello {
    • static void Main(string[] args)
    • {
    • using (new MPI.Environment(ref args)) {
    • Console.WriteLine(&quot;Hello, World! from rank &quot; + Communicator.world.Rank +
    • &quot;(running on &quot; + MPI.Environment.ProcessorName + &quot;)&quot;);
    • }
    • }
    • }
  • MPI.NET : пример 2
    • using System;
    • using MPI;
    • class Ring {
    • static void Main(string[] args)
    • {
      • using (new MPI.Environment(ref args))
      • {
      • Intracommunicator comm = Communicator.world;
      • if (comm.Rank == 0)
      • {
      • // program for rank 0
      • }
      • else // not rank 0
      • {
      • // program for all other ranks
      • }
      • }}
  • Спасибо за внимание Презентация на Slideshare : http://www.slideshare.net/alex_petrov
  • Ссылки Parallel Extensions
    • http :// blogs.msdn.com / pfxteam /
    • http ://blogs.msdn.com/somasegar/archive/2008/06/02/june-2008-ctp-parallel-extensions-to-the-net-fx.aspx
  • Ссылки PLINQ
    • http://msdn.microsoft.com/ru-ru/magazine/cc163329.aspx
  • Ссылки TPL
    • http://blogs.msdn.com/pfxteam/
  • Ссылки CDS
    • http://blogs.msdn.com/pfxteam/archive/2008/06/18/8620615.aspx
    • http://blogs.msdn.com/pfxteam/archive/2008/06/18/8614596.aspx
  • Ссылки OpenMP
    • http://www.parallel.ru/tech/tech_dev/openmp.html
    • http://software.intel.com/ru-ru/articles/choosing-between-openmp-and-explicit-threading-methods/
    • http://blogs.msdn.com/vijay/archive/2007/04/04/using-openmp-in-visual-c-net-2005.aspx
    • http://blogs.msdn.com/vijay/archive/2007/04/04/using-openmp-in-visual-c-net-2005.aspx
  • Ссылки MPI.NET
    • http://www.osl.iu.edu/research/mpi.net/
    • http://www.codeplex.com/mpinet
    • MPI: http://www.parallel.ru/tech/tech_dev/mpi.html
    • MPICH2: http://www.mcs.anl.gov/research/projects/mpich2/