Флаги Perl Inline :: C по умолчанию - PullRequest
6 голосов
/ 24 октября 2019

Я создал модуль, используя Inline :: C, и заметил некоторые неожиданные расхождения в производительности между его запуском на хосте MacOS и гостевой виртуальной машиной Linux. Рассматривая это, это произошло из-за того, что флаги компилятора C по умолчанию были другими. В MacOS они выглядят следующим образом:

-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -O3   -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"

против Centos 7:

 -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2 -O2   -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"

Основное различие для моего кода - O3 против O2, поэтому я изучил встроенные документы и использовал:

use Inline (C => Config => ccflags => '-O3');

Чтобы явно указать -O3. В результате получается, что -O3 -O2 применяется таким образом, поэтому указание ccflags не перезаписывает значения по умолчанию, а просто добавляет перед их, что, в конце концов, не имеет никакого эффекта. Любая идея, откуда взято значение по умолчанию и / или как его перезаписать, чтобы указать желаемый уровень оптимизации.

1 Ответ

6 голосов
/ 24 октября 2019

Похоже, что добавление опции конфигурации optimize может сделать то, что вы хотите. Вот очень короткий пример с выводом до добавления optimize => '-O3' и после:

use warnings;
use strict;

use Inline 'C';

use Inline C => 'Config',
    build_noisy => 1,
    force_build => 1,
    optimize => '-O3',
;

print add(5, 6);

__END__
__C__

int add (int x, int y){
    return(x + y);
}

Вот вывод (для краткости):

До:

cc -c -I"/home/steve/scratch/inline" -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2

После:

cc -c -I"/home/steve/scratch/inline" -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O3

... в Linux Mint 18.3.

Значение по умолчанию исходит от $Config{optimize}, который хранится в качестве значения по умолчанию только для чтения во время компиляции / сборки perl в системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...