Xwab
Форумыnavigate_nextДругие языки программирования

Параллельные вычисления в Microsoft Visual C# (NET Framework
Сообщения
COOLBOY007

Автор: merax

На сегодняшний день развитие индустрии компьютеростроения идет широкими шагами. Растут объемы оперативной памяти, частоты работы процессоров, количество процессоров и их ядер. Не секрет, что даже самый маленький процессор сегодняшнего дня производительностью превосходит процессоры для серверных платформ дня вчерашнего. Но зачастую гигагерцы процессоров и гигабайты оперативной памяти сводятся на нет невозможностью современного софта использовать аппаратные ресурсы на 100%.
Это понимают и производители программного обеспечения и производители «Железа», стремясь разработать технологию позволяющую «нагрузить» компьютер по «полной». Сегодня мы рассмотрим одно из таких решений.

1) Библиотека Parallel Extensions to .NET Framework 3.5 от фирмы Microsoft corp. (Подробнее о ней можно почитать в MSDN выпуск - October 2007).

Итак, для экспериментов нам понадобятся: (Ссылки на программы даны в конце статьи)

1) Microsoft Windows XP или Vista…
2) Microsoft .NET Framework 3.5 (Входит в комплект поставки Visual Studio 2008/2008 Express Edition)
3) Visual Studio 2008 Express Edition.
4) Библиотека Parallel Extensions to .NET Framework 3.5.

Parallel Extensions to .NET Framework 3.5

Скачиваем и устанавливаем библиотеку Parallel Extensions to .NET Framework 3.5. Запускаем Visual Studio и создаем консольный проект на C# for .NET. Щелкаем на вкладке References нашего проекта и выбираем Add Reference. Далее во вкладке Browse находим библиотеку System.Threading.dll (По-умолчанию -> c:\Program Files\Microsoft Parallel Extensions Dec07 CTP\). В редакторе кода дописываем:

using System.Threading; using System.Runtime.InteropServices;



Теперь наш проект готов для работы на нескольких ядрах. Осталось применить что-нибудь этакое для наглядности. Для начала удостоверимся, что ядер действительно несколько:


if (System.Environment.ProcessorCount < 2) { Console.WriteLine("You not have Multi-Core platform\n"); }



Выведем меню, будем грузить 1 ядро и потом 2…


Console.WriteLine("If you want test Single-Core platform press 1"); Console.WriteLine("If you want test Mullti-Core platform press 2"); r = Console.ReadLine();



Поможет нам старый добрый switch. Сначала грузим 1 ядро:


switch(r) { case "1": for (int i = 0; i < 100000; i++) { Console.WriteLine("{0} > {1}", Math.Pow(i, 2.0).ToString(), Math.Pow(i, -2.0).ToString()); } break;



Откройте «Диспетчер задач» и посмотрите наглядно, как загружено 1 ядро…
А теперь распараллелим вычисления:


case "2": System.Threading.Parallel.For(0, 100000, delegate(int i) { Console.WriteLine("{0} <-> {1}", Math.Pow(i, 2.0).ToString(), Math.Pow(i, -2.0).ToString()); }); break; default: { Console.WriteLine("Error number"); break; }



Откройте «Диспетчер задач» и посмотрите наглядно, как загружен процессор сейчас!
Вот мы с вами и научились писать распределенные приложения, балансируя нагрузку на CPU компьютера с помощью Parallel Extensions to .NET Framework 3.5.
В следующей статье мы рассмотрим, написание многопоточных приложений без использования .NET Framework с помощью библиотеки Intel® TBB (Threading Building Blocks) – кроссплатформенная библиотека для параллельных вычислений от фирмы Intel.

25 Сен 2010, 15:11
Ответить на тему