Представление чисел. Использование SIMD-расширений x86. Функции замера времени. Куликов Игорь Михайлович
2 Представление чисел
3 Классификация простых типов данных Целочисленные типы данных – Размер данных (char, int, long) – Знаковый/без знаковый тип (unsigned, signed) Вещественные типы данных – Одинарная точность (float) – Двойная точность (double)
4 Целые числа без знака (unsigned char, unsigned int, unsigned long)
5 Целые числа со знаком (char, int, long) Структура целого числа со знаком
6 Целые числа со знаком (char, int, long)
7 Отрицательные целые числа со знаком Находим двоичное представление модуля числа Находим двоичное дополнение, то есть инвертируем все разряды числа Прибавляем единицу
8 Пример представления отрицательного числа -84
9 Структура вещественных типов данных
10 Представление числа в типе float
11 Представление числа в типе float
12 Структура типа double
13 Допустимые значения Целые числа – char – unsigned char – int – unsigned int Вещественные числа – float: порядок -38…38, значащие знаки 7 – double: порядок -308…308, значащие знаки 14
14 Использование SIMD-расширений x86
15 Векторные операции
16 SIMD (Single Instruction Multiple Data) SIMD-расширения (Single Instruction Multiple Data) были введены в архитектуру x86 с целью повышения скорости обработки потоковых данных. Основная идея заключается в одновременной обработке нескольких элементов данных за одну инструкцию.
17 SIMD (Single Instruction Multiple Data)
18 SIMD (Single Instruction Multiple Data) Арифметика с насыщением Для 8-битного без знакового целого x: обычная арифметика: x=254; x+=3; // результат x=1 арифметика с насыщением: x=254; x+=3; // результат x=255
19 Пример программы скалярного произведения с использованием функций SSE float dot(float *x,float *y,int n) { float sum; int i; __m128 *xx,*yy; __m128 p,s; xx=(__m128 *)x; yy=(__m128 *)y; s=_mm_set_ps1(0); for (i=0;i
20 SIMD – расширения основных процессоров и область применения SSE для процессоров Intel 3DNow! для процессоров AMD AltiVec для процессоров PowerPC от IBM Область применения: Мультимедиа приложения (видео, графика, звук, …)
21 Функции замера времени
22 Функция clock Библиотечная функция определена в заголовочном файле time.h Прототип clock_t clock(); Возвращает время, прошедшее с момента запуска программы в единицах 1/CLK_TCK секунды Используется в Windows
23 Пример использования функции clock #include int main() {double pi; clock_t t; t=clock(); // начало замера времени pi = pi_calculate(); t=clock()-t; // окончание замера времени printf("Time: %lf msec Pi = %lf\n",t*1000.0/CLK_TCK,pi); return 0; }
24 Достоинства и недостатки функции clock Достоинства: высокая платформенная независимость Недостатки: низкая точность, при высокой загрузке процессора – неприемлемая точность, так как измеряется интервал времени, во время которого помимо процесса исследуемой программы исполнялись и другие процессы
25 Функция gettimeofday Библиотечная функция определена в заголовочном файле sys\time.h Прототип int gettimeofday(struct timeval* tv, struct timezone* tz); Время можно вычислить из структуры timeval Используется в UNIX
26 Пример использования функции gettimeofday #include struct timeval tv1,tv2,dtv; struct timezone tz; void time_start() { gettimeofday(&tv1, &tz); } double time_stop() { gettimeofday(&tv2, &tz); dtv.tv_sec= tv2.tv_sec - tv1.tv_sec; dtv.tv_usec=tv2.tv_usec - tv1.tv_usec; if(dtv.tv_usec
27 Пример использования функции gettimeofday #include int main() {double pi; time_start(); // начало замера времени pi = pi_calculate(); // окончание замера времени printf("Time: %lf msec Pi = %lf\n",time_stop(),pi); return 0; }
28 Достоинства и недостатки функции gettimeofday Достоинства: высокая платформенная независимость Недостатки: низкая точность, при высокой загрузке процессора – неприемлемая точность, так как измеряется интервал времени, во время которого помимо процесса исследуемой программы исполнялись и другие процессы
29 Функция times Библиотечная функция определена в заголовочном файле sys/times.h Прототип clock_t times(struct tms *buf); Возвращает время, прошедшее с момента запуска программы в единицах 1/CLK_TCK секунды Используется в UNIX
30 Пример использования функции times #include struct tms tmsBegin,tmsEnd; void time_start() { times(&tmsBegin); } double time_stop() { times(&tmsEnd); return ((tmsEnd.tms_utime-tmsBegin.tms_utime)+ (tmsEnd.tms_stimetmsBegin.tms_stime))*1000.0/CLK_TCK; }
31 Пример использования функции times #include int main() {double pi; time_start(); // начало замера времени pi = pi_calculate(); // окончание замера времени printf("Time: %lf msec Pi = %lf\n",time_stop(),pi); return 0; }
32 Достоинства и недостатки функции times Достоинства: высокая точность (относительная независимость от других процессов системы) Недостатки: для малых интервалов она зависит от интервала времени прерываний по таймеру
33 Функции QueryPerformanceFrequency и QueryPerformanceCounter Платформенно-зависимый вариант для OS Windows как функция WinAPI Возвращает число тактов с момента запуска процессора Используется в Windows
34 #include int main() { LARGE_INTEGER b_start,b_stop,b_time,freq; double time, pi; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&b_start); pi = pi_calculate(); QueryPerformanceCounter(&b_stop); b_time.QuadPart = b_stop.QuadPart - b_start.QuadPart; time = (double)(b_time.QuadPart)/(double)(freq.QuadPart); printf("Time: %lf sec Pi = %lf\n",time,pi); return 0; } Функции QueryPerformanceFrequency и QueryPerformanceCounter
35 Достоинства: максимально возможная точность Недостатки: зависимость от архитектуры процессора ухудшение точности при высокой загрузке процессора Функции QueryPerformanceFrequency и QueryPerformanceCounter
36 Лабораторные работы Использование SIMD-расширений архитектуры x86 (10 баллов) Использование оптимизирующего компилятора (10 баллов) Исследование вопросов тестирования производительности (20 баллов) Программирование многоядерных архитектур (40 баллов)
37 Выполнение лабораторных работ Первая контрольная неделя – 2 балла: сдана и защищена первая л.р., сдана вторая л.р. – 1 балл : сдана и защищена первая л.р. Вторая контрольная неделя – 2 балла : сданы и защищены первая, вторая и третья л.р. – 1 балл : сдана и защищена первая и вторая л.р. Зачёт – Претендент на автомат: 4 балла за К.Н., сданы и защищены все лабораторные работы – Допуск на зачёт: 51 балл за л.р. (следующая л.р. выполняется только после выполнение текущей)
38 Расписание консультаций Каждый понедельник начиная с 1 марта в 9:00 во 2-м корпусе, аудитория 418