пятница, 30 января 2009 г.

Производительность операции умножения матриц на процессоре IBM CELL

По результатам исследования, представленном на сайте IBM, указана производительность SPE-ядра процессора CELL на уровне 25 GFl/sec при выполнении умножения матриц. Цифра довольно-таки приличная, поэтому было решено её проверить.
Как оказалось, при типовой реализации операции умножения матриц тройным вложенным циклом производительность получается в районе 400 MFl/sec. Код примерно такой:


for (i = 0; i < _elemCount; ++i)
{
vectRes = (vector float*) (_vectRes[i]);
for (j = 0; j < _elemCount; ++j)
{
vectA = spu_splats(_vectA[i][j]);
vectB = (vector float*) (_vectB[j]);
for (k = 0; k < vectCount; ++k)
{
vectRes[k] = spu_madd(vectA, vectB[k], vectRes[k]);
}
}
}


Коэффициент зависимых инструкций данного кода порядка 64%. Это означает, что конвейер практически не загружается.
Учитывая, что размерность вектора нам, в принципе известна, можно произвести раскрытие третьего вложенного цикла и получить произвоительность на уровне 2GFl/sec. А используя опции оптимизации gcc можно добиться даже 8GFl/sec.
Понять, куда пропали оставшиеся 17GFl/sec можно изучив исходный код умножения матриц, рожденный в кулуарах IBM [5]. Программа эта содержит порядка 1000 строк кода.
Не каждый разработчик решиться реализовывать процедуру умножения матриц 1000 строками кода вместо 10.
Таким образом, в зависимости от того важна эффективность программы либо оптимальность её кода, можно расчитывать на те или иные числа производительности процедуры умножения матриц.

На сайте ГУАП "Неоднородный многоядерный процессор CELL: архитектура и программирование" представлена полная версия научной работы. Научная работа была защищена на Втором Всероссийском форуме студентов, аспирантов и молодых ученых "Наука и инновации в технических университетах".

Использовались источники:
1. Cell Broadband Engine Programming Handbook v1.1
2. Software Development Kit for Multicore Acceleration v.3.0 “Programming Tutorial”
3. C/C++ Language Extensions for Cell Broadband Engine Architecture v2.4
4. Performance Analysis with the IBM Full-System Simulator v3.0
5. Cell Repository. “src/workloads/matrix_mul/spu/block.c”, sw.workloads, sdk_pub 10/11/05 15:29:21
6. Cell Broadband Engine Architecture and its first implementation

вторник, 27 января 2009 г.

Формирование нестандартных графиков с использованием MSChart

24 ноября 2008 года, видимо, в противовес тегу canvas из наступающего стандарта html5, Microsoft выпустила серверный компонент ASP - MS Chart Control (доступен в сборке System.Web.UI.DataVisualization.Charting), посвященный построению графиков. Компонент на стороне сервера генерирует изображение графика и отправляет его клиенту картинкой в форматах BMP, EMF, PNG, JPEG, что очень удобно при удовлетворении требования браузерной совместимости.
Лично меня интересовали возможности компонента по работе с круговыми диаграммами, в частности, построение розы ветров. График такого типа Chart Control не поддерживает. Наиболее похожий - Polar Chart, выводящий данные точками, а не многоугольниками как требуется.
Осуществить модификацию внешнего вида диаграммы к нужному возможно определением собственного обработчика на событие OnPostPaint, обрабатывающего объект Graphics из System.Drawing. Обработчик должен получать два параметра:
  1. object - кто послал;
  2. System.Web.UI.DataVisualization.Charting.ChartPaintEventArgs - с чем послал.
Через object будут доступны исходные данные диаграммы для того, что бы знать, что рисовать на объекте Graphics. Ниже представлен пример получения данных диаграммы и объекта Graphics:
System.Web.UI.DataVisualization.Charting.Chart chart = (System.Web.UI.DataVisualization.Charting.Chart)sender;
System.Web.UI.DataVisualization.Charting.ChartArea area = chart.ChartAreas[0];

Graphics context = e.ChartGraphics.Graphics;
Это просто пример. Если будете его использоать - делайте это осторожно, т.к. график может содержать нуль или несколько пространств (ChartAreas).
Следующий этап работы - связывание исходных данных диаграммы с координатной плоскостью объекта Graphics. Как оказалось, до центра круговой диаграммы добраться довольно-таки сложно:
double xCenter = area.Position.Width / 2 + area.Position.X;
double yCenter = e.ChartGraphics.GetPositionFromAxis(area.Name, System.Web.UI.DataVisualization.Charting.AxisName.Y, area.AxisY.Minimum);
И это центр круговой диаграммы на объекте Graphics... Если положение горизонтального центра ещё можно предсказать, то положение центра вертикали объяснения не находит.
Одного центра для того, что бы комфортно развернуться на пространстве, предоставляемом объектом Graphics, не достаточно. Надо знать и радиус разворота - максимальный радиус окружности диаграммы на графике. Получить его возможно следующим образом:
double xRadius = Math.Abs(xCenter - e.ChartGraphics.GetPositionFromAxis(area.Name, System.Web.UI.DataVisualization.Charting.AxisName.X, 0f));
double yRadius = Math.Abs(yCenter - e.ChartGraphics.GetPositionFromAxis(area.Name, System.Web.UI.DataVisualization.Charting.AxisName.Y, area.AxisY.Maximum));
Через дебаггер не сложно удостовериться, что радиус окружности диаграммы по горизонтали не есть радиус окружности по вертикали. Это означает, что при позиционировании графических примитивов используется разный шаг координат в относительных величинах по осям OX и OY координатной плоскости. Таким образом, вычисление координаты точки, представленной радиальными координатами, на поле Graphics надо производить следующим образом:
double x = xLength * Math.Cos(angle) + xCenter;
double y = yLength * Math.Sin(angle) + yCenter;
, где xLength и yLength есть нормированные с учетом радиуса коордитаты точки в системе осей OX и OY.
Обладая всеми необходимыми данными о координатной плоскости Graphics возможно осуществить уверенное рисование нужных многоугольников
context.FillPolygon(new SolidBrush(s.Color), new PointF[] { center, point1, point2, point3 });
В итоге получаем подобие интересующей розы ветров:
Дальше осталась несложная работа по представлению розы в более привлекательном виде.

Если вас заинтересовал данный компонент, советую посетить коммьюнити.

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

Изменения при работе с timestamp в PostgreSQL 8.3

После очередного обновления версий на сервере с PostgreSQL обнаружлось, что старые конструкции для работы с timestamp-полями не срабатывают.
Например, имеем таблицу:

CREATE TABLE logs (
l_id bigint DEFAULT nextval('logs_seq'::regclass) NOT NULL,
l_date timestamp without time zone,
);
Хотим из неё что-то:
select count(l_id) from logs where l_date like '%2009-01-01%'
Получаем ответ в виде:
ERROR: operator does not exist: timestamp without time zone ~~ unknown at character 43
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Из официального источника удалось узнать что c версии 8.3 отсутствует автоматическоге приведение типа timestamp к строке. Решение изложено там же. Хотеть чего-то от таблицы в такой ситуации имеет смысл следующим образом:
select count(l_id) from logs where date_trunc('day', l_date) = '2009-01-01'
Функция date_trunc позволяет представлять данные из поля timestamp с определенной точностью. В данном случае точность указывается до дня. В документации представлен объемный список параметров функции date_trunc для обеспечения метке времени той или иной точности:
  • microseconds
  • milliseconds
  • second
  • minute
  • hour
  • day
  • week
  • month
  • quarter
  • year
  • decade
  • century
  • millennium
Последнее значение из списка особенно актуально...

четверг, 22 января 2009 г.

Получение SPE идентификатора при построении вычислительной системы с использованием ALF на процессоре IBM CELL

