Умножение матриц, серия 3: Woodcrest против Opteron, ACML против MKL, Goto BLAS против всех

Использованная в предыдущем тестировании библиотека численных методов Intel Math Kernel Library очевидно не является оптимизированной под процессоры AMD. Следовательно, нужно изучать альтернативы.

Альтернатив на сегодня видно три: это библиотека AMD Core Math Library от производителя процессора и две OpenSource библиотеки: Goto BLAS и ATLAS (Automatically Tuned Linear Algebra Software). Их и изучим.

Все бенчмарки были совершенно одинаковыми: заполнялись исходные матрицы (значениями от 0.0 до 1.0), затем вызывалась функция sgemm (для single precision) или dgemm (double), время выполнения которой и измерялось.

Кроме Dual Opteron 275, в руки попал еще сервер Dual Xeon 5140, показалось полезным сравнить две архитектуры.

Есть ли у журналистов запрет на профессию ?

Коммерсант жжот!

Как выяснили эксперты, студент варил в кастрюльке триперекись ацетона крайне взрывоопасное вещество на основе селитры.
Понятно, почему у него ничего не вышло. Он бы еще уху на основе мяса варил.

Кроме того, он совершил еще одно ужасное преступление

Кроме того, в кастрюльку были заведены два оголенных провода.
Вот ведь мерзавец! А если бы четыре провода завел? Разровняло бы ДАС по камушку!

И это еще хорошее издание. А ведь другую журналистскую продукцию мы хаваем и хаваем и хаваем. Про полоний. Про ураний. Про компьютеры. Впрочем, про компьютеры не хаваем.

И снова (и снова) о вебе и кодировках русского языка

Примерно к 2001 году вопрос с кодировками для русскоязычных WWW-сайтов казался полностью решенным: все сколько-нибудь распространенные браузеры научились кодировке Windows-1251 и только ее можно было оставить на сайтах (выдавая правильный Content-Type)

Но жизнь на месте не стоит и появилась новая беда: UTF-8. Никаких проблем с самой кодировкой нет - все поддерживают, работать несложно, можно писать многоязыковые документы.

Сейчас расцветает динамика, которую рисуют разными видами яваскрипта (document.write, element.innerHTML=...). При выводе таких блоков есть safe way - выводим все в...

Русская языка

Ехал в лифте в своем доме, читал новые правила пользования, много думал.

При поездке с собаками, входя и выходя из кабины, держите ее за ошейник.

Ну и трогательное "Кнопка «Стоп» (при ее наличии) служит для..."

Умножение матриц, серия 2: MKL против компилятора, single/double и int

Продолжаем умножать матрицы. Для начала смоделируем sgemm/dgemm: C=alpha*A*B+beta*C

Нас интересует, естественно, самый быстрый способ из изученных ранее, а вопрос заключается в разнице в скорости между float и double и разницы в скорости между простым кодом, написанным вручную, и библиотечной реализацией.

Пересчет Google PageRank: дата заморозки

Рассматривая результаты нового пересчета pagerank (не закончилось) - для каких страниц оно произошло, а для каких - нет, удалось довольно точно определить дату, на которую заморожено состояние интернета для пересчета.

PageRank пересчитали по состоянию на 13-16 ноября

  Обоснование:

О роли Яндекс.Каталога в Яндексе.Цитирования

Продолжение-дополнение предыдущей статьи:

О роли Яндекс.Каталога в Яндексе.Цитирования

В предыдущей статье осталась нераскрыта тема Яндекс.Каталога: повлияло ли наличие сайта в нем на изменение ТИЦ при декабрьском пересчете.

Пришлось написать отдельный текст на эту тему, наслаждайтесь

Яндекс.Цитирования сайтов рунета

Наваял очередную нетленку Яндекс.Цитирования сайтов рунета в 4-м квартале 2006 г - обзор изменений ТИЦ с октября по январь по ~200 тысячам сайтов. Основные выводы:
  • ТИЦ серьезно упал, примерно на четверть (если брать средние значения)
  • В наибольшей степени это коснулось сайтов с относительно высокими ТИЦ, если ТИЦ был более 100, то с вероятностью 85% он упал
  • Письма из поддержки Яндекса "тиц упал у некоторых сайтов" - это явное преуменьшение размеров проблемы
наслаждайтесь чтением

О перемножении матриц и прочих архитектурных заморочках

Осваиваю тут новую NUMA-архитектуру (пока не скажу какую, хотя многие уже в курсе). Хочется ее адекватно сравнивать с возможностями PC-CPU, т.е. опять гонять тесты. Начал с умножения матриц только на CPU.

Если оставить в стороне продвинутые алгоритмы Штрассена и Копперсмита с Виноградом, ограничившись классическим подходом с умножением "строка на столбец", то умножение матриц вполне прямолинейно: C(i,j) += A(i,k)+B(k,j) С другой стороны, входные матрицы могут быть транспонированы (одна или обе). При этом меняется pattern доступа к памяти, за счет чего ожидается некоторая разница в производительности.

Рассматривая результаты Linpack, я ожидал получить разницу между «плохим» и «хорошим» паттерном в разы. Результат превзошел все ожидания, получилась разница на полтора порядка.

Кросспост из MT в LJ

Продолжаем патчить MovableType.

Многим, вероятно, удобнее читать мои упражнения через френдленту ЖЖ. Следовательно, нужен кросспост туда. Коллективный разум предлагает два решения:

  • ljcrosspost — сделан неудобно, предполагает публикацию через выполнение тега, что означает перепубликацию при любой перевыкатке отдельных статей. Не понравилось.
  • MTLJpost сделан более человечно, публикация происходит при нажатии кнопки Save в редакторе т.е. вместе с trackback pings, нотификациями блог-поисков и еще один RPC call погоды не сделает.
