GithubHelp home page GithubHelp logo

ht's Introduction

HT

О работе

В данном проекте я реализовал хэш-таблицу закрытого типа и оптимизоировал её с помощью ассемблерных вставок/интринсиков/ассемблерных функций

Этапы работы

Первая часть

Написав хэш-таблицу, я измерил время, используемое каждой из функций с помощью callgrind.

Получились следующие результаты:

Результаты callgrind без оптимизаций

Т.к. мы всё-таки делаем ХЭШ-функцию, в первую очередь я решил оптимизировать хэш.

Я знал длину каждого слова, поэтому была придумана оптимизация с названием "Жадный crc", в ней я по максимуму хэшурую слово частями по 8 байт, а после добираю остаток.

Вторая часть

После первой оптимизации я был удивлён тем, что общее время работы программы не изменилось, поэтому я снова решил обратиться к callgrind

И что же я получил:

Результаты callgrind после оптимиизации "жадный ctc"

Несложно понять, что, оказывается, узким местом моей программы являлась фунция main.

Что ж... Проанализировав код данной функции, я понял, что я трачу слишком много времени, сканируя из буффера по 1 байту, поэтому я решил сканировать сразу по 32 байта с помощью avx2 инструций!!!

А после с помощью битовой магии я начал доставать по 1 слову из буфера, то есть вместо 1 символа за итерацию for'а я обрабатываю по целому слову.

Третья часть

Результаты callgrind после ускорения функции main

Судя по этим замечательным результатам, оптимизация фунции main прошла успешно, время выполнения программы уменьшилось в полтора раза, но из-за битовых операций нам потребовалось брать двоичный логарифм числа, который я брал с помощью for'ика, перебирая биты от 0 до 31.

Но моя реализация слишком много времени, поэтому я начал искать соответствующую инструцию процессора, и я её нашёл - это bsr!

Четвёртая часть, заключительная

После всех этих оптимизаций я очень хотел поскорее узнать результат. И инструкция bsr сработала великолепно! Время выполнения программы относительно первой реализации уменьшилось в 2.5 раза!

Результат после финальной оптимизации

Как мы видим, узким местом программы снова стал хэш, но дальнейшая оптимизация не так и нужна...

Тестирование хэш-функций

Также хочется показать вам результаты тестирования нескольких хэш-функций, по оси X вы можете наблюдать индекс хэша в хэш-таблице, а по оси Y - количество коллизий.

Тестируемые функции

H1: Всегда возвращаем 1 H2: Возвращаем код первого ascii символа слова H3: Возвразаем длину слова H4: Возвращаем сумму ascii кодов слова H5: H_0 = s[0]; H_i = rol(H_{i-1}) + s[i] H6: crc32

Результаты

H1 H2 H3 H4 H5 H6

ht's People

Contributors

dainbow avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.