История изменений
Исправление Stanson, (текущая версия) :
Эта «правильная» аналогия постоянно теряет из виду декодирование, которое нельзя распараллелить.
Мда…
Ответь мне, нахрена вообще распараллеливать декодирование блока, когда задача запускать это самое нераспараллеливаемое декодирование одновременно на куче процессоров для кучи отдельных пожатых блоков из которых собственно и состоит JPEG.
А я уже утомился повторять где находится бутылочное горлышко и что GPU тут никак не поможет.
Бутылочное горлышко в количестве процессоров. JPEG состоит из квадратиков, каждый из которых пожат неким алгоритмом. Любой процессор - в CPU ли, в GPU ли может за раз разжать только один квадратик. Если процессоров много, то можно разжимать много квадратиков одновременно, только и всего. Если процессоров столько же сколько квадратиков в JPEG, то JPEG можно разжать за одно выполнение алгоритма разжатия одновременно на всех имеющихся процессорах. Если процессор один - то придётся разжимать квадратики один за другим, что, собственно, и происходит в стандартной libjpeg, и именно по этой причине твоя смотрелка дико тормозит при открытии достаточно большого файла.
В GPU намного больше процессоров чем в CPU. Твой проект один хрен заточен на использование GPU, о чём даже в названии оного есть упоминание в виде буковок GL. Так в чём тогда проблема использовать процессоры GPU если уж использование GPU и так подразумевается.
Более того, JPEG вообще можно разжимать произвольными кусками, координаты и размер которых кратны размеру квадратиков.
Метеоспутники, например, летая вокруг Земляшки непрерывно передают в канале LRPT бесконечный JPEG с картинкой полосы поверхности которая попадает в данный момент на сенсор состоящей из 196 пожатых квадратиков 8х8. Размер этого JPEG вообще бесконечен по вертикали. Тем не менее, прекрасно получается разжимать только то, что начинает попадать в антенну когда спутник появляется из-за горизонта и до тех пор пока он не скроется за горизонт Небольшой кусочек бесконечного JPEG. Без всяких там заголовков и «загрузки всего файла».
Ну да, ведь без вас я не знаю чем мне заняться.
Наше дело продложить. :)
Исходная версия Stanson, :
Эта «правильная» аналогия постоянно теряет из виду декодирование, которое нельзя распараллелить.
Мда…
Ответь мне, нахрена вообще распараллеливать декодирование блока, когда задача запускать это самое нераспараллеливаемое декодирование одновременно на куче процессоров для кучи отдельных пожатых блоков из которых собственно и состоит JPEG.
А я уже утомился повторять где находится бутылочное горлышко и что GPU тут никак не поможет.
Бутылочное горлышко в количестве процессоров. JPEG состоит из квадратиков, каждый из которых пожат неким алгоритмом. Любой процессор - в CPU ли, в GPU ли может за раз разжать только один квадратик. Если процессоров много, то можно разжимать много квадратиков одновременно, только и всего. Если процессоров столько же сколько квадратиков в JPEG, то JPEG можно разжать за одно выполнение алгоритма разжатия одновременно на всех имеющихся процессорах. Если процессор один - то придётся разжимать квадратики один за другим, что, собственно, и происходит в стандартной libjpeg, и именно по этой причине твоя смотрелка дико тормозит при открытии достаточно большого файла.
Более того, JPEG вообще можно разжимать произвольными кусками, координаты и размер которых кратны размеру квадратиков.
Метеоспутники, например, летая вокруг Земляшки непрерывно передают в канале LRPT бесконечный JPEG с картинкой полосы поверхности которая попадает в данный момент на сенсор состоящей из 196 пожатых квадратиков 8х8. Размер этого JPEG вообще бесконечен по вертикали. Тем не менее, прекрасно получается разжимать только то, что начинает попадать в антенну когда спутник появляется из-за горизонта и до тех пор пока он не скроется за горизонт Небольшой кусочек бесконечного JPEG. Без всяких там заголовков и «загрузки всего файла».
Ну да, ведь без вас я не знаю чем мне заняться.
Наше дело продложить. :)