безопасные, быстрые CFLAGS для mex-функций в matlab - PullRequest
3 голосов
/ 16 декабря 2009

Я преобразую ряд низкоуровневых операций из собственного кода matlab в код C / mex с большим ускорением. (Эти низкоуровневые операции могут быть выполнены векторизовано в коде .m, но я думаю, что я получаю хиты памяти b / c больших данных. Что угодно.) Я заметил, что компиляция mex-кода с различными CFLAGS может привести к незначительным улучшениям. Например, CFLAGS = -O3 -ffast-math действительно дает некоторые ускорения за счет легкой числовой неточности.

Мой вопрос: какие "лучшие" CFLAGS использовать, не вызывая слишком много других побочных эффектов? Кажется, что, по крайней мере, CFLAGS = -O3 -fno-math-errno -fno-unsafe-math-optimizations -fno-trapping-math -fno-signaling-nans все в порядке. Я не уверен насчет -funroll-loops.

также, как бы вы оптимизировали набор используемых CFLAGS, полуавтоматически, не сходя с ума?

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Все, что ATLAS использует на вашем компьютере (http://math -atlas.sourceforge.net / ), вероятно, является хорошей отправной точкой. Я не знаю, что ATLAS автоматически оптимизирует определенные флаги компилятора, но разработчики, вероятно, потратили немало времени, делая это вручную.

1 голос
/ 16 декабря 2009

Если вы знаете целевой ЦП ... или, по крайней мере, хотите гарантировать "минимальный" ЦП ... вам определенно следует рассмотреть -mcpu и -march.

Увеличение производительности может быть значительным.

...