Министерство образования и науки Российской Федерации
Новосибирский государственный технический университет
АРХИТЕКТУРА ЭВМ И ВС
Методические указания к лабораторным работам
для студентов 1-го курса ФПМИ
Составители:
Доцент кафедры ПВТ к.т.н. Маркова В.П.
Ассистент кафедры ПВТ к.ф.-м.н. Куликов И.М.
Новосибирск 2011
Введение
Целями лабораторных работ являются приобретение практических знаний по:
- идентификации оборудования и программного окружения ЭВМ,
- представлению вещественных чисел в ЭВМ,
- сравнению различных способов обхода памяти,
- программному определению размера и степени ассоциативности кэш-памяти различных уровней,
- использованию SIMD-расширения архитектуры x86,
- использованию интерфейса OpenMP для программирования простых многопоточных приложений.
Порядок выполнения работ
Лабораторные работы 1, 2 и 3 являются обязательными для выполнения, лабораторная работа 4 является дополнительной. За лабораторные работы 1 и 2 выставляются максимум по 10 баллов, за лабораторную работу 3 выставляется максимум 20 баллов, лабораторная работа 4 оценивается максимум 40 баллов. Количество баллов, полученных за выполнение каждой из лабораторных работ, определяется по выполненным заданиям к лабораторной работе в соответствии с баллом такого задания и сроком сдачи. В случае сдачи лабораторной работы после крайней даты сдачи дополнительные задания не засчитываются и соответствующие баллы за них не выставляются. Базовые задания первых трёх лабораторных работ должны быть выполнены обязательно, без них лабораторная работа считается не сданной.
Отчёт по лабораторной работе нужно подготавливать в электронном виде и высылать на e-mail преподавателя kulikov@ssd.sscc.ru, по результатам сдачи отчёта студент при необходимости приглашается на защиту. В отчёт необходимо включить титульный лист; список выполненных заданий по лабораторной работе; текст программы; необходимые тесты, графики зависимостей, результаты замера времени и т. п.; выводы, сделанные на основании выполнения лабораторной работы.
Студенты, сдавшие четыре лабораторные работы и получившие в сумме максимальный балл (80 баллов) претендуют на получение зачёта «автоматом» с максимальным баллом по предмету (100 баллов). Для допуска к зачёту необходимо набрать 31 балл за лабораторные работы.
Лабораторная работа № 1
Представление чисел и определения типа оборудования
Цель работы. Идентификация оборудования и программного окружения ЭВМ, изучение представления вещественных чисел в ЭВМ.
Методические указания.
1. Представление беззнаковых целых чисел
Для представления беззнаковых целых чисел необходимо перевести из десятичной системы исчисления в двоичную. Например, число
можно представить в виде суперпозиции по степеням двойки: ,где единицы в двоичном представлении числа стоят на позиции соответствующих степеней двоек. Для простоты рассмотрим беззнаковый однобайтовый тип данных (тип unsigned char в языках С/С++). Для записи числа
в такой тип данных необходимо дополнить двоичное представление до 8 знаков и записать полученные значения в соответствующие биты:Рисунок 1.
2. Представление знаковых целых чисел
В случае знаковых типов данных старший бит отвечает за знак числа (1 – отрицательное число, 0 – положительное число). Основной проблемой является представление отрицательных чисел. Для такого представления существует следующий алгоритм:
1. нахождение двоичного представления модуля числа,
2. нахождение двоичного дополнения числа,
3. прибавление единицы.
Рассмотрим алгоритм на примере. Представим число
в знаковом однобайтном типе данных (тип char в языках С/С++):1. Двоичное представление
,2. Для нахождения двоичного представления инвертируем все биты числа
,3. Прибавляем единицу
.После этого записываем полученные значения в соответствующие биты:
Рисунок 2.
3. Представление вещественных чисел
Основной интерес в вычислениях представляют вещественные типы данных и погрешности округления, связанные с ними. По стандарту IEEE 754 вещественное число
представляется в виде:Рисунок 3.
Где
– однобитовый знак числа, – нормализованная мантисса, – показатель степени двойки. В случае типа float под мантиссу выделяется 23 бита, экспоненту 8 бит, в случае типа double 52 бита, экспоненту 11 бит.Приведём пример представления вещественного числа
в типе float. Основной задачей является запись числа в виде . Число можно записать в виде , в данном случае мантисса имеет вид нормализация мантиссы позволяет отбросить единицу и записывать только дробную часть. Таким образом . Далее записываем показатель степени двойки. При этом нужно учитывать, что эта степень может быть как отрицательной так и положительной. Для этого показатель степени имеет вид: ,где
– количество бит на показатель степени двойки. В результате число представимо в виде:Рисунок 4.
В завершении описания представления вещественных чисел нужно отметить, что для стандартных типов данных (float и double) имеют место следующие значения:
Таблица 1.
Тип | Минимальный порядок* | Максимальный порядок | Число значащих знаков |
float | – 45 | 38 | 7 |
double | – 323 | 308 | 15 |
(*) Стоит отметить, что мантисса может быть ненормализованной, что и приводит к таким значениям минимального порядка.
4. Идентификация оборудования и программного окружения
Средствами операционной системы Windows можно узнать достаточно много информации об оборудовании, памяти (функция GlobalMemoryStatus), жёстких дисках (функция GetDiskFreeSpace), сети и мониторе (функция GetSystemMetrics при различных параметрах), программном окружении (функции GetComputerName и GetUserName) и о многом другом. Подробное описание функций и примеры их использования можно найти в справочной системе MSDN.
Для определения таких параметров процессора, как фирма производитель, наличие расширений, количества и параметров кэшей команд и данных, TLB и других параметров в случае архитектур x86 используется инструкция процессора cpuid, которая имеет интерфейс на языке С/С++ __cpuid. Так для определения идентификатора процессора имеет место следующий код:
#include <intrin.h> // подключение описания функции __cpuid
…
int CPUInfo[4];
char CPUString[32];
__cpuid(CPUInfo, 0);
memset(CPUString, 0, sizeof(CPUString));
*((int*)CPUString) = CPUInfo[1];
*((int*)(CPUString+4)) = CPUInfo[3];
*((int*)(CPUString+8)) = CPUInfo[2];
printf(" CPU vendor: %s\n",CPUString);
…
Первый параметр функции __cpuid – 4-х элементный целочисленный массив, который соответствует регистрам eax, ebx, ecx, edx после выполнения инструкции. Второй параметр функции – номер функции инструкции. Подробная информация о номерах функций инструкции cpuid и содержимом регистров приведена в документах [1,2] для процессоров Intel и AMD. Так например с помощью функций 0x80000002, 0x80000003, 0x80000004 можно узнать полное название процессора.
Задание.
1. В соответствии с вариантом задания записать представление целого числа в типе char и вещественного числа в типе float (Обязательное задание – 5 баллов).
2. С помощью функций WinAPI определить информацию об оперативной памяти (Дополнительное задание – 1 балл).
3. С помощью функций WinAPI определить информацию о памяти на одном из жёстких дисков (Дополнительное задание – 2 балла).