Показать сообщение отдельно

  #10  
Старый 11.07.2008, 16:13
merax
Новичок
Регистрация: 03.07.2007
Сообщений: 18
С нами: 9924497

Репутация: 28
По умолчанию

Параллельные вычисления в Microsoft Visual C# (NET Framework 3.5)

На сегодняшний день развитие индустрии компьютеростроения идет широкими шагами. Растут объемы оперативной памяти, частоты работы процессоров, количество процессоров и их ядер. Не секрет, что даже самый маленький процессор сегодняшнего дня производительностью превосходит процессоры для серверных платформ дня вчерашнего. Но зачастую гигагерцы процессоров и гигабайты оперативной памяти сводятся на нет невозможностью современного софта использовать аппаратные ресурсы на 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.

Parallel Extensions to .NET Framework 3.5

Последний раз редактировалось merax; 11.07.2008 в 17:09..
 
Ответить с цитированием