Внезапно обнаружил, что используя бибилиотеку ALF как-то невозможно узнать идентификатор ядра, на котором выполняется workblock.
Например, библиотеки libspe или libspe2 предполагают автоматическую передачу идентификатора вычислительного ядра процессора CELL программному коду, выполняющемуся на нем, в то время как ALF ограничивает ресурсы программы, выполняющейся на вычислительном ядре исключительно контекстом рабочего блока и задачи, определяемыми пользователем в управляющем ядре PPE [*].
Таким образом, получается невозможным построение вычилсительной системы с нетривиальными связями между вычислительными ядрами процессора. Например, систолический алгоритм умножения матриц с передачей промежуточных результатов из одного вычислительного ядра в другое реализовать невозможно, сохраняя функциональность ALF.
Интересно, существует ли возможность какого-то совместного использования libspe2 и ALF. Что бы как-нибудь передать-таки идентификатор при создании вычислительной гранулы ALF, аналогично функции spe_create_thread из libspe2?

По материалам из:
1. Accelerated Library Framework for Cell Broadband Engine Programmer’s Guide and API Reference Version 3.0
2. SPE Runtime Management Library Version 1.2
3. SPE Runtime Management Library Version 2.2
4. SPE Runtime Management Library Version 1 to Version 2 Migration Guide

среда, 21 января 2009 г.

Баг в ie7 при работе с функцией Number.toFixed()

Начало
Что-то я начал думать, что из математики что-нибудь забыл, поэтому решил проверить багу из ie в остальных популярных браузерах. Исходный код странички:

<html>
<body>
<div>Number.toFixed with 0.094</div>
<div id="val094"></div>

<div>Number.toFixed with 0.095</div>
<div id="val095"></div>

<div>Number.toFixed with 0.194</div>
<div id="val194"></div>

<div>Number.toFixed with 0.195</div>
<div id="val195"></div>

<script>

window.onload = function() {

var val094 = document.getElementById("val094");
val094.innerHTML = new Number(0.094).toFixed(1);

var val095 = document.getElementById("val095");
val095.innerHTML = new Number(0.095).toFixed(1);

var val194 = document.getElementById("val194");
val194.innerHTML = new Number(0.194).toFixed(1);

var val195 = document.getElementById("val195");
val195.innerHTML = new Number(0.195).toFixed(1);
}

</script>
</body>
</html>
Проверив, успокоился, т.к. ff3, opera 9.62, chrome 1.0.154.43 и safari 3.2.1 со мной солидарны... 0.094 при округлении до десятых долей всё-таки должны быть, вопреки мнению ie7, округлены до 0.1.

вторник, 20 января 2009 г.

Семинар "Web-разработка на языке PHP" компании "Эврика"

В минувшую пятницу ходил на рекламный семинар компании "Эврика", посвященный их новым курсам обучения по web-разработке на PHP. Программа мероприятий включала в себя пять докладов:

1. Компания ЭВРИКА - поставщик современных IT решений
2. Совместимость кода и нововведения PHP6 (Развитие интерпретатора PHP и вопросы совместимости кода; PHP6 - новые возможности)
3. Инструментарий web-разработчика (Интегрированные среды разработки; Средства отладки и профилирования; Системы создания документации)
4. Сертификация Zend PHP5 Certification (Текущая статистика по сертификации PHP-программистов; Процедура прохождения сертификации Zend; Знания и навыки, необходимые для успешной сдачи экзамена ZCE)
5. Эффективное использование возможностей PHP5 (Организация взаимодействия с различными СУБД; Обработка и создание XML документов средствами SimpleXML; SOAP и Web-сервисы)

Прослушав первый доклад могу сделать вывод - не впечатляет и не актуально... PHP уже морально стар. PHP6 разрабатывается вяло, в то время как по потребностям, он уже давно должен быть в релизе.

Второй доклад вызвал вопрос по утверждению в предназначении PHP для решения задач любого уровня сложности. Не правда - развитый веб-сервис вряд ли кто-то решит писать на PHP. Но бог с ними, с веб-сервисами - ведь про это можно послучать пятый доклад, там и спросить, но существуют вопросы эффективности использования PHP при построении даже простых ИС.

