Производительность linux .so снижена по сравнению с исполняемым файлом прямого компилирования

Я столкнулся с проблемой, которая озадачивала меня долгое время. Интересно, кто-нибудь мог бы пролить свет на этот вопрос?

Я пишу перевернутый индекс для поддержки поиска текста. Я реализовал 2 способа поддержки пользовательских запросов, но производительность сильно отличается.

Первый способ:
скомпилируйте инвертированный индекс с дополнительным тестовым файлом, который содержит основную функцию, поддерживающую пользовательский запрос.

файл: InvertedIndex.cpp UserQuery.cpp

компиляции:

     g++ -g -Wall -O3 -fPIC -o textSearch1 InvertedIndex.cpp UserQuery.cpp -I ... -L ...

Второй способ:
скомпилировать инвертированный индекс как динамическую разделяемую библиотеку, тестовый файл содержит основную функцию, связанную с динамической разделяемой библиотекой.

файл: InvertedIndex.cpp UserQuery.cpp

компиляции:

     g++ -shared -fPIC -o libInveredIndex.so InvertedIndex.cpp -I ... -L ...
g++ -Wall -O3 -fPIC -o textSearch2 UserQuery.cpp -I ... -L ... -l InveredIndex

Я тестирую и textSearch1, и textSearch2 в предварительно построенном инвертированном индексном файле, и время запроса сильно отличается. Файл инвертированного индекса был загружен mmap.

Для того же запроса (более 2 ключевых слов) время, которое стоит textSearch2, вдвое больше времени, которое стоит textSearch1.

Я проверил много запросов с более чем 2 ключевыми словами, но явление повторяется.

Я не мог понять, почему. Я много искал и ничего не нашел.

Пожалуйста, помогите мне, если у вас есть идеи.

Большое спасибо.

0

Решение

В строке компиляции общей совместно используемой библиотеки вы не указываете -O3 переключатель оптимизации, который, вероятно, сделает вашу библиотеку менее эффективной.

В любом случае, компиляция библиотеки по отдельности и последующее связывание могут быть медленными в любом случае. Компилятор не может оптимизировать так агрессивно, как если бы он компилировал все как единое целое (например, он не мог бы встроить функции — такие как функции вызова библиотеки — что было бы иначе)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]