Пушыстый (_winnie) wrote,
Пушыстый
_winnie

memory latency

Сегодня столкнулся с тем, что прочитать один байт по смещению, взятому из хеш-функции - это 100 тактов процессора, и ничего тут не сделаешь (ну кроме как завести сотню компьютеров). У меня генерируется 16-байтовый murmur-хеш, и он используется для чтения 4-х байтов из 4-х рандомных точек полугигабайта. Эти чтения происходят дольше, чем подсчет хеша, и все остальное в программе ( разбиение строки на подстроки по границам utf-8 символов, чтение std::string из файла и тп).

Профайлер VS2012 - приятный, разобрался за пять минут. Плохо, что он не показывает hot-spot на уровне асм-команд - показал в release режиме на строчку «b = (b & ~(0xf << ofs)) + (val << ofs);», и я её полчаса оптимизировал. Хотя на самом деле тормоза были именно в movzx при чтении байта.


скриншот профайлера:
код реализует MinCount Sketch с 4-битовыми счетчиками.

Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 15 comments