Министерство образования и науки Российской Федерации
Новосибирский государственный технический университет
АРХИТЕКТУРА ЭВМ И ВС
Методические указания к лабораторным работам
для студентов 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 в языках С/С++). Для записи числа
Рисунок 1.
2. Представление знаковых целых чисел
В случае знаковых типов данных старший бит отвечает за знак числа (1 – отрицательное число, 0 – положительное число). Основной проблемой является представление отрицательных чисел. Для такого представления существует следующий алгоритм:
1. нахождение двоичного представления модуля числа,
2. нахождение двоичного дополнения числа,
3. прибавление единицы.
Рассмотрим алгоритм на примере. Представим число
1. Двоичное представление
2. Для нахождения двоичного представления инвертируем все биты числа
3. Прибавляем единицу
После этого записываем полученные значения в соответствующие биты:
Рисунок 2.
3. Представление вещественных чисел
Основной интерес в вычислениях представляют вещественные типы данных и погрешности округления, связанные с ними. По стандарту IEEE 754 вещественное число
Рисунок 3.
Где
Приведём пример представления вещественного числа
где
Рисунок 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 балла).