Архитектура Фон Неймана. Современные способы улучшения производительности вычислительной техники.
Архитектура фон Неймана.
Улучшение производительности ЭВМ
Конвейерная обработка. Что необходимо для сложения двух вещественных чисел,
представленных в форме с плавающей запятой? Целое множество мелких операций таких,как сравнение порядков, выравнивание порядков, сложение мантисс, нормализация и т.п.
Процессоры первых компьютеров выполняли все эти "микрооперации" для каждой пары
аргументов последовательно одна за одной до тех пор, пока не доходили до
окончательного результата, и лишь после этого переходили к обработке следующей пары
слагаемых. Идея конвейерной обработки заключается в выделении отдельных этапов
выполнения общей операции, причем каждый этап, выполнив свою работу, передавал бы
результат следующему, одновременно принимая новую порцию входных данных.
Получаем очевидный выигрыш в скорости обработки за счет совмещения прежде
разнесенных во времени операций.
Кэширование данных – загрузка данных из памяти или результатов вычислений из процессора с дублированием их в специальную быструю память – кэш. При повторном обращении к этим же данным, они будут браться не из медленной основной памяти, а непосредственно из быстрой кэш-памяти. Современные процессоры включают в себя несколько уровней кэширования, отличающихся объемом и быстродействием.
Суперскалярность. Как и в предыдущем примере, только при построении
конвейера используют несколько программно-аппаратных реализаций функциональных
устройств, например два или три АЛУ, три или четыре устройства выборки.
Предвыборка данных (prefetching) позволяет осуществлять предварительную выборку данных из памяти в кэш или ядро процессора заранее, если ниже по программе встречается доступ в определенному участку памяти.
Предсказание переходов позволяет предсказывать исполнение команды ветвления (условных команд) на основании накопленной статистики и выполнять инструкции, находящиеся после условного перехода, до того, как будет определено его направление. Предсказатель переходов является неотъемлемой частью всех современных суперскалярных микропроцессоров, так как в большинстве случаев (точность предсказания переходов в современных процессорах превышает 90%) позволяет оптимально использовать вычислительные ресурсы процессора.
Hyper Threading. Перспективное направление развитие современных
микропроцессоров, основанное на многонитевой архитектуре. Основное препятствие на
пути повышения производительности за счет увеличения функциональных устройств –
это организация эффективной загрузки этих устройств. Если сегодняшние программные
коды не в состоянии загрузить работой все функциональные устройства, то можно
разрешить процессору выполнять более чем одну задачу (нить), чтобы дополнительные
нити загрузили – таки все ФУ (очень похоже на многозадачность).
Многоядерность. Можно, конечно, реализовать мультипроцессирование на уровне
микросхем, т.е. разместить на одном кристалле несколько процессоров (Power 4). Но если
взять микропроцессор вместе с памятью как ядра системы, то несколько таких ядер на
одном кристалле создадут многоядерную структуру. При этом в кристалле также могут интегрироваться функции (например, интерфейсы сетевых и телекоммуникационных систем), для выполнения которых обычно используются отдельные наборы микросхем
2. Структура программы. Source-файлы (исходный код). Header-файлы (заголовки). Объявление переменных. Объявления функций.
Объявления функций
Функции всегда определяются глобально. Они могут быть объявлены с классом памяти static или extern. Объявления функций на локальном и глобальном уровнях имеют одинаковый смысл.
Правила определения области видимости для функций отличаются от правил видимости для переменных и состоят в следующем.
1. Функция, объявленная как static, видима в пределах того файла, в котором она определена. Каждая функция может вызвать другую функцию с классом памяти static из своего исходного файла, но не может вызвать функцию определенную с классом static в другом исходном файле. Разные функции с классом памяти static имеющие одинаковые имена могут быть определены в разных исходных файлах, и это не ведет к конфликту.
2. Функция, объявленная с классом памяти extern, видима в пределах всех исходных файлов программы. Любая функция может вызывать функции с классом памяти extern.
3. Если в объявлении функции отсутствует спецификатор класса памяти, то по умолчанию принимается класс extern.
Все объекты с классом памяти extern компилятор помещает в объектном файле в специальную таблицу внешних ссылок, которая используется редактором связей для разрешения внешних ссылок. Часть внешних ссылок порождается компилятором при обращениях к библиотечным функциям СИ, поэтому для разрешения этих ссылок редактору связей должны быть доступны соответствующие библиотеки функций.
Прототип функции - показывает образец того как применять функцию в программе, какие значения в нее передаются и если она возвращает какое-то значение то прототип указывает тип возвращаемых данных. Прототип не имеет скобок { } а после скобок ( ) ставится ;
Функция - имеет { "тело" } в фигурных скобках. Тело это код на Си определяющий то что делает функция.
; после вызова функции не ставится !
Программа на языке Си это текстовый файл, обычно с расширением.c
Текст программы называют исходным или "исходником" или "сурцом"
от анг. source code - это вам ключевые слова для поиска
Весь исполняемый код программы на Си находится в функциях -
т.е. в фигурных скобках { исполняемый код программы }
Программа на Си имеет определенную структуру :
1) заголовок
2) включение необходимых внешних файлов - #include
3) ваши определения для удобства работы - #define
4) объявление глобальных переменных и констант
Глобальные переменные и константы
- объявляются вне какой либо функции.
т.е. не после фигурной скобки {
- доступны в любом месте программы -значит можно читать их значения и присваивать переменным значения там где вам требуется - в любом месте программы после их объявления.
5) описание функций - обработчиков прерываний
6) описание других функций используемых в программе
7) функция main <- это единственный обязательный пункт !