Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос

bakdurak

  • 0
    вклад
  • 28
    вопросов
  • 2
    ответа
  • 50%
    решений
Комментарии
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • IntelliJ IDEA(или любая IDE Jetbrains) - можно ли как-то скрыть assert'ы?

    bakdurak @Lite_stream Автор вопроса
    Благодарю за ответ :)
    Написано 11 апр.
  • Есть ли уже существующая структура данных для данной задачи?

    bakdurak @Lite_stream Автор вопроса
    Благодарю за детальное объяснение
    Написано 29 мар.
  • Есть ли уже существующая структура данных для данной задачи?

    bakdurak @Lite_stream Автор вопроса
    Сергей Соколов, спасибо )
    Написано 28 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    res2001, а, ок, понял, чуть позже проверю
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    res2001, я там поправил, теперь результат переменной bit в логировании в консоль используется, поэтому не должен выкинуть
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    Wataru, ну, вообще да, во-первых ему, когда он с массивом имеет дело, нужно вычислять оффсеты для него, а во-вторых, в нём данных в 8 раз больше, чем в той переменной, следовательно вероятность вытеснения из кэша больше
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    res2001, да нет, не критичен, просто изначально интересно стало откуда такая разница ). А в итоге оказалось, что она составляет около 10%
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    Wataru, в общем прогнал каждый раз по 10-15
    uint8_t MASKS[] =
        {
            0b10000000, // 0
            0b01000000, // 1
            0b00100000, // 2
            0b00010000, // 3
            0b00001000, // 4
            0b00000100, // 5
            0b00000010, // 6
            0b00000001, // 7
        };
        uint8_t MASK = 0b10000000;
        int BYTE_COUNT = 60000000;
        int ROUND_COUNT = 10;
    
        uint8_t* bytes = new uint8_t [BYTE_COUNT];
        uint8_t bit = -1;
    
        double timeAccumulator = 0;
        for (int k = 0; k < ROUND_COUNT; ++k)
        {
            std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
    
            for (int i = 0; i < BYTE_COUNT; ++i)
            {
                uint8_t currentByte = bytes[i];
                for (int j = 0; j < 8; ++j)
                {
    //                bit = currentByte & MASKS[j]; // Elapsed time = 708.4 milliseconds. Bit value: ☺ (+- 6 millis)
    
                    bit = (currentByte << j) & MASK;  // Elapsed time = 763.5 milliseconds. Bit value: А (+- 6 millis)
                }
            }
    
            std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
    
            double timeMillis = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count();
            timeAccumulator += timeMillis;
        }
    
        std::cout
                << "Elapsed time = "
                << timeAccumulator / ROUND_COUNT
                << " milliseconds. Bit value: "
                << bit
                << std::endl;


    Всё же с предзаготовленными масками и без сдвига оплучается на 7-8% быстрее
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    Wataru, там внешний цикл ещё есть, среднее считает ))
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    В общем, переписал на С++, где нет этой проверки получилось
    bit = currentByte & MASKS[j]; // Elapsed time = 2362 milliseconds.
    bit = (currentByte << j) & MASK;  // Elapsed time = 2574 milliseconds.

    Всё же вариант с предзаготовленными масками на каждый случай, без сдвига, оказался на 10% быстрее :)
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    Ага, спасибо, нашёл
    https://en.wikipedia.org/wiki/Bounds-checking_elim...
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    Adamos, вообще, попробовал просто оставить строчку
    bit = MASKS[j];

    По времени получилось ~12 сек, т.е. +- то же
    Написано 24 мар.
  • Почему скорость битовых операций отличается в 1000 раз?

    bakdurak @Lite_stream Автор вопроса
    Adamos, заменил последнюю строчку, чтобы не выкидывал
    System.out.println("Elapsed time " + elapsedTime + ". Bit value " + bit);

    Результаты 0.1656177 и 12.4750856 в пользу строчки, где используется битовый сдвиг. Всё равно разница почти в 100 раз
    Написано 24 мар.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    Денис Загаевский, хорошо, спасибо за ответ
    Написано 22 янв.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    illuzor, под запущенным приложенияем имелось в виду запуск приложения и выход на home screen. Ну, в общем я сейчас проверил: телеграм действительно не присылает пуши, если приложение отсутствует в фоне, а вот gmail таки делает это, вероятно, потому что какой-то гугловский сервис всегда работает в фоне при работае телефона
    Написано 22 янв.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    illuzor, ну, значит, мне показалось это, но от gmail'а точно приходило
    Написано 22 янв.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    Денис Загаевский, и, если действительно, это нельзя сделать, не запуская приложение, то является ли пункт №2 из вопроса приемлемым ?
    Написано 22 янв.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    Денис Загаевский, ну вот насчёт gmail'а я предполагал, что может быть что-то такое, а вот насчёт того же телеграма, насколько я помню, он даже, будучи незапущенным, слал пуши о прмшедших сообщениях, но есть вероятность, что мне показалось, что он действительно не был запущен :)
    Написано 22 янв.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    Денис Загаевский, а как тогда это делают gmail, tg, vk ?
    Написано 22 янв.
  • How to properly check backend for updates in background?

    bakdurak @Lite_stream Автор вопроса
    Благодарю за ответ
    Написано 22 янв.
  • 1
  • 2
  • 3
  • 4
  • Следующие →
Самые активные сегодня
  • w3bsmes
    Alice
    • 18 ответов
    • 0 вопросов
  • Василий Банников
    • 11 ответов
    • 0 вопросов
  • yarkov
    Алексей Ярков
    • 8 ответов
    • 1 вопрос
  • Jump
    АртемЪ
    • 9 ответов
    • 0 вопросов
  • CityCat4
    CityCat4
    • 8 ответов
    • 0 вопросов
  • ThunderCat
    ThunderCat
    • 8 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации