Примеры оптимизации реальных задач¶
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