Применение химического оружия в Гуте
- 1 year ago
- 0
- 0
Существуют многочисленные практические приложения
раскраски графов
. Когда приложение моделируется как проблема с раскраской вершин графа, то вершины в каждом цветовом классе обычно представляют отдельные субъекты, которые не конкурируют или не конфликтуют друг с другом. Семь основных классов приложений, решаемых с помощью раскраски вершин (1—5) и рёбер (6—7) графов, следующие
:
Термин «распределение частот» объединяет разные типы задач, которые зачастую имеют разные цели и модели .
Общее между задачами — это то, что они все производят оптимальное распределение ограниченного набора ресурсов между пользователями, количество коих в современных условиях всё время растёт. Два основных направления оптимизации :
В ходе рассмотрения подходящих моделей, возникают задачи не намного сложнее T-раскраски ( англ. ) мультиграфа , ( англ. set T-coloring ) .
Результаты работы над реальной сотовой сетью были применены оператором в своей практической деятельности (проведено оператором E-Plus ( (англ.) ) — 3-м по величине в Германии (на 2010)) .
Вероятно, любому конкретному виду раскраски найдется применение в составлении расписаний:
Заметную роль в быстродействии программ на компьютере играет время обращения микропроцессора к данным. А именно, процессор может обращаться (перечислим устройства в порядке убывания быстродействия и увеличения объёма) к:
Далее рассмотрим оптимизации программ, связанные с распределением данных в этих устройствах.
Считается, что первыми важными работами, заложившими основы применения метода раскраски графов в распределении регистров , были , , последующие же не добавили ничего революционного, внимание в них было сконцентрировано на ускорении работы алгоритма, уменьшении памяти, новых эвристиках по определению стоимости (введём определение ) и выбору регистров для откачки . Обзор этих методов можно найти в .
Приведём способ, предложенный в .
Распределение регистров ( англ. register allocation ) микропроцессора обычно производится на этапе компиляции.
На вход процедуры распределения подаётся некий внутренний код ( англ. IL , intermediate language , internal language ), который рассчитан на виртуальную машину с неограниченным числом регистров — будем называть их виртуальными регистрами.
На выходе процедуры обращения к виртуальнам регистрам переводятся либо в обращения к реальным регистрам процессора, либо, если первого нельзя сделать по причине того, что все регистры уже заняты, — в обращения к оперативной памяти путём введения дополнительного кода. Этот код называют кодом откачки ( англ. code ), а сам процесс — откачкой ( ). Отметим, что при обращении к оперативной памяти так же иногда используются реальные регистры (для тех команд процессора, которые в качестве аргумента не могут принимать адрес в памяти).
Для примера, количество регистров общего назначения в большей части процессоров Intel , соответствующих архитектуре:
(Однако, даже не все из них могут быть использованы в нашей процедуре распределения регистров, поскольку уже могут быть заняты — но это уже тонкие вопросы реализации.) Оперативная память же может хранить очень большое число — ограничения на её объём рассматривать не будем.
Перед выполнением самой процедуры распределения, стоит сделать:
Сам алгоритм распределения регистров состоит из следующих шагов.
Практика показывает, что алгоритм сходится довольно быстро.
Раскраска графа применяется во многих известных компиляторах, например:
Процессоры, способные одновременно и независимо выполнять несколько команд , находят всё более широкое применение; о них говорят, что те поддерживают параллелизм на уровне команд ( англ. , ILP ). Назовём их ILP-процессорами. Класс ILP-процессоров включает в том числе процессоры с очень длинным командным словом — VLIW ( Very Large Instruction Word , к числу которых относятся, в частности, многие модели цифровых процессоров обработки сигналов (ЦПОС) . Самой известной коммерчески успешной реализацией концепции параллелизма на уровне отдельных инструкций является семейство микропроцессоров Itanium компании Intel . Также стоит отметить архитектуру E2K , разработанную российской компанией МЦСТ .
Для реального использования высокой производительности ILP-процессоров необходимы компиляторы языков высокого уровня, способные генерировать эффективный код; в том числе, важна и оптимизация . Введение ILP требует серьёзной переработки в части построения графа несовместимости. Имеется доработанный вариант .
Был предложен также и алгоритм для распределения часто используемых областей кода в кэше — т. н. англ. cache line coloring .
здесь такой: вершины — некие «блоки» кода (можно, например, брать процедуры ), рёбра существуют тогда, когда из одного «блока» ввызывается другой. Как видно, мы концентрируемся на т. н. конфликтах первого поколения ( first-generation cache conflicts ) — между «блоком» и её вызывающим или вызываемым. Но задача раскраски решается не алгоритмами общего назначения, а специальным эвристическим, который, к тому же, даёт решение, которое удовлетворяет неким дополнительным условиям.
Достоинство этого метода — в том, что учитываются и размеры кэша, строки кэша, «блоков» кода, и . Метод удачно комбинируется с другими оптимизациями и . Он может реализовываться оптимизатором — но не оптимизатором компилятора, а оптимизатором компоновщика .
Обобщённо представим задачу так: объекты — некие вычисления, между которыми надо разделить вычислительные ресурсы (процессоры, компьютеры…), могущие работать параллельно друг другу. Какие-то вычисления могут выполняться в параллели друг другу, какие-то — нет. Соответственно, вычислений и представляет собой искомое распределение.
Приведём следующие примеры численных методов , которые таким образом можно распараллелить:
Этот метод является одним из лучших для решения систем линейных алгебраических уравнений (СЛАУ) с большими, разреженными , симметричными , положительно определёнными матрицами .
Тоже решения СЛАУ .
Этот, в свою очередь, хорош, например, для расчёта энергораспределительных электросетей : такие сети могут быть представлены графами, вершины которых — это потребители и источники электроэнергии, а рёбра — линии электропередач ; далее, строится СЛАУ , в матрице которой диагональным элементам соответствуют узлы вышеупомянутого графа, а ненулевым недиагональным — рёбра .
Также метод может служить т. н. сглаживателем ( англ. iterative smoother ) для многосеточных методов решения задач методом конечных элементов . ( англ. of ). Имеется оптимизация метода Зейделя , используемого в сглаживании, с помощью т. н. англ. sparse tiling для такого случая его использования .
( англ. )
Они, в свою очередь, полезны в решении дифференциальных уравнений в частных производных (ДУЧП) . Принцип уточнения здесь такой: в местах, где ожидается наибольшая локальная погрешность — где решение меняется быстрее всего, плотность сетки выбирается большей .
( англ. Method of coordinate relaxation )
Удачно применяется в нахождении экстремальных собственных значений очень больших разреженных симметричных матриц. Иногда таких больших, что их практичнее генерировать на лету, чем хранить в памяти. Такие задачи часто встают в квантовой механике .
( by )
Для решения СЛАУ с использованием подпространств Крылова .
Вычисление матриц производных ( якобианов и гессианов ) в том случае, когда они разреженные , можно серьёзно ускорить с помощью раскраски графов. Существует проект «Graph Coloring for Computer Derivatives». На его сайте представлены публикации по теме, а также — программный пакет, в который оформили участники проекта свои достижения . Для введения в предмет имеются презентации, относящихся к проекту .
Для простого случая, когда «уплотнение» производной ограничивается уменьшением количества столбцов, приведём алгоритм.
Вход
: функция от вектора —
Выход : производная — якобиан или гессиан 1. Исследуем структуру разреженности производной (саму производную вычислять не будем). 2. Составим матрицу уменьшения количества столбцов — англ. seed matrix ; составим так, чтобы стало наименьшим. 3. Вычислим значения уплотнённой ; вычислять будем не по этой формуле, а иным способом. Тут видно, что уменьшенное раньше — количество столбцов 4. И теперь, восстановим значения по (можно некими прямыми методами, можно — решением уравнений). |
Место раскраски графа здесь — в вычислении . В простых случаях надо вычислять обычную вершинную ( англ. distance-1 ); distance-2 раскраску (которая, в том числе сводится к distance-1 раскраске square graph ). В более сложных, требуются небольшие дополнительные ограничения:
В рамках вышеуказанного проекта были проведены вычисления для технических производственных задач:
Технология цифровых водяных знаков ( англ. ) позволяет вместе с данными (будь то медиафайлы , исполняемые файлы и прочие) передать некое скрытое сообщение (« водяной знак », ). Такое скрытое сообщение может быть применено в защите авторских прав для идентификации владельца данных.
Это важно, например, для установления источника их распространения нелегальным образом. Или же для подтверждения прав на данные, например — программное обеспечение систем на кристалле ( ). Сообщение можно закодировать в том числе и в графе. Одну из таких техник предложили Qu и Potkonjak (поэтому её иногда называют QP-алгоритмом) .
Состоит она вот в чём: допустим, у нас есть граф G, раскраска которого используется в программе — причём, используется так, что допустимо поменять содержимое графа с небольшим увеличением его хроматического числа . Что важно, одним из таких примеров является граф несовместимости — а значит, мы сможем закодировать послание в программном продукте с помощью распределения регистров.
Извлечь его можно путём сравнения полученного графа с исходным; существуют и способы удостовериться в том, было ли некое сообщение закодировано в графе без использования исходного .
Имеется развитие, уточнение Qu и Potkonjak , попытки улучшения алгоритма , , .
Отметим, что имеется программный пакет SandMark, в котором исполнены алгоритмы такого рода , . Он доступен для скачивания .
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)
{{
cite conference
}}
:
Неизвестный параметр
|coauthors=
игнорируется (
|author=
предлагается) (
справка
)