Как стать автором
Обновить
17
0.5

Пользователь

Отправить сообщение

Стероидный велосипед: векторная алгебра, на ассемблере, в Delphi

Время на прочтение30 мин
Количество просмотров7.1K

Некоторое время назад понадобилось мне в одной Delphi-шной программе много посчитать, но расчеты шли как-то подозрительно долго. Переписывать около 100 kLOC не хотелось- особенно из-за наличия большого количества форм, но предыдущий мой опыт показывал, что если код расчетов перекомпилировать в Lazarus'е (с FPC3.0.4)- то скорость счета возрастает до 2-х раз, и поэтому было очевидно, что конкретно в данном случае компилятор Embarcadero (разных версий) сильно несилен, и надо его менять. С другой стороны, IDE от Embarcadero для рисования GUI- вне конкуренции, а их компилятор на редкость быстрый (оно и понятно- быстро+плохо, или медленно+хорошо). Но ведь вкус кактуса неимоверно притягателен. Профайлинг подручными средствами (tinyprofiler) во всех случаях показывал, что основное время (90%) занимают операции векторной алгебры над большими массивами чисел, а быстрый тест производительности этих процедур показал, что на операциях с этой алгеброй общая "пропускная способность" имевшегося математического ядра составляет для операций типа умножения векторов и скалярных произведений- ~4 ГБ/с, для умножения вектора на матрицу- 1,5-2 ГБ/с, а вот для операций обращения матрицы- проседает до 360 МБ/с (на Core I5 4460 и на Xeon 2660V2, DDR3-1866). Внутре рядом с неонкой используются только 3-х и 4-х мерные вектора и матрицы. В голову пришла мысль, что 4х4 матрица- должна целиком влезать в SSE-регистры процессора и для нее SIMD- очень желательны, а в компилятор Delphi SIMD не завезли, кажется не завезут, и вообще- дальше нижней половины XMM0 не используют. В итоге нарисовалась очень простая задача- реализовать быструю векторную алгебру в минимальном объеме для 3D/4D векторов своими руками- то есть, соорудить стероидный велосипед, о котором в заголовке написано.

И вот здесь мой навык гуглинга дал сбой- мне предлагали купить проприетарные библиотеки, в которых все уже есть, или примеры векторных операций с FP32 на SSE, но нужного FP64 - нету! Под катом- как на SSE руками сделать операцию с вектором для расчетов какой-нибудь физики и вывернуть матрицу наизнанку.

Поиграемся с XMM-регистрами?...
Всего голосов 26: ↑25 и ↓1+24
Комментарии44

Еще одно объяснение эффекта Мпембы (это про почему кипяток замерзает быстрее холодной воды)

Время на прочтение6 мин
Количество просмотров67K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Why Hot Water Freezes Faster Than Cold—Physicists Solve the Mpemba Effect".


От переводчика: всю жизнь мучился вопросом, а тут на тебе- опять объяснили.


image


Краткое содержание: из-за наличия водородных связей в молекулах воды происходит изменение конфигурации ковалентных связей О-Н, с запасанием в них дополнительной энергии, выделяющейся при охлаждении и работающей как дополнительный подогрев, мешающий замерзанию. В горячей воде водородные связи растянуты, ковалентные не напряжены, запас энергии мал- остывание и замерзание идет быстрее. Существует некоторое характерное время tau, необходимое на формирование водородных связей, если процесс охлаждения будет идти медленно- то эффект Мпембы исчезнет. Если процесс охлаждения идет относительно быстро (до десятков минут)- то эффект выражен. Вероятно, должна быть и какая-то критическая температура, начиная с которой эффект появляется, но в статье это не отражено.

Дальше- подробнее...
Всего голосов 58: ↑54 и ↓4+50
Комментарии77

Информация

В рейтинге
1 550-й
Зарегистрирован
Активность