Transcript Slide 1

СОВРЕМЕННЫЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ ПО
Лекция 12:
Кроссплатформенность.
Многозадачность.
Кроссплатформенность
Переносимость программ
• Компилируемые языки:
• совместимые ОС и аппаратные платформы («бинарная
совместимость»)
• ОС с разным API:
- абстрагирование через библиотеки
- перекомпиляция (код не надо переписывать)
• разные аппаратные платформы
- кросс-компиляция
• Виртуальные машины и интерпретаторы:
• программа распространяется как байт-код или исходный код
• целевая среда должна предоставлять способ его выполнить
• возможна оптимизация под конкретную платформу (JITкомпиляция)
3
Переносимость:
компилируемые языки
• Совместимость платформ
• Windows/Wine/ReactOS
• Общее системное API: POSIX
• Библиотеки, фреймворки
•
•
•
•
C Runtime Library
Qt
Boost
GUI: wxWidgets, GTK+,…
4
Виртуальные машины
• Виртуальная машина – уровень
абстракции от аппаратной и/или
программной платформы (ОС)
• эмулирует физическую машину
- обеспечивая переносимость программ с одной
платформы на другую
• или создаёт виртуальное окружение
(«песочницу»)
- ограничивая возможности исполняемых
программ в целях безопасности
5
ВМ как исполняющая среда
языка программирования
• Эмулирует операции некоего процессора
(набор инструкций)
• Два основных способа реализации:
• стековые ВМ
- операнды команд процессора размещаются в стеке
(LIFO)
- результаты операций также помещаются в стек
- проще механизм, короче код, но хуже оптимизируется
• регистровые ВМ
- операнды и результаты размещаются в явно адресуемых
регистрах
- больше возможностей для оптимизации, но длиннее код
операций (включает указание адресов операндов)
6
Стековая и регистровая ВМ
Стековая ВМ:
POP 20
POP 7
ADD 20, 7, result
PUSH result
Регистровая ВМ:
ADD R1, R2, R3;
картинки:
http://markfaction.wordpress.com/2012/07/15/stackbased-vs-register-based-virtual-machine-architectureand-the-dalvik-vm/
7
Виртуальные машины: Java
JVM vs. Dalvik
• JVM – стековая
• Dalvik – регистровая
• может исполнять
Java-байткод
• но требуется
дополнительный
уровень трансляции
и оптимизации
картинка: http://markfaction.wordpress.com/2012/07/15/stackbased-vs-register-based-virtual-machine-architecture-andthe-dalvik-vm/
8
Виртуальные машины: Java VM
• JVM реализует набор команд:
• операции над стеком
• арифметика
• управляющие инструкции (переход, ветвление,
возврат, генерация исключений)
• сохранение и загрузка локальных переменных
• доступ к полям класса (в т.ч. статическим)
• вызов методов (статических, виртуальных,
закрытых, интерфейсных)
• создание объектов (в т.ч. массивов)
• преобразование и проверка типов
9
Виртуальные машины: Java
Трансляция java-кода в байткод
System.out.println(“some string”);
транслируется в:
getstatic java.lang.System.out Ljava/io/PrintStream;
ldc “some string"
invokevirtual java.io.PrintStream.println
(Ljava/lang/String;)V
То есть:
1. В стек помещается ссылка на объект потока ввода-вывода,
2. В стек помещается ссылка на строку, которую надо вывести
3. Происходит вызов метода (функции) println для заданных
операндов
10
Виртуальные машины:
CLR (.NET framework)
• Common Language Runtime –
исполняющая языковая среда
языка CIL
• Common Intermediate Language –
похожий на asm промежуточный
язык
картинки: (с) Wikipedia.org
11
Виртуальные машины: CIL
Hello World
.assembly Hello {}
.method public static void Main() cil managed
{
.entrypoint
.maxstack 1
ldstr "Hello, world!"
call void
[mscorlib]System.Console::WriteLine(string)
ret
}
12
Многозадачность
Порядок вычислений
• Традиционный (фон-неймановский)
• последовательно (в порядке размещения в
памяти)
• ВС, управляемые последовательностью команд
• Управляемый данными или потоковый (data
driven, dataflow)
• команда выполняется, когда вычислены её
операнды
• Управление по запросу (demand driven)
• команда выполняется, когда другим командам
нужен её результат
14
Порядок вычислений
Возможные вычислительные модели:
• а – фон-неймановская;
• б – потоковая;
• в — макропотоковая;
• г — редукционная.
15
Макропотоковые ВС
• Потоковое выполнение нитей
• нить – последовательность команд
• крупнозернистая обработка (coarse-grained
dataflow)
• «гибрид» фон-неймановской и поточной
моделей:
- статический порядок команд в пределах нити
- динамический порядок обработки нитей
16
Макропотоковые ВС
• Формы макропотоковой обработки
• без блокирования
- запуск нити только при наличии всех данных
- исполнение нити без приостановки
• с блокированием
- запуск до получения всех операндов
- приостановка при отсутствии данных
• комбинированная обработка
17
ВС с управлением
вычислениями по запросу
• Мотивация: вычислять только
необходимое для конечного
результата
• Вычисления – на основе запроса
на данные
• Процесс вычислений – в виде
графа
• восходящая обработка «в глубину»
– редукция графа
18
Редукционные ВС
• Математическая основа – лямбдаисчисление
• функциональные языки (Haskell, FP)
• Вычисление выражения – через
упрощение частей
• редекс – применение абстракции к терму
• редукция – операция упрощения
• Две противоположных модели
• потоковая – «энергичные вычисления»
• редукционная – «ленивые вычисления»
19
Две модели вычислений
20
Модели редукционных систем
• Строчная модель
• каждый узел получает свою копию выражения для
оценки
• строковое выражение редуцируется до конечного
значения
• Графовая модель
• выражение представлено в виде орграфа
• редукция графа через оценку его ветвей и
подграфов
• возможно параллельное оценивание различных
частей
21
Строчная редукционная
модель
22
Графовая редукционная
модель
23
Организация вычислений
• Как примерно происходит на практике:
• Фон-неймановская модель
- компилятор (в рамках 1 потока)
• Потоковая модель
- компилятор (напр., RISC-архитектура)
• Макропотоковая модель
- компилятор/ВМ/программист
• механизмы для организации и синхронизации потоков
вычислений
• Редукционная модель
- возможности языка/ВМ («ленивые вычисления», ФП)
24
Инструменты
• Потоки и нити
• Многозадачные ОС и ВМ
- +библиотеки для удобства
использования/кроссплатформенности
• boost, Qt, MFC,…
• Intel TBB, OpenMP, …
- блоки для декомпозиции задач:
• пулы потоков, Task, Thread, async/await,…
• организация «зелёных нитей»
- языки Go, Lua, Erlang, …
- Active Objects в Symbian OS и др. варианты
невытесняющей многозадачности
• GPGPU (General-purpose GPU)
• CUDA / OpenCL / DirectCompute(DirectX)
25
Ссылки
• Устройство интерпретатора языка Python:
http://ideafix.name/wpcontent/uploads/2012/09/Python-14.pdf
• Стековая и регистровая ВМ:
http://www.sternkn.com/stack-based-vs-registerbased-virtual-machine-architecture-and-thedalvik-vm/
• Модификация байт-кода Java VM:
http://www.ibm.com/developerworks/ru/library/ljvmbytecode_mdf_1
• CIL и системное программирование в MS
.NET (учебный курс):
http://www.intuit.ru/studies/courses/89/89/info
26
Ссылки
• GPGPU
• Презентация CUDA + OpenCL
• CUDA Getting Started – введение, примеры
использования
• DirectCompute - поддержка вычислений от
DirectX:
- http://openvidia.sourceforge.net/index.php/DirectC
ompute
27