У меня возникла идея сделать это быстрее, используя альтернативный метод расчета, который потребует меньшего количества инструкций. Чтобы проверить, какую производительность я могу получить, я раскомментировал шесть инструкций внутри цикла, которые можно было сохранить. Остальная часть кода осталась без изменений:
Профилируя модифицированную версию, оказывается, что она примерно на 10% медленнее исходной (~2,2 мс против 1,9 мс). Для меня это не имеет никакого смысла. Я ожидал, что это не будет иметь никакого значения, поскольку узкое место находится где-то в другом месте, но как меньшее количество инструкций может замедлить работу кода?
Что я проверял:
Я попытался сделать пример меньшего размера, который показывает то же поведение, но как только я изменю некоторые части кода , например вычислите только yValues1, аномалия исчезнет.
Как можно объяснить такое поведение в общих чертах?
Обратите внимание, что этот вопрос [b]не[/b] касается преобразования YUV422 в RGB! У меня есть этот код для преобразования порядка пикселей YUV422 в RGB. > [code]static void yuv422ToRGB(unsigned char* img, int width, int height, int widthStep, unsigned char* dst) {
__m128i out = _mm_packus_epi16(rgb1, rgb2); _mm_storeu_si128((__m128i*)(dst), out); dst += 12; } img += widthStep; } } [/code] У меня возникла идея сделать это быстрее, используя альтернативный метод расчета, который потребует меньшего количества инструкций. Чтобы проверить, какую производительность я могу получить, я раскомментировал шесть инструкций внутри цикла, которые можно было сохранить. [b]Остальная часть кода осталась без изменений[/b]: [code]static void yuv422ToRGB(unsigned char* img, int width, int height, int widthStep, unsigned char* dst) {
__m128i out = _mm_packus_epi16(rgb1, rgb2); _mm_storeu_si128((__m128i*)(dst), out); dst += 12; } img += widthStep; } } [/code] Профилируя модифицированную версию, оказывается, что она примерно на 10% медленнее исходной (~2,2 мс против 1,9 мс). Для меня это не имеет никакого смысла. Я ожидал, что это не будет иметь никакого значения, поскольку узкое место находится где-то в другом месте, но как меньшее количество инструкций может замедлить работу кода? Что я проверял: [list] [*]Вывод компилятора https://godbolt.org/z/893c8EfPW [*]Эффекты кэширования. Я протестировал следующий порядок вызовов: A A B B A B. Все вызовы A были быстрее, чем вызовы B. [/list] Платформа: [list] [*]Intel Atom E3845 [*]clang 14 [*]Флаги компилятора: -std=c++14 -O3 - March=silvermont [/list] Я попытался сделать пример меньшего размера, который показывает то же поведение, но как только я изменю некоторые части кода , например вычислите только yValues1, аномалия исчезнет. Как можно объяснить такое поведение в общих чертах?
Я новичок в C++, у меня всего 1,5 года опыта работы с этим языком.
Мне приходится работать с библиотекой, которая имеет готовые структуры данных, и она предлагает способ создать собственную структуру данных, следуя определенным правилам, чтобы...
У меня есть только две конечные точки в моем коде Python.
Одна конечная точка FastAPI содержит логику, выполнение которой занимает около минуты.
Другая — это конечная точка SSE, которая использует sse-starlette EventSourceResponse.
Оба метода...
Недавно я переместил свой клиент API из запросов на httpx . Между тем, бэкэнд добавил поддержку SSE, которой я хотел бы воспользоваться. >)-это пакет httpx-sse . Тем не менее, я не могу заставить его работать. /> base_url - как я заполните для этого...
Примерно в 2017 году я написал сценарий SSE (PHP) и код Javascipt. Отбыл нормально с PHP-5 + HTTP/1 и Firefox той эпохи. У меня есть тайм-аут через 60 секунд. Если я удаляю while зациклена что -то, что я думаю, что это плохо, это работает. В этом...
Примерно в 2017 году я написал сценарий SSE (PHP) и код Javascipt. Отбыл нормально с PHP-5 + HTTP/1 и Firefox той эпохи. У меня есть тайм-аут через 60 секунд. Если я удаляю while зациклена что -то, что я думаю, что это плохо, это работает. В этом...