Современные среды пользовательского интерфейса (Windows, OSX, Linux, мобильные устройства и т. д. )в значительной степени зависят от производительности графического конвейера.
Системы имеют один **графический конвейер. Все графические программы (рабочий стол, браузер, игры и т. д. )являются отдельными потоками, которые должны совместно использовать этот единый графический контекст.
Это создает необходимые условия для проблем с многопоточностью. Потоки могут быть заблокированы, заблокированы, запущены и т. д.
Вероятно, ваш поток «не очень хорошо работает» с графическим потоком рабочего стола и зависает. Вероятно, ожидание ресурса, который больше недоступен (, правильно ли вы освобождаете все ресурсы?)
OpenGL разрабатывается очень агрессивно и доводит аппаратные средства до предела. Вы можете обнаружить, что ошибка не возникает на другом оборудовании.
Однако, если вся ваша система выключается, то, вероятно, фактический набор микросхем конвейера перегревается и/или перенапряжение. В большинстве аппаратных средств есть датчики, которые отключают питание, если возникают вредные скачки нагрузки. Производители проводят нагрузочное тестирование своего оборудования и устанавливают соответствующие пороговые значения.
**Отдельные графические конвейеры заменяются несколькими конвейерами (, которые могут «владеть» отдельными меньшими областями экрана ). Это то, что касается OpenGL Vulkan , и для него требуются специальные наборы микросхем GPU.
Вы можете сделать что-нибудь с сохранением состояния, например
/first-pattern/ {print; p = 0} /second-pattern/ {p = 1} p
Пр.
$ awk '/^criteria/ {print; p = 0} /(Old|New) run:/ {p = 1} p' file.log
criteria (NO-NO) data/speed/profile_1
Old run: exit speed=22.5
Old run: ramp speed=15.2
New run: exit speed=28.2
New run: ramp speed=19.3
criteria (NO-NO) data/speed/profile 3
Old run: exit speed=25.3
Old run: ramp speed=18.6
New run: exit speed=29.5
New run: ramp speed=17.9
Пробовал с помощью команды «Ниже»
awk '/criteria/||/:/{print $0}' filename
Учитывая опубликованный пример ввода/вывода, все, что вам нужно, это:
$ grep -v '^ [^ ]' file
criteria (NO-NO) data/speed/profile_1
Old run: exit speed=22.5
Old run: ramp speed=15.2
New run: exit speed=28.2
New run: ramp speed=19.3
criteria (NO-NO) data/speed/profile 3
Old run: exit speed=25.3
Old run: ramp speed=18.6
New run: exit speed=29.5
New run: ramp speed=17.9
Если это не все, что вам нужно, отредактируйте свой вопрос, чтобы обеспечить более репрезентативную выборку входных/выходных данных.
Gnu sed с оператором диапазона подходит для этого сценария:
$ sed -Ee '
/^criteria/,/^$/!d
//b
/(Old|New) run:/!d
' file
egrep '(criteria|run:)' file
должен работать нормально, пока ни один из этих двух шаблонов не встречается в части «что-то бесполезное».