Третий доклад мне понравился. Было представлено много решений, заслуживающих внимания:
1. WAMPServer, позволяющий управлять связкой Apache, MySQL, PHP под Windows с различными конфигурациями. Утверждалось, что достаточно установить новый сервер Apache или MySQL и/или интерпретатор PHP для простой интеграции его дескриптора в WAMP с последующей установкой в связку каких угодно версий. Не проверял - использую только Apache 2.0 и 2.2 с PHP5 и MySQL4 и 5;
2. NetBeans 6.5, как IDE для разработки под PHP порадовал своим профайлером. Действительно, вещь нужная. К недостаткам относится только весьма скромные средства рефакторинга - практически никакие, кроме переименования. Кроме того в многомодульном проекте с глобальными переменными это переименование не работает.
Было указано, что развитыми рефакторингами обладает Zend Studio. Не проверил, ввиду платности последнего. Не упомянули мой любимый PhpEd, хотя это довольно-таки развитое и популярное средство, даже обладающее встроенным сервером с PHP4 и 5.
3. Хорошее средство просмотра профилей xDebug - WebGrind. Главное - бесплатное. Хотя мне по духу все-таки профайлер из PhpEd, которого снова не упомянули...
4. Из средств автоматизации документирования phpDocumentor упомянули, Doxygen не забыли, но где великий DocBook?!

В четвертом докладе заметили интересный факт - больше половины сертификатов ZCE в России на данный момент были получены в 2008 году (31 из 56)... пора что-ли сертифицироваться...

В пятом докладе я был приятно порадован рассказом о PDO и SimpleXML библиотеках. Это вещи заслуживающие использования при разработке на PHP.
Но вот долгожданные веб-сервисы обошли стороной - не хватило времени. А я очень хотел послушать что-нибудь вразумительное про эффективность разработки веб-сервисов на PHP. Вопрос остался вопросом...

понедельник, 19 января 2009 г.

Несоответсвия функций NumberPrototype.toFixed (.NET сборка Microsoft.JScript) и Number.toFixed (MS IE JavaScript)

Очень странная штука обнаружилась при работе с функцией Number.toFixed при разработке под IE 7-ку (7.0.5730.13):
new Number(0.095).toFixed(1) это есть "0.1"
в то время как
new Number(0.094).toFixed(1) будет почему-то "0.0"
При этом, например:
new Number(0.195).toFixed(1) есть "0.2"
и
new Number(0.194).toFixed(1) есть "0.2"
Все это ещё интереснее становится, если выяснить, что в классе NumberPrototype сборки Microsoft.JScript фреймворка .NET всё грамотнее:
NumberPrototype.toFixed(0.095, 1) есть "0.1"
NumberPrototype.toFixed(0.094, 1) так же "0.1"
Явная бага с округлением, по которой, разумеется, никакой информации нет. Если кто видел что-нибудь подобное, отзовитесь, пожалуйста.

P.S. За правдой я пошел в MSDN. Может быть её узнаем...
P.P.S. Через сутки после поста на форуме MSDN - нуль реакции. Продолжил вопрошать в коммьюнити.

четверг, 15 января 2009 г.

Немного про кризис

Во время принятия решения по перспективам собственных сбережений наткнулся на довольно-таки доступное изложение сути происходящих в России процессов с возможными вариантами исхода.

Все предстваленно достаточно логично в моем понимании, обоснованно, с указанием источников.
Ожидаю дальнейших подтверждений представленных прогнозов.

среда, 14 января 2009 г.

Почему не хочется покупать ноутбуки Samsung

Во время очередного ежегодного апгрейда ноутбука (продажа старого, добавление денюжек и покупка нового) мной был куплен ноутбук Samsung с Windows Vista. Т.к. занимаюсь разработкой ПО, работать на достаточно сырой и недостаточно стабильной ОС на тот момент не представлялось возможным. Установив XP, я попробовал вернуть стоимость Висты (мелочь, а приятно) аналогично одному известному случаю с компанией Benq. Ниже приведена переписка с российским представлительством компании Samsung:

