whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба Всем хорошим привет! Давно хотел спросить, есть прога выводит скажем картинки с данных, при включении осреднения вывод картинок заметно замедляется но нагрузка на процесор в диспечере не изменяется ( скажем 50%), приоритет в программе выставлен SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS); В каком месте тормозит и почему нагрузка на проц не изменяется ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 25 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба Ищите профайлер для вашего языка программирования, запускайте его и смотрите узкие места. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба нагрузка на процессор может не меняться, если программа использует только один поток, поэтому может загрузить только одно ядро из всех имеющихся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 13 minutes ago, MegaVolt said: Ищите профайлер для вашего языка программирования, запускайте его и смотрите узкие места. Подходит VTune Performaоnce Analyzer но я думал что оптимизировать нужно когда загрузка подходит к 100% ? А тут 50% 5 minutes ago, novikovfb said: нагрузка на процессор может не меняться, если программа использует только один поток, поэтому может загрузить только одно ядро из всех имеющихся. Так один поток и есть - вывод, предлагаете осреднение запустить в другом потоке ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 7 minutes ago, whale said: Так один поток и есть - вывод, предлагаете осреднение запустить в другом потоке ? точнее - осреднение переписать в многопотоковое, если данные как-то можно разделить на несколько потоков Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 (изменено) · Жалоба 6 minutes ago, novikovfb said: точнее - осреднение переписать в многопотоковое, если данные как-то можно разделить на несколько потоков А как разделить ? Пока все линейно - приходят данные - осредняются -выводятся - ждем данные итд Разве сделать осреднение и вывод как то паралельно, создать буфер входных данных ? Изменено 11 мая, 2022 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 6 minutes ago, whale said: А как разделить ? Пока все линейно - приходят данные - осредняются -выводятся - ждем данные итд Разве сделать осреднение и вывод как то паралельно, создать буфер входных данных ? читайте учебники по распараллеливанию алгоритмов обработки данных. Или смиритесь с тем, что получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 6 minutes ago, novikovfb said: читайте учебники по распараллеливанию алгоритмов обработки данных. Или смиритесь с тем, что получилось. Спасибо, навели на мысль, как нить докумекаем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба Возможно проблема аналогичная, что и у плохо сделанного софта мобилок, когда скроллинг списка (допустим, контактов) начинает совершенно неестественно тормозить. Вместо того, чтобы "проскроллить" образ экрана из 4-5-10 пунктов, идет "марлезонский балет", где запрашивается исходная база, список/массив, сортирутеся, делается выборка образа экрана, копируется итд. Со всеми цепочками конструкторов, деструкторов, сортировками и прочими хзч-зачем непроизводительными для скроллинга экрана действиями. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 (изменено) · Жалоба 2 minutes ago, k155la3 said: Возможно проблема аналогичная, что и у плохо сделанного софта мобилок, когда скроллинг списка (допустим, контактов) начинает совершенно неестественно тормозить. Вместо того, чтобы "проскроллить" образ экрана из 4-5-10 пунктов, идет "марлезонский балет", где запрашивается исходная база, список/массив, сортирутеся, делается выборка образа экрана, копируется итд. Со всеми цепочками конструкторов, деструкторов, сортировками и прочими хзч-зачем непроизводительными для скроллинга экрана действиями. Оптимизировать конечно можно но меня удивило что не растет загрузка процессора, два ядра по 25% а вывод тормозится, всегда думал что вин7 сама распределяет загрузку ядер и тормозит я так понимаю многократный вызов ptr = (Byte *)gBitmap->ScanLine; Изменено 11 мая, 2022 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 13 minutes ago, whale said: Оптимизировать конечно можно но меня удивило что не растет загрузка процессора, два ядва по 25% а вывод тормозится, всегда думал что вин7 сама распределяет загрузку ядер. "Сама" - сильно сомневаюсь. Скорее когда Вы укажете софту, что этот процесс может/должен выполняться параллельно. Или укажете момент, когда его можно запустить параллельно. Я бы выделил из проекта "подозрительную" по затратам времени часть и провел нагрузочное тестирование. Ну, еще если писано все на ООП/CPP - пересмотрел бы использование объектов-методов (к примеру, вместо массива с добавлением-вконец-удалением-сначала) и выполнением усреднения по всему массиву использовать полносвязный список. Или томуподобное. Это я уже сильно утрирую. Пардон. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 27 минут назад, whale сказал: Оптимизировать конечно можно но меня удивило что не растет загрузка процессора, два ядра по 25% а вывод тормозится Значит ваша программа чего-то ждёт (какого-то события от win). Потому и загрузка не 100%. Ищите где ожидание происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 (изменено) · Жалоба 2 hours ago, jcxz said: Значит ваша программа чего-то ждёт (какого-то события от win). Потому и загрузка не 100%. Ищите где ожидание происходит. Не знаю что она может ждать на функции ptr = (Byte *)gBitmap->ScanLine(i); Может конечно доступ к массиву такой тормозной но вроде он в обычной озу лежит 3 hours ago, k155la3 said: "Сама" - сильно сомневаюсь. Скорее когда Вы укажете софту, что этот процесс может/должен выполняться параллельно. Или укажете момент, когда его можно запустить параллельно. Я бы выделил из проекта "подозрительную" по затратам времени часть и провел нагрузочное тестирование. Ну, еще если писано все на ООП/CPP - пересмотрел бы использование объектов-методов (к примеру, вместо массива с добавлением-вконец-удалением-сначала) и выполнением усреднения по всему массиву использовать полносвязный список. Или томуподобное. Это я уже сильно утрирую. Пардон. Тормоза известны, осреднение по массиву ptr = (Byte *)gBitmap->ScanLine(i); Меня больше интересовал вопрос почему проц не загружается. Раздает же винда загрузку на два ядра сама. Изменено 11 мая, 2022 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 11 мая, 2022 Опубликовано 11 мая, 2022 · Жалоба 27 минут назад, whale сказал: Не знаю что она может ждать на функции ptr = (Byte *)gBitmap->ScanLine(i); Не там. У вас разве программа только из этой строчки состоит? 27 минут назад, whale сказал: Меня больше интересовал вопрос почему проц не загружается. Ещё раз: не загружается потому как происходит ожидание какого то события. На каком-то объекте синхронизации ОС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 1 11 мая, 2022 Опубликовано 11 мая, 2022 (изменено) · Жалоба 5 minutes ago, jcxz said: Не там. У вас разве программа только из этой строчки состоит? Ещё раз: не загружается потому как происходит ожидание какого то события. На каком-то объекте синхронизации ОС. Комментируем эту строку и тормоза исчезают ptr = (Byte *)gBitmap->ScanLine(i); Вполне возможно что доступ к дин массиву gBitmap и тормозит но непонятно почему. Тут все линейно нет событий, пришли данные по таймеру, залили в gBitmap, осреднили, вывели. Изменено 11 мая, 2022 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться