LINUX.ORG.RU

Оптимизация майнера на основе AES

 ,


0

1

Коллеги подскажите по этим флагам , на сколько они эффективны и правильны на данных современных и поколение назад(есть поддержка аппаратная AES-NI ) интеловских процах [может за место их юзать сразу -O2 или -O3 {хотя часть флагов там есть наверное} ]?

gcc -std=gnu99 -DHAVE_CONFIG_H -I.  -pthread -I./compat/jansson   -falign-loops=16 -falign-functions=16 -falign-jumps=16 -falign-labels=16  -Ofast -flto -fuse-linker-plug$
n -funroll-loops -fvariable-expansion-in-unroller -ftree-loop-if-convert-stores -fmerge-all-constants -fbranch-target-load-optimize2 -fsched2-use-superblocks -maes -MT minerd-cpu-miner.o -MD -MP -MF .deps/minerd-cpu-miner.Tpo -c -o minerd-cpu-miner.o `test -f 'cpu-miner.c' 

И если прирост для них для gcc 4.5+ vs gcc 5.x?
И для gcc vs intel compiler

P.S компилю это если интересно https://github.com/wolf9466/cpuminer-multi

★★★★★

Без модификации кода разницы более 5% не жди.

16 16 16 16 16 16 16 16 16

что-то sэпичное^W эпическое, но если это придумал разработчик этой шняги, ему должно быть виднее.

anonymous
()

на сколько они эффективны и правильны на данных современных и поколение назад(есть поддержка аппаратная AES-NI ) интеловских процах

Я бы бил ногами за такое.
У автора на автомобиле небось здоровенный спойлер, наклеечки и труба жЫрная.

devl547 ★★★★★
()

А если не секрет, почему 4.5, когда ветка 4.9 во всём лучше, включая LTO? Если ты переживаешь, что оно теперь компилируется плюсовым компилятором, то зря. И почему берёшь 5, а не 6?

anonymous
()
Ответ на: комментарий от anonymous

Такой компилятор шел в 7 центосе, да думаю что то типа fedora или ubuntu будет содержать что то более новое

pinachet ★★★★★
() автор топика
Ответ на: комментарий от pinachet

Ясно. Ты, как пользователь, можешь попробовать более актуальный компилятор, а так же glibc и прочее. Ну и -O3 вместо -O2 (70% на то что будет хуже или что-то сломается, для числодробилки бывает ок), -ffast-math (ломает код), форсированные анроллинг и векторизацию обычно можно не трогать, может быть ещё лто потыкать. -Ofast только если очень хочешь уместиться в кэш процессора и он маленький. Наибольшего прироста производительности мне удавалось получить с PGO, но то же самое выходило если вручную сделать пару переменных регистровыми и тому же жирнолису PGO не особо помогает. Имей в виду, что -O3 в связке c lto зачастую продуцирует значительно более медленный код (может и исправили).

anonymous
()
Ответ на: комментарий от pinachet

PGO это -fprofile-correction, компиляция с -fprofile-generate, прогон тестов, сбор статистики узких мест, повторная компиляция с -fprofile-use, возможно есть ещё что-то, мной применялось в таком виде.

lto помоему так:

CFLAGS += -flto -fno-fat-lto-objects -fuse-linker-plugin -fuse-ld=gold
LFLAGS += -flto -fuse-linker-plugin
просадки при комбинации с O3 были у 4.9, lto вообще крайне нестабильная вещь и no-fat-lto-objects с кажется 4.9 идёт дефолтом, в связи с чем вероятно ломает код чаще.

graphite не плацебо, поскольку сильно меняет код, но профита на современных интелах замечено не было, может для других архитектур. Несколько безопасных (для 4.8, в 4.9 кажется сломалось) опций:

-floop-block -fgraphite-identity -floop-strip-mine -ftree-loop-linear -floop-interchange

Из совсем экстримального могу порекомендовать:

-floop-nest-optimize -ftree-loop-distribution -ftree-vectorize -ftree-loop-im -funswitch-loops -ftree-loop-ivcanon -fivopts -ftree-parallelize-loops=4 -ftracer -funroll-loops

Нужно учитывать, что многие оптимизации увеличивают требования по кэшу и как результат горячее место может не поместиться.

anonymous
()
Ответ на: комментарий от anonymous

-Ofast только если очень хочешь уместиться в кэш процессора и он маленький.

-Ofast наоборот раздувает код. Это же -O3 -ffast-math

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Ой. -Os конечно. Не знаю как так вышло.

anonymous
()
Ответ на: комментарий от anonymous

Вообще LDFLAGS=CFLAGS+LDFLAGS так-то, в генте например. Можно добавлять не стесняясь, флаги линкеру передавать например так: -Wl,-O1,--sort-common,--as-needed и -fuse-ld=gold наверно тоже отправлять линкеру отдельно надо если CFLAGS не включено.

anonymous
()
Ответ на: комментарий от pinachet

-falign-loops=16 -falign-functions=16 -falign-jumps=16 -falign-labels=16 -Ofast -flto -fuse-linker-plugin -funroll-loops -fvariable-expansion-in-unroller -ftree-loop-if-convert-stores -fmerge-all-constants -fbranch-target-load-optimize2 -fsched2-use-superblocks -maes

Вот эта художественная самодеятельность мне и не нравится.
Реально там достаточно -Ofast -maes или даже -O2 -maes и свежего GCC.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Оки я напишу автору , спасибо .

pinachet ★★★★★
() автор топика
Ответ на: комментарий от devl547

А еще такой вопрос -O2 и -O3 если добавить к верхним они другие собой подменяеют флаги или дополняют/убирают ?

pinachet ★★★★★
() автор топика

Все просто: начинаешь с дефолтов -O2 и -O3, тестишь рпоизводительность, дальше начинаешь тюнить и смотришь как влияет на скорость каждая опция по отдельности, например какой-то код выиграет от -ffast-math, какой-то от -funroll-loops, какой-то от align'ов, ну ты понял. C -finline-limit можешь поиграть еще

annulen ★★★★★
()
Ответ на: комментарий от pinachet

А еще такой вопрос -O2 и -O3 если добавить к верхним они другие собой подменяеют флаги или дополняют/убирают ?

Они предоставляют дефолтный набор флагов, их можно распечатать. Дальше ты дополнительными флагами можешь тюнить эти настройки, если это необходимо. От балды накидывать все флаги подряд нет никакого смысла

annulen ★★★★★
()
Ответ на: комментарий от annulen

Оки понятно, я потыкал как бы разница от 0 до 5 % походу придеться тыкать интеловский компилятор (

pinachet ★★★★★
() автор топика

-march=native + (-O3 или -Ofast), остальное натыкано наобум и подстраивается под конкретную программу и проц.

anonymous
()
Ответ на: комментарий от devl547

Естественно надо гонять бенчмарк на целевой системе, а как иначе

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.