Здравствуйте,

06.09.2008 в магазине Ulmart (Санкт-Петербруг) я приобрёл ноутбук Samsung Q210-FA1.
Дома, при первом включении, я не принял текст лицензионного соглашения на ОС Windows Vista и установил ОС Windows XP, купленную мной ранее.
В тексте лицензионного соглашения указывалась возможность возврата стоимости ОС в случае не принятия лицензионного соглашения и не использования програмного обеспечения.
Поясните, пожалуйста, порядок возврата стоимости ОС Windows Vista.

С уважением,
Алексей.


На что был получен ответ следующего содержания:

Здравствуйте!



Данное программное обеспечение является комплектующим указанной модели ноутбука. В соответствии со ст.478 ГК РФ продавец обязан передать покупателю товар, соответствующий условиям договора купли-продажи о комплектности. Договором розничной купли-продажи предусмотрено, что модель ноутбука Samsung Q210-FA1 продается в комплекте с программным обеспечением EULA Microsoft Windows Vista. Приобретая данный ноутбук, Вы выразили свое согласие на заключение договора розничной купли-продажи ноутбука в комплекте с указанным программным обеспечением. Таким образом, передавая Вам товар в полной комплектации, торгующая организация (продавец) выполнила свою обязанность, предусмотренную договором и законом.

Право на свободный выбор товара гарантирован Законом РФ «О защите прав потребителей» и Гражданским кодексом РФ. Согласно п. 1 ст.10 Закона РФ «О защите прав потребителей» изготовитель (продавец) обязан своевременно предоставлять потребителю необходимую и достоверную информацию о товарах, обеспечивающую возможность их правильного выбора. С целью соблюдения данного положения закона РФ «О защите прав потребителей» компания-изготовитель доводит по потребителя информацию о комплектности товара, в том числе о комплектовании приобретенной Вами модели ноутбука программным обеспечением версии Microsoft Windows Vista. Из содержания Вашего письма следует, что Вы самостоятельно и добровольно выбрали место приобретение ноутбука (продавца), модель ноутбука, комплектность ноутбука. Таким образом, до Вас была доведена полная и достоверная информация о комплектности товара и, соответственно, было обеспечено право на свободный выбор товара.



C уважением,

Растегаев Антон

Информационный центр для потребителей

Самсунг Электроникс Россия


Раз пошло упоминание статей, я решил сообщить г-ну Растегаеву - человеку неизвестной должности в компании Samsung - следующее:

Здравствуйте.

Дело в том, что товар выбирался исключительно по соответствию весо-габаритных, аппаратных и стоимостных характеристик предъявляемым требованиям к ноутбуку. Перед приобретением я посетил несколько магазинов, рассматривал разные модели, и не обнаружил ни моделей ноутбуков прочих производителей, аналогичных по указанным параметрам модели Samsung Q210 в поставке без ОС Windows Vista, ни непосредтвенно модели Samsung Q210 в поставке без ОС Windows Vista.

Статья 16 закона РФ «О защите прав потребителей» в части 2 запрещает обуславливать приобретение одного товара обязательным приобретением другого. Ноутбук Samsung Q210 и ОС WV являются разными товарами. Именно поэтому, согласие на использование ОС WV пользователь выражает принятием лицензионного соглашения в соответствии с положениями гражданского кодекса РФ. Соглашение на использование ОС WV, определенное в соответсвии со статьей 1286 ГК РФ п.3 я не заключил и, тем самым, не осуществил приобретение данного программного продукта через договор присоединения. Однако, стоимость данного программного продукта, который я не приобретал, включена в стоимость ноутбука Samsung Q210.

