Странности с профайлером gprof по времени выполнения

Тема в разделе "WASM.UNIX", создана пользователем yaku_toi, 22 фев 2011.

  1. yaku_toi

    yaku_toi New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2011
    Сообщения:
    6
    Доброго времени суток.
    Ситуация такова что есть такой makefile в котором поставлен ключ для профайлера.
    Код (Text):
    1. CFLAGS = -pg -D_FILE_OFFSET_BITS=64 -O2
    2.  
    3. CC = gcc
    4. LIBS =
    5. INCLUDES =
    6. OBJS = faith.o
    7. SRCS = faith.c
    8. HDRS =  
    9.  
    10.  
    11. all: faith clean
    12.  
    13. faith: faith.o
    14.     ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
    15.  
    16. clean:
    17.     rm *.o
    и есть "чистый" makefile без него
    Код (Text):
    1. CFLAGS = -D_FILE_OFFSET_BITS=64 -O2
    2.  
    3. CC = gcc
    4. LIBS =
    5. INCLUDES =
    6. OBJS = faith.o
    7. SRCS = faith.c
    8. HDRS =  
    9.  
    10.  
    11. all: faith clean
    12.  
    13. faith: faith.o
    14.     ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}
    15.  
    16. clean:
    17.     rm *.o
    При компиляции и выполнении с профайлером время выполнения 220 секунд (измеритель time), а без него (с "чистым" makefile) 340 секунд. По идее должно быть наоборот.
    Можете объяснить что за странности и что сделать чтобы без него было хотя бы близко к 220? Разница столь велика что выгоднее оставить профайлер, но как-то стремно в релиз с ним идти.

    Заранее спасибо.
     
  2. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    yaku_toi
    а в бинарник залезть посмотреть?..
    мне просто аж любопытно стало, что там за код такой. Оо
     
  3. yaku_toi

    yaku_toi New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2011
    Сообщения:
    6
    Спасибо за наводку. Посмотрел objdump. Vimdiff показывает дохрена различий.
    Очень напрягло что при чистой компиляции в критических частях программы есть много nop'ов, а при профайлере их там нет. 0_о

    Если уж очень любопытно то
    https://github.com/yaku/faith (ветка develop)

    Код еще очень сырой, так что похвастать нечем.

    P.S: сейчас протестировал. "чистый" 353. С профайлером 184 0о
     
  4. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Сорри, может кто знает профайлер, который способен работать на чужих бинарниках? Просто мне надо узнать где прога проводит большее количество времени, чтобы вычленить нужную мне процедуру.
     
  5. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    yaku_toi
    Попробуй указать целевую субархитектуру. Добавь к флагам компилятора опцию -mtune=... которая соответствует твоему процессору.
     
  6. yaku_toi

    yaku_toi New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2011
    Сообщения:
    6
    Спасибо. Это помогло немного увеличить скорость.
    Но главная проблема была в другом. Как оказалось профайлер _деструктивно_ _изменял_ внутреннюю работу программы что и приводило к уменьшению времени выполнения. Там где нужны были случайные числа программа просто записывала нули.
    Возможно это связано с какими-то внутренними недоработками, но врятли т.к без профайлера все работает прекрасно.
    Так что используйте -pg на свой страх и риск.