Берем и ставим второй. Выясняется:
  1. Машинка глючит, если нет картинки (юзерпика), соответствующего категории. Но править это соответствие после каждого редактирования категорий - мучительно.
  2. Не хватает пары мелочей:
    • постинга тегов в ЖЖ
    • запрещения комментариев (с комментариями хочется всех загнать к себе)
Впрочем, пять минут работы напильником и готов очередной патч. Этот патч:
  1. Передает в ЖЖ теги
  2. Чуть лучше разбирается с ситуацией, когда не найден юзерпик
  3. запрещает комментарии.
Если запрещение комментирования не нужно, то из патча нужно удалить строчку
+   $lj->Setprop_nocomments($event,1);
upd: после ряда экспериментов, я матчинг юзерпика и категории вообще убрал нафиг. Странное оно и дикое

Темплейты MovableType

Меняя, в очередной раз, много темплейтов MT, задумался об более человечной их структуре.

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

На мой вкус, человеческая темплейтная система должна строиться от других принципов:

  • Нужны layout-темплейты. Т.е. задание структуры (количество колонок, их состав и пр.) и общих по всему блогу элементов (header, footer, навигация) в одном месте. Конечно, в сложных случаях layout-ов будет много, но почти гарантированно один layout распространяется больше чем на одну страницу. Редактировать одно и то же в нескольких местах - глупо.
  • Нужны блоковые темплейты. Очевидный пример блока - это представление первых строк записи в индексах. Оно повторяется во всех архивах, в результатах поиска и так далее. Редактировать такую кучу мест - не менее глупо, чем править заголовки по всему блогу

Русификация MovableType

Русификация MovableType состоит из таких шагов
  1. Русификация дат
  2. Русификация имен файлов для dirify
  3. Перевод темплейтов и системных сообщений
Первые два пункта требуют правок кода, каковые правки и были сделаны. Все действия производились над MovableType 3.33

UTF-8 и только он

Мы живем в 21-м веке, когда передача лишних байтов через всю планету не стоит вообще ничего. Работа с многобайтовыми кодировками сейчас поддержана везде, на очень старые версии браузеров закладываться смысла нет (примечание от меня, как от автора Russian...

MovableType - сосет

Попытка разобраться с MovableType оставила двойственное впечатление:
  • Штука, несомненно, очень хорошая, вложена масса труда
  • Но при этом, сосет не нагибаясь
и ведь чем ближе рассматриваешь, тем больше хочется ругаться. Ужос просто!

Сначала о хорошем:

  • Штука - работает.
  • Поддерживается UTF-8, причем без глупостей. PostgreSQL-ю UTF8 ставят насильно, за что авторам MT большое спасибо - у меня в силу исторических причин default client encoding другая (скажем, багзиллу пришлось недавно дохакивать в этом месте).
  • Можно поставить и сразу начать
  • ...

Растет, голубчик

За три месяца количество живых сайтов в домене .RU увеличилось на 12 процентов: 24 сентября их было 477 тысяч, 22 декабря - 535 тысяч.

Двенадцать процентов квартальных - это почти 60% годовых (а с марта по сентябрь росло так же).

А если просто посчитать в дЕньгах за базовые услуги, двадцатка в год за домен и десятка в месяц за хостинг, то этот рынок прирос за квартал на 8 миллионов. Это без третьего уровня, com, info и так далее.

Postgresql 8.2, UTF8 и русские буквы

В отличие от PostgreSQL 8.1.x, табличка преобразования UTF8<—>CP1251 уже нормальная, € там имеется.

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

Трудности перевода

На сайте СУПа весь октябрь висел замечательный контакт для потенциальных сотрудников
    ... E-mail... ...телефон... Алексей Ишков Director of Execution

Потом одумались и перевели:

    ...... Алексей Ишков Директор по производству

Postgresql 8.1.x и UTF-8

В PostgreSQL начиная с версии 8.1.4 ужесточили правила конверсии из UTF-8 в однобайтовые кодировки. Если раньше при неконвертируемом символе было предупреждение, которое попадало в лог (или в приложение, если оно читало Warnings) и все работало, то сейчас неправильный символ приводит к ошибке и запрос не выполняется.

Тут же выяснилось, что у этих криворуких уродов таблица преобразования из/в windows-1251 неверная, там пропущен символ €. Пришлось, как водится, править.

патч для таблиц перекодировки UTF8<->CP1251 PostgreSQL 8.1.4 и 8.1.5

Заметим, что введение такой безусловной функциональности в minor-версии &mdash это моветон. Разработчики нам обещают, что в пределах minor-а все будет работать без backup/restore базы, а это нифига не так, приложения просто перестали работать совсем. Впрочем, багу с конверсией посчитали vulnerability, что вполне верно если перекодировке подвергается пользовательский ввод. Но не во всех приложениях это впрямую пользовательский ввод, более того у нас правильность символов контролируется на этапе ввода, а значит нам такая неотключаемая проверка нафиг не нужна.

Пришлось делать патч, который ее относительно safe выключает: все неизвестные символы при преобразовании UTF8->однобайтная кодировка меняются на пробел. Вот этот патч: качать. Естественно, этот патч можно рекомендовать только тем, кто понимает что делает.

Pages

Subscribe to blog.lexa.ru: все статьи