Примеры оптимизации реальных задач

Bug119391: qt4 sse

В примере есть горячая функция comp_func_solid_SourceOver_sse2. Компилятор плотно упаковал цикл, но есть возможности оптимизации если использовать __builtin_prefetch(&dst[x+12]), либо попробовать реализовать на eml. Для этого сначала нужно выделить пример.

  • qt4-4.8.7/src/gui/painting/qdrawingprimitive_sse2_p.h

  • qt4-4.8.7/src/gui/painting/qdrawhelper_sse2.cpp

Также в рамках этого примера поднялся вопрос о задании опций оптимизации (типа -ffast) через прагму.

http://bugzilla.lab.sun.mcst.ru/bugzilla-mcst/show_bug.cgi?id=119391

Bug94344: crc32c

В баге обсуждается реализация slice и ускорение подсчета контрольных сумм. Быстрая реализация crc32 в виде патчей включена для ceph-10.2.9 и mongodb-3.6.13 - wiredtiger соответственно:

  • 0014-Patch-from-ceph-10.2.1-crc32-from-troosh-for-e2k-bug.patch

  • 0002-wiredtiger_e2k_crc32.patch

http://bugzilla.lab.sun.mcst.ru/bugzilla-mcst/show_bug.cgi?id=94344

Bug119602: Adler32

Это функция для подсчёта довольно популярной контрольной суммы: https://ru.wikipedia.org/wiki/Adler-32

Для реализаций этого алгоритма можно с помощью прагмы подсказать компилятору, что в цикле много итераций:

#pragma loop count(1000)
for (i = 0; i < len; ++i) {

В этом случае к циклу применяется u2s и apb, и время работы теста на E2S уменьшается в 1.45 раз по сравнению с rel-23-0.

http://bugzilla.lab.sun.mcst.ru/bugzilla-mcst/show_bug.cgi?id=119602 http://bugzilla.lab.sun.mcst.ru/bugzilla-mcst/show_bug.cgi?id=121440