Я пишу расширение Ruby C, которое вычисляет «мягкий выбор» набора вершин. Во многих итерациях вычисляется расстояние между 3d-точками.
Изначально я использовал Pelles C IDE - на основе найденного мной шаблона.
Затем я сделал обновление, в котором переключился на использование nmake
, поставляемое с Visual Studio C ++ Express 2010. Я обнаружил снижение производительности, что было странно, потому что в любом случае это должно было быть быстрее.
Затем я вернулся к исходному коду, который я написал в Pelles C, скомпилировал его с nmake
и обнаружил, что точно такой же код медленнее.
Pelles C
> Updating soft selection took 0.741 seconds (12176 of 21692 Vertices)
> Updating soft selection took 0.751 seconds (10911 of 21692 Vertices)
> Updating soft selection took 0.859 seconds (10765 of 21692 Vertices)
> Updating soft selection took 0.753 seconds (10653 of 21692 Vertices)
> Updating soft selection took 0.75 seconds (10747 of 21692 Vertices)
> Updating soft selection took 0.751 seconds (10822 of 21692 Vertices)
Visual Studio
> Updating soft selection took 1.282 seconds (11853 of 21692 Vertices)
> Updating soft selection took 1.273 seconds (12204 of 21692 Vertices)
> Updating soft selection took 1.286 seconds (11720 of 21692 Vertices)
> Updating soft selection took 1.248 seconds (12996 of 21692 Vertices)
> Updating soft selection took 1.293 seconds (10705 of 21692 Vertices)
> Updating soft selection took 1.276 seconds (12204 of 21692 Vertices)
Я очень неопытен в C и компиляции - но я предполагаю, что разница в производительности связана с различиями между компилятором и инструкциями по компиляции?
Для версии nmake
я использовал Makefile, созданный extconf.rb
- для версии Pelles C я использовал любую настройку для примера проекта, который нашел.
Прав ли я в том, что здесь важны CFLAGS
?
CFLAGS
Для проекта Pelles C это:
CCFLAGS = -Tx86-coff -MD -Ot -Ox -W1 -Gd -Ze -Zl#
Для проекта nmake
это:
CFLAGS = -MD -Zi -O2b2xg- -G6
Когда я смотрел CFLAGS
и производительность, он обычно упоминал флаги O
, O2
и O3
- теперь я вижу O2
в nmake
Makefile, но с нечетным набором трейлинга символы.
Проект Pelles C имеет Ot
и Ox
...?
Я не смог понять значение этого. Расширение будет скомпилировано под Windows и OSX (PPC и Intel). Какую конфигурацию компилятора я могу сделать, чтобы получить максимальную производительность от него? По крайней мере, восстановить производительность, которую я имел.
Конфигурация Makefile и Pelles C
Вот Pastie из nmake
Makefile: http://pastie.org/3543595
Вот файл проекта Pastie of the Pelles C: http://pastie.org/3543597