Июн 08 2012

Обновление модуля RSA-шифрования в нашем фреймфорке

Модуль RSA-шифрования нашей библиотеки CFW (CatFrameWork) был разработан более 2-х лет назад и с тех пор не использовался. Мне достоверно неизвестно когда в него закралась ошибка (тогда еще в библиотеку не ввели юнит тесты с их обязательной проверкой перед каждым комитом в SVN) однако генерацию ключей не работала и падала с исключением непонятной природы.Сейчас же, при работе над системой обновления мне потребовалось генерировать RSA-ключи и пришлось заняться поиском ошибки.

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

Смотреть на свой старый код не было никаких сил и всё кончилось тем, что я переписал всё с 0 за 42 часа. Внедрение указанных алгоритмов ускорило библиотеку на 50% и профилирование asm-кода еще на 10%. Итого 60% прироста. Теперь наша реализация быстрее OpenSSL примерно на 10-15%, что не может не радовать (т.к. старался я не зря).

Июн 06 2012

Алгоритм деления больших чисел

В процессе обновления своей библиотеки для RSA-шифрования столкнулся с ошибкой в распространённом алгоритме деления больших чисел. Причём эта ошибка была обнаружена мной совершенно случайно, ибо возникает она лишь в очень редких случаях и нигде не упоминается.

Подробнее »

Июн 06 2012

World IPv6 Launch

В рамках поддержки мероприятия все сервисы серверов нашей команды теперь доступны и через IPv6.

Май 14 2012

Удалённая отладка в Lazarus (часть 2)

Недавно я писал об удалённой отладке в Lazarus и необходимости модификации кода Lazarus для этого. Хотя предложенные мной исправления и небыли приняты в первоначальном виде, однако в процессе дискуссии удалось найти решения данной проблемы и начиная с Lazarus r37130 удалённая отладка через SSH работает без необходимости модифицировать Lazarus.

Подробнее »

Апр 22 2012

Удалённая отладка в Lazarus

Предисловие

Уже давно назрела необходимость в удалённой отладке серверных приложений. Задача собственно сводится к тому, что разработку ведём на Windows машине, а пишем для Linux-сервера.

Подробнее »

Янв 24 2012

Реализация интерконнекта на чипе SeaStar

Наконец в мои руки попал технический документ с описанием данного чипа. И хотя чип уже весьма старый (2006 год), но все же данный документ позволяет очень детально разобраться в механике работы данного интерконнекта. Общие впечатление от ознакомления с архитектурой крайне положительное, учтено очень много чего. Сразу видно, что проектировали всё это дело профессионалы своего дела.

Ознакомление с этим документом подтолкнуло меня к началу работы над статьёй по высокопроизводительным вычислениям (HPC). Давно уже хотел начать её написать, да всё как-то было не досуг.

Дек 16 2011

Векторизация, векторизация и еще раз… о пользе новых инструкций

Сегодня проводил переработку старой версии “сохранялки скриншотов”. Задача в общем-то простая: есть картинка в формата DXGI_FORMAT_R10G10B10A2_UNORM, нужно сохранить её в *.bmp файл. Естественно по мимо того, что строки в bmp идут снизу вверх, он знать не хочет не про какой формат DXGI_FORMAT_R10G10B10A2_UNORM и его требуется конвертировать в B8G8R8 (да-да, 3 байта на пиксель ещё и задом на перёд).

Подробнее »

Дек 11 2011

Начата разработка нашего первого проекта

Сегодня было принято окончательное решение о начале разработки нашего первого проекта – 3D-бенчмарка.

Ноя 11 2011

Небо

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

Старый скрин неба

Окт 30 2011

Lock-free hash-table (с открытой адресацией)

Взялся сегодня адаптировать старую реализацию сабжа под новые требования кэша ресурсов движка (теперь требуются таблицы не только статического, но и динамического размера). Беглый осмотр кода сразу выявил наличие явно отвратительных мест в виде лишних вызовов interlocked-функций в некоторых сценариях. Посмотрев на сравнительно небольшой размер функций решил переписать всё на asm. Результат не может не радовать: код лаконичен, понятен и быстр (даже кол-во push/pop сведено к минимуму). Результаты тестирования показали превосходство новой реализации в 1.5 – 2 раза.

Еще раз убедился, что знание ассемблера обязательно каждому программисту. Даже если на нём и не пишешь, то без него нельзя разобраться в том, что нагенерировал компилятор (а там иногда такой ужас бывает, да и некоторые ошибки легче ловить в asm-е, нежели в коде высокого уровня).

 

Предыдущие сообщения «

» Более новые сообщения