Далее, в лицензионном соглашении EULA Microsoft Windows Vista, жирным шрифтом указана возможность возврата стоимости ОС WV производителем или установщиком ПО в случает отказа от её приобретения и последующего возврата ПО. Дословно текст EULA Microsoft Windows Vista:
"Используя это программное обеспечение, вы тем самым подтверждаете свое согласие соблюдать эти условия. Если вы не согласны, не используйте это программное обеспечение. В этом случае выясните у изготовителя или установщика порядок возврата продукта, получения возмещения его стоимости или зачисления эквивалентной суммы на ваш счет".
Я не согласен с EULA MS WV и не использовал ОС WV.
Объясните, пожалуйста, порядок возврата программного продука и возмещения его стоимости.


На чем переписка и закончилась. Ни одного ответа от компании Samsung ни на это письмо, ни на последующее подобного содеражния получено не было.
Учитывая данное игнорирование вопросов клиента, для себя я сделал вывод об отсутсвии необходимости в последующем приобретении товаров этой компании.

вторник, 13 января 2009 г.

Комментарий на видеопослание президента РФ об отдыхе

Теперь существует возможность оставлять комментарии к посланиям президента на официальном сайте президента. Активация пользователя для получения возможности оставлять комментарии у меня заняла 4,5 часа. Модерация комментария к видеопосланию в моем случае составила порядка 5-ти минут.

Т.к. тематика послания касалась меня непосредственным образом, нельзя было не выразить свое мнение. Мнение было опубликовано в комментариях 13 января 2009 20:05.

Здравствуйте, Дмитрий Анатольевич.
Как человек, для личностного развития активно занимающийся различными видами физической культуры - бегом, шоссейным и горным велосипедом, беговыми лыжами, хочу выразить частичное несогласие с тем, что условия для занятия спортом по крайней мере в регионе Санкт-Петербурга и области являются достойными.
В частности простое катание в соответсвии с ПДД на велосипеде по городу за последние 3 года ухудшилось настолько, что этот процесс можно сравнивать с лотерей - собьют или нет. В нашем городе площадью ~1500 кв.км. существует только одна велодорожка с ограждением протяженностью всего 5 км. Никакой инфраструктуры для катания на внедорожном велосипеде в парках города (напр. парке "Сосновка", Удельном парке или Парголовском) нет. Велосипедисты вынуждены кататься по одним дорожкам с гуляющими с детьми гражданами, создавая множество травмоопасных ситуаций.
В Ленинградской области ситуация для людей увлекающихся шоссейным спортом ещё хуже - не существует ни одной раздельной с шоссе велосипедной дорожки. Даже хуже - не существует ни одной даже размеченой под велосипедную дорожку полосы на шоссейных дорогах области. С поддержкой внедорожного велоспорта ситуация аналогична. Хозяйствующие субъекты Ленинградской области не предпринимают никаких видимых усилий по созданию трасс для МТБ соревнований и тренировок. Созданием и поддержкой таких трасс занимаются исключительно инициативные граждане за свой счет и в свое свободное время.
С занятием беговыми лыжами ситуация лучше - места, где можно побегать коньком есть. Но мало. Хоть как-то поддерживаются всего три трассы - на базе завода "Прибой", трасса ВИФК и трасса СКА. Для города-миллионника - три трассы - это очень мало.
Кроме указанных проблем сущесвуют и положительные тенденции. Во дворах появляются хорошо оборудованные спортивные площадки с открытым доступом, предназначенные для занятий легкой атлетикой и игровыми видами спорта, за что спасибо правительству города.
Обновление: Появилось продолжение истории

понедельник, 12 января 2009 г.

Opera и Content-Type (решение)

Определение проблемы

Для решения данной проблемы помимо грамотного указания html-заголовка:

<meta equiv="Content-type" content="text/html; charset=utf-8">


необходимо явное определение http-заголовка (в случае php):

header('Content-type: text/html; charset=utf-8');

воскресенье, 11 января 2009 г.

Opera и Content-Type

Почему Opera (Opera 9.6) воспринимает html-тело в кодировке по Conent-Type, указанному в http-загловке, а не в теге meta html-загловка?