суббота, 31 октября 2009 г.

Параллельный LINQ

Многоядерные и многопроцессорные системы уже ни для кого не являются новостью, так как прогресс никогда не стоит на месте. В данном посте я хочу немного рассказать про набор расширений Parallel FX, а конкретно про PLINQ - механизм выполнения LINQ запросов на многоядерных системах. Отличия  с точки зрения синтаксиса в LINQ и PLINQ минимальны, все что требуется от программиста - это обвернуть источник данных в IParallelEnumerable<T> с помощью расширения System.Linq.ParallelEnumerable.AsParallel. К примеру возьмем запрос:

var T = Dat.Where(x => x.Value == 5).Select(x => x);

для его распараллеливания следует внести следующие изменения:

 var T = Dat.AsParallel().Where(x => x.Value == 5).Select(x => x);

Или же:

var T = from A in Dat.AsParallel() where A.Value == 5 select A;

Все! При выполнении запроса PLINQ сам организует запуск его частей на доступных процессорах.
Прелесть этой системы состоит в том, что от программиста вообще не требуется  никаких знаний параллельного программирования, а затраты на ее внедрение - минимальны.

Ссылки:
http://en.wikipedia.org/wiki/Parallel_Extensions
http://msdn.microsoft.com/ru-ru/magazine/cc163329.aspx

среда, 28 октября 2009 г.

IntelliTrace & Reverse Debugging в VS2010

Совсем недавно я писал про весьма удобную фишку VS2005/VS2008 - Tracepoints. В VS2010 пошли дальше и добавили - IntelliTrace (ранее известен как Historical Debugger). IntelliTrace - это вариант отладки (к сожалению доступен только для управляемого кода), при котором, кроме стандартных опций отладчика Visual Studio, вы можете выполнить полную трассировку программы, то есть просмотреть все UI события, User gestures, обращения к файловой системе, сети, реестру, LINQ запросы и т. п., а также в каждой контрольной точке видеть значение локальных переменных, call stack и т. д.

















Два раза кликнув по нужной записи - можно перейти к соответствующему участку кода в программе.

Дальше - лучше. IntelliTrace позволяет выполнять отладку как вперед так и назад. По умолчанию эта опция выключена. Для ее включения нужно поставить переключатель "IntelliTrace events and call information".














После этого во время отладки, слева от окна редактора появляется специальная панель.


Return to Call site
Go to previous call
Step in
Go to next call
Go to live mode.



Как видим, процесс отладки в VS станет заметно удобнее для программиста.

Ссылки: http://blogs.msdn.com/habibh/archive/2009/09/21/coverage-of-the-visual-studio-2010-historical-debugger.aspx

понедельник, 26 октября 2009 г.

Unigine heaven benchmark (DX11)

Ребята из Unigine выпустили бенчмарк на DX11. В демке преимущественно демонстрируется одна из основных фич ДХ11 - аппаратная тесселяция. Вынужден признать - картинка меня впечатлила. Красиво).













 Вот список ключевых фич:
* Native support of OpenGL, DirectX 9, DirectX 10 and DirectX 11
* Comprehensive use of tessellation technology
* Advanced SSAO (screen-space ambient occlusion)
* Volumetric cumulonimbus clouds generated by a physically accurate algorithm
* Dynamic simulation of changing environment with high physical fidelity
* Interactive experience with fly/walk-through modes
* ATI Eyefinity support



 Ссылки  на источник:
http://unigine.com/press-releases/091022-heaven_benchmark/
http://binstream.livejournal.com/82398.html#cutid1

четверг, 22 октября 2009 г.

Visual Studio Tracepoints

В Visual Studio есть одна интересная функция, которую я раньше в упор не замечал.
Очень часто во время отладки или тестирования кода возникает потребность выводить на экран значения тех или иных переменных. Раньше эта проблема решалась добавлением в код соответствующих методов: printf, Log, MessageBox, Console.WriteLine и т.п. Оказывается все намного проще и удобнее. В VS, начиная с 2005, есть Tracepoints. Это своего рода аналог Breakpoint, который позволяет выводить какие либо сообщения в DebugOutput. Создается трейспоинт через меню правой кнопкой, Breakpoint -> Insert Tracepoint.


 В появившемся окне можно определить формат и переменные для вывода либо макрос, который будет запускаться. Таким образом можно просматривать нужные данные не изменяя код.