ЗНАЕТЕ ЛИ ВЫ?

Архитектура Фон Неймана. Современные способы улучшения производительности вычислительной техники.



2. Архитектура фон Неймана (von Neumann) — система принципов построения и функционирования компьютера, предложенная американским математиком Джоном фон Нейманом в 1945 году в статье «Предварительное рассмотрение логической конструкции электронно-вычислительного устройства». В соответствии с принципами фон Неймана компьютер состоит из арифметического логического устройства — АЛУ (англ. ALU, Arithmetic and Logic Unit), выполняющего арифметические и логические операции; устройства управления, предназначенного для организации выполнения программ; запоминающих устройств (ЗУ), в т.ч. оперативного запоминающего устройства (ОЗУ) и внешнего запоминающего устройства (ВЗУ); внешних устройств для ввода-вывода данных. Фон-неймановская архитектура компьютера считается классической, на ней построено большинство компьютеров. В общем случае, когда говорят об архитектуре фон Неймана, подразумевают физическое отделение процессорного модуля от устройств хранения программ и данных.

Архитектура фон Неймана.

 

Улучшение производительности ЭВМ

Конвейерная обработка. Что необходимо для сложения двух вещественных чисел,

представленных в форме с плавающей запятой? Целое множество мелких операций таких,как сравнение порядков, выравнивание порядков, сложение мантисс, нормализация и т.п.

Процессоры первых компьютеров выполняли все эти "микрооперации" для каждой пары

аргументов последовательно одна за одной до тех пор, пока не доходили до

окончательного результата, и лишь после этого переходили к обработке следующей пары

слагаемых. Идея конвейерной обработки заключается в выделении отдельных этапов

выполнения общей операции, причем каждый этап, выполнив свою работу, передавал бы

результат следующему, одновременно принимая новую порцию входных данных.

Получаем очевидный выигрыш в скорости обработки за счет совмещения прежде

разнесенных во времени операций.

 

Кэширование данных – загрузка данных из памяти или результатов вычислений из процессора с дублированием их в специальную быструю память – кэш. При повторном обращении к этим же данным, они будут браться не из медленной основной памяти, а непосредственно из быстрой кэш-памяти. Современные процессоры включают в себя несколько уровней кэширования, отличающихся объемом и быстродействием.

 

Суперскалярность. Как и в предыдущем примере, только при построении

конвейера используют несколько программно-аппаратных реализаций функциональных

устройств, например два или три АЛУ, три или четыре устройства выборки.

 

Предвыборка данных (prefetching) позволяет осуществлять предварительную выборку данных из памяти в кэш или ядро процессора заранее, если ниже по программе встречается доступ в определенному участку памяти.

 

Предсказание переходов позволяет предсказывать исполнение команды ветвления (условных команд) на основании накопленной статистики и выполнять инструкции, находящиеся после условного перехода, до того, как будет определено его направление. Предсказатель переходов является неотъемлемой частью всех современных суперскалярных микропроцессоров, так как в большинстве случаев (точность предсказания переходов в современных процессорах превышает 90%) позволяет оптимально использовать вычислительные ресурсы процессора.

 

Hyper Threading. Перспективное направление развитие современных

микропроцессоров, основанное на многонитевой архитектуре. Основное препятствие на

пути повышения производительности за счет увеличения функциональных устройств –

это организация эффективной загрузки этих устройств. Если сегодняшние программные

коды не в состоянии загрузить работой все функциональные устройства, то можно

разрешить процессору выполнять более чем одну задачу (нить), чтобы дополнительные

нити загрузили – таки все ФУ (очень похоже на многозадачность).

Многоядерность. Можно, конечно, реализовать мультипроцессирование на уровне

микросхем, т.е. разместить на одном кристалле несколько процессоров (Power 4). Но если

взять микропроцессор вместе с памятью как ядра системы, то несколько таких ядер на

одном кристалле создадут многоядерную структуру. При этом в кристалле также могут интегрироваться функции (например, интерфейсы сетевых и телекоммуникационных систем), для выполнения которых обычно используются отдельные наборы микросхем

2. Структура программы. Source-файлы (исходный код). Header-файлы (заголовки). Объявление переменных. Объявления функций.

Объявление функции описывает так называемую сигнатуру функции и выглядит следующим образом.

 

<тип возвращаемого значения> <имя функции> ( [список аргументов] );

Объявления функций

Функции всегда определяются глобально. Они могут быть объявлены с классом памяти static или extern. Объявления функций на локальном и глобальном уровнях имеют одинаковый смысл.

Правила определения области видимости для функций отличаются от правил видимости для переменных и состоят в следующем.

1. Функция, объявленная как static, видима в пределах того файла, в котором она определена. Каждая функция может вызвать другую функцию с классом памяти static из своего исходного файла, но не может вызвать функцию определенную с классом static в другом исходном файле. Разные функции с классом памяти static имеющие одинаковые имена могут быть определены в разных исходных файлах, и это не ведет к конфликту.

2. Функция, объявленная с классом памяти extern, видима в пределах всех исходных файлов программы. Любая функция может вызывать функции с классом памяти extern.

3. Если в объявлении функции отсутствует спецификатор класса памяти, то по умолчанию принимается класс extern.

Все объекты с классом памяти extern компилятор помещает в объектном файле в специальную таблицу внешних ссылок, которая используется редактором связей для разрешения внешних ссылок. Часть внешних ссылок порождается компилятором при обращениях к библиотечным функциям СИ, поэтому для разрешения этих ссылок редактору связей должны быть доступны соответствующие библиотеки функций.

Структура программы:

Программа на языке С++ представляет собой набор функций. Одна из функций должна иметь имя main. Операционная система передает управление в программу пользователя на функцию с этим именем и тем самым начинается вы-полнение программы. От функций в программе функция main отличается тем, что ее нельзя вызвать изнутри программы, а ее параметры, если они существуют, обычно задаются ОС, хотя это необязательно, main бывает первой функцией в тексте программы.

Если предположить, что main- первая функция, определенная в программе на языке С++, то поскольку ни одна функция не может содержать определения другой функции, следом в тексте будут располагаться определения вспомогатель-ных функций, «неглавных» функций. Их может быть различное количество.

Функции могут быть описаны в произвольном порядке. Удобно расположить их по алфавиту или сгруппировать по определенному признаку.

Source Files –исходный файлпрограммы, файлы c кодами программы и имеющими тип *.cpp,

Переменная – это поименованная область памяти, имеющая определенное значение и тип.

основными характеристиками переменной являются: тип, класс памяти, область действия (видимости) и время жизни.

1. Объявление переменных. Объявление переменных происходит в начале функции или вне функций в начале модуля.

int i;

double d;

 

При объявлении переменных происходит автоматическое выделение памяти под переменную. При этом тип данных определяет размер выделяемой под переменную памяти. Перед типом переменной также может стоять один из модификаторов класса памяти (auto, extern, static или register), смысл из применения будет рассмотрен позже

Тип данных также описывает список применимых к данным переменным операций. Так, для переменных типа int операция “+” будет выполнять целочисленное сложение. Для переменных типа double операция “­–” будет выполнять сложение с учётом дробных частей.

При объявлении переменных могут использоваться следующие типы данных: арифметические типы, массивы, указатели, перечисления, сложные типы. Переменные объявляют в операторе описания. Оператор описания состоит из спецификации типа и списка имён переменных, разделённых запятой. В конце обязательно должна стоять точка с запятой.

Объявление переменной имеет следующий формат:

[модификаторы] спецификатор_типа идентификатор [, идентификатор] ...

Модификаторы - ключевые слова signed, unsigned, short, long.

Спецификатор типа - ключевое слово char или int, определяющее тип объявляемой переменной.

Идентификатор - имя переменной.

Инициализация значения переменной при объявлении

При объявлении переменную можно проинициализировать, то есть присвоить ей начальное значение.

 

файлы описания библиотек и других модулей (header-файлов)

Header-файлысодержат в себе декларации (описания имён и параметров) для всех функций, содержащихся в соответствующем модуле или библиотеке.

 

Заголовочный файл (иногда головной файл, англ. header file), или подключаемый файл — в языках программирования файл, механически «вставляемый» компилятором в исходный текст в том месте, где располагается некоторая директива (#include <file.h> в Си).

В языках программирования Си и C++, с их зачаточной модульностью, заголовочные файлы — основной способ подключить к программе типы данных, структуры, прототипы функций, перечислимые типы, и макросы, используемые в другом модуле. Имеет по умолчанию расширение .h

В заголовочном файле модуля объявляется каждая функция, объект и тип данных, являющиеся частью интерфейса вызова

библиотека – это набор откомпилированных реализаций (описаний) функций, хэдер-файл – это набор их объявлений. Путаница между библиотеками и хэдер-файлами возникла в те времена, когда в стандартных библиотеках функций компиляторов каждому библиотечному файлу (.lib) соответствовал свой хэдер-файл (.h).

 


Билет





Последнее изменение этой страницы: 2016-08-16; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.216.79.60 (0.013 с.)