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

1,348 views

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,348
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • инструменты параллельного программирования

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

    ×