генерация кода - глобальные переменные

Тема в разделе "WASM.ASSEMBLER", создана пользователем k_dmitry, 6 авг 2008.

  1. k_dmitry

    k_dmitry New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    9
    я на лету пишу в бинарный код и потом его запускаю.мне надо было сделать что-то типа глобальных переменных - я сделал для них место в конце кода и потом туда обращался по указателю, проблема в том что если их сразу разместить после самого кода то при записи в них падает производительность(при чтении все хорошо), а если их сместить на определенное число байт(я подобрал) то начинает все работать. в чем может быть проблема? и как вообще надо правильно размещать их? надо ли их выравнивать?
     
  2. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Выравнивать лучше по 4х байтовой границе, сегменты кода и данных лучше разделить, причину не помню
     
  3. k_dmitry

    k_dmitry New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    9
    по 4 байтовой не помогает, помогло по 64 байта, непонятно только почему. а как разделять сегменты? что надо загружать DS и все подобное своими значениями? а что будет с той программой которая вызвала мою ф-ию после того как я сегменты поменяю?
     
  4. k_dmitry

    k_dmitry New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    9
    вроде выяснил откуда 64 байта - это типа размер cache line в кэше процессора
     
  5. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    чтоб текущая линейка кэша кода и текущая линейка кэша данных не пересекались. Точнее писать можно, но придется все хорошо проверить, чтоб не глючило. А так.. почему не писать если права позволяют.
     
  6. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Ничего не надо загружать же! В данном контексте сегмент == PE-секция. А как правильно размещать - leo может дать хороший ответ ;)
     
  7. k_dmitry

    k_dmitry New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    9
    разделение кода и данных в разные куски размером таким же как размер cache line помогло. а почему не возникает проблем при чтении?
     
  8. AkKort

    AkKort New Member

    Публикаций:
    0
    Регистрация:
    22 янв 2008
    Сообщения:
    15
    запись идет в районе исполняемого кода - процессор сбрасывает конвейер команд, а это дохрена тактов.
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Разнос кода и данных на размер кэш линейки рулит только в P6 (т.к. декодирование команд производится на лету из текущей линейки) и возможно в Атлонах, а вот в P4 осуществляется преддекодирование команд с сохранением мопов в Т-кэше, поэтому дистанция разноса существенно больше. В P4 не должно быть записи в секцию кода в границах текущего килобайта адресов исполняемого кода, иначе будут тормоза. Для атлонов по официальным данным также как м в P6 нельзя писать в текущую линейку кэша. Однако в атлонах юзается преддекодирование команд с сохранением в кэше команд разметки длин инструкций, поэтому есть подозрение, что реальная "защитная" дистанция может быть больше (сам не проверял, но помнится кто-то тут приводил данные, что на атлоне тормоза наблюдаются при модификации кода на расстояниях значительно больших 64 байт)

    PS: А вот нашел тему, где Ustus над атлонами "издевался" ;)
    PPS: Мда, а поиска по всем разделам, значит так и нет...
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Он не только конвеер сбрасывает, а еще и синхронизирует кэши данных и команд через L2 (или еще хуже через ОЗУ ?). А на P4 к тому же происходит сброс всего T-кэша и проц начинает работать в режиме декодирования команд, что по кр.мере раза в 2-3 медленнее, чем при работе с T-кэшем.
     
  11. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    leo Ну вот откудова ты стока знаешь ? ;)))