Смекни!
smekni.com

Методические указания к лабораторным работам для студентов 1-го курса фпми составители (стр. 1 из 5)

Министерство образования и науки Российской Федерации

Новосибирский государственный технический университет

АРХИТЕКТУРА ЭВМ И ВС

Методические указания к лабораторным работам

для студентов 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&bsol;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 балла).