Скачать презентацию Представление чисел Использование SIMD-расширений x 86 Функции замера Скачать презентацию Представление чисел Использование SIMD-расширений x 86 Функции замера

d56102755c31ac350f20fa859aa250b9.ppt

  • Количество слайдов: 38

Представление чисел. Использование SIMD-расширений x 86. Функции замера времени. Куликов Игорь Михайлович kulikov@ssd. sscc. Представление чисел. Использование SIMD-расширений x 86. Функции замера времени. Куликов Игорь Михайлович kulikov@ssd. sscc. ru

Представление чисел 2 Представление чисел 2

Классификация простых типов данных l Целочисленные типы данных – – l Вещественные типы данных Классификация простых типов данных l Целочисленные типы данных – – l Вещественные типы данных – – 3 Размер данных (char, int, long) Знаковый/без знаковый тип (unsigned, signed) Одинарная точность (float) Двойная точность (double)

Целые числа без знака (unsigned char, unsigned int, unsigned long) 4 Целые числа без знака (unsigned char, unsigned int, unsigned long) 4

Целые числа со знаком (char, int, long) Структура целого числа со знаком 5 Целые числа со знаком (char, int, long) Структура целого числа со знаком 5

Целые числа со знаком (char, int, long) 6 Целые числа со знаком (char, int, long) 6

Отрицательные целые числа со знаком Находим двоичное представление модуля числа l Находим двоичное дополнение, Отрицательные целые числа со знаком Находим двоичное представление модуля числа l Находим двоичное дополнение, то есть инвертируем все разряды числа l Прибавляем единицу l 7

Пример представления отрицательного числа -84 8 Пример представления отрицательного числа -84 8

Структура вещественных типов данных 9 Структура вещественных типов данных 9

Представление числа 0. 15625 в типе float 10 Представление числа 0. 15625 в типе float 10

Представление числа -118. 625 в типе float 11 Представление числа -118. 625 в типе float 11

Структура типа double 12 Структура типа double 12

Допустимые значения l Целые числа – – l Вещественные числа – – 13 char Допустимые значения l Целые числа – – l Вещественные числа – – 13 char -128. . . 127 unsigned char 0. . . 255 int -2147483648. . . 2147483647 unsigned int 0. . . 4294967295 float: порядок -38… 38, значащие знаки 7 double: порядок -308… 308, значащие знаки 14

Использование SIMD-расширений x 86 14 Использование SIMD-расширений x 86 14

Векторные операции 15 Векторные операции 15

SIMD (Single Instruction Multiple Data) SIMD-расширения (Single Instruction Multiple Data) были введены в архитектуру SIMD (Single Instruction Multiple Data) SIMD-расширения (Single Instruction Multiple Data) были введены в архитектуру x 86 с целью повышения скорости обработки потоковых данных. Основная идея заключается в одновременной обработке нескольких элементов данных за одну инструкцию. 16

SIMD (Single Instruction Multiple Data) 17 SIMD (Single Instruction Multiple Data) 17

SIMD (Single Instruction Multiple Data) Арифметика с насыщением Для 8 -битного без знакового целого SIMD (Single Instruction Multiple Data) Арифметика с насыщением Для 8 -битного без знакового целого x: l обычная арифметика: x=254; x+=3; // результат x=1 l арифметика с насыщением: x=254; x+=3; // результат x=255 18

Пример программы скалярного произведения с использованием функций SSE 19 float dot(float *x, float *y, Пример программы скалярного произведения с использованием функций SSE 19 float dot(float *x, float *y, int n) { float sum; int i; __m 128 *xx, *yy; __m 128 p, s; xx=(__m 128 *)x; yy=(__m 128 *)y; s=_mm_set_ps 1(0); for (i=0; i

SIMD – расширения основных процессоров и область применения l l l SSE для процессоров SIMD – расширения основных процессоров и область применения l l l SSE для процессоров Intel 3 DNow! для процессоров AMD Alti. Vec для процессоров Power. PC от IBM Область применения: l Мультимедиа приложения (видео, графика, звук, …) 20

Функции замера времени 21 Функции замера времени 21

Функция clock l l 22 Библиотечная функция определена в заголовочном файле time. h Прототип Функция clock l l 22 Библиотечная функция определена в заголовочном файле time. h Прототип clock_t clock(); Возвращает время, прошедшее с момента запуска программы в единицах 1/CLK_TCK секунды Используется в Windows

Пример использования функции clock #include <stdio. h> #include <time. h> int main() { double Пример использования функции clock #include #include int main() { double pi; clock_t t; t=clock(); // начало замера времени pi = pi_calculate(); t=clock()-t; // окончание замера времени printf("Time: %lf msec Pi = %lfn", t*1000. 0/CLK_TCK, pi); return 0; } 23

Достоинства и недостатки функции clock l Достоинства: ü l Недостатки: ü 24 высокая платформенная Достоинства и недостатки функции clock l Достоинства: ü l Недостатки: ü 24 высокая платформенная независимость низкая точность, при высокой загрузке процессора – неприемлемая точность, так как измеряется интервал времени, во время которого помимо процесса исследуемой программы исполнялись и другие процессы

Функция gettimeofday l l Библиотечная функция определена в заголовочном файле systime. h Прототип gettimeofday(struct Функция gettimeofday l l Библиотечная функция определена в заголовочном файле systime. h Прототип gettimeofday(struct timeval* tv, struct timezone* tz); l l 25 Время можно вычислить из структуры timeval Используется в UNIX int

Пример использования функции gettimeofday #include <sys/time. h> struct timeval tv 1, tv 2, dtv; Пример использования функции gettimeofday #include struct timeval tv 1, tv 2, dtv; struct timezone tz; void time_start() { gettimeofday(&tv 1, &tz); } double time_stop() { gettimeofday(&tv 2, &tz); dtv. tv_sec= tv 2. tv_sec - tv 1. tv_sec; dtv. tv_usec=tv 2. tv_usec - tv 1. tv_usec; if(dtv. tv_usec<0) { dtv. tv_sec--; dtv. tv_usec+=1000000; } return dtv. tv_sec*1000. 0+dtv. tv_usec/1000. 0; } 26

Пример использования функции gettimeofday #include <stdio. h> int main() { double pi; time_start(); // Пример использования функции gettimeofday #include int main() { double pi; time_start(); // начало замера времени pi = pi_calculate(); // окончание замера времени printf("Time: %lf msec Pi = %lfn", time_stop(), pi); return 0; } 27

Достоинства и недостатки функции gettimeofday l Достоинства: ü l Недостатки: ü 28 высокая платформенная Достоинства и недостатки функции gettimeofday l Достоинства: ü l Недостатки: ü 28 высокая платформенная независимость низкая точность, при высокой загрузке процессора – неприемлемая точность, так как измеряется интервал времени, во время которого помимо процесса исследуемой программы исполнялись и другие процессы

Функция times l l 29 Библиотечная функция определена в заголовочном файле sys/times. h Прототип Функция times l l 29 Библиотечная функция определена в заголовочном файле sys/times. h Прототип clock_t times(struct tms *buf); Возвращает время, прошедшее с момента запуска программы в единицах 1/CLK_TCK секунды Используется в UNIX

Пример использования функции times #include <sys/times. h> #include <time. h> struct tms. Begin, tms. Пример использования функции times #include #include struct tms. Begin, tms. End; void time_start() { times(&tms. Begin); } double time_stop() { times(&tms. End); return ((tms. End. tms_utime-tms. Begin. tms_utime)+ (tms. End. tms_stimetms. Begin. tms_stime))*1000. 0/CLK_TCK; } 30

Пример использования функции times #include <stdio. h> int main() { double pi; time_start(); // Пример использования функции times #include int main() { double pi; time_start(); // начало замера времени pi = pi_calculate(); // окончание замера времени printf("Time: %lf msec Pi = %lfn", time_stop(), pi); return 0; } 31

Достоинства и недостатки функции times l Достоинства: ü l Недостатки: ü 32 высокая точность Достоинства и недостатки функции times l Достоинства: ü l Недостатки: ü 32 высокая точность (относительная независимость от других процессов системы) для малых интервалов она зависит от интервала времени прерываний по таймеру

Функции Query. Performance. Frequency и Query. Performance. Counter l l l 33 Платформенно-зависимый вариант Функции Query. Performance. Frequency и Query. Performance. Counter l l l 33 Платформенно-зависимый вариант для OS Windows как функция Win. API Возвращает число тактов с момента запуска процессора Используется в Windows

Функции Query. Performance. Frequency и Query. Performance. Counter #include <stdio. h> #include <windows. h> Функции Query. Performance. Frequency и Query. Performance. Counter #include #include int main() { LARGE_INTEGER b_start, b_stop, b_time, freq; double time, pi; Query. Performance. Frequency(&freq); Query. Performance. Counter(&b_start); pi = pi_calculate(); Query. Performance. Counter(&b_stop); b_time. Quad. Part = b_stop. Quad. Part - b_start. Quad. Part; time = (double)(b_time. Quad. Part)/(double)(freq. Quad. Part); printf("Time: %lf sec Pi = %lfn", time, pi); return 0; } 34

Функции Query. Performance. Frequency и Query. Performance. Counter l Достоинства: ü l Недостатки: ü Функции Query. Performance. Frequency и Query. Performance. Counter l Достоинства: ü l Недостатки: ü ü 35 максимально возможная точность зависимость от архитектуры процессора ухудшение точности при высокой загрузке процессора

Лабораторные работы l l 36 Использование SIMD-расширений архитектуры x 86 (10 баллов) Использование оптимизирующего Лабораторные работы l l 36 Использование SIMD-расширений архитектуры x 86 (10 баллов) Использование оптимизирующего компилятора (10 баллов) Исследование вопросов тестирования производительности (20 баллов) Программирование многоядерных архитектур (40 баллов)

Выполнение лабораторных работ l l l 37 Первая контрольная неделя – 2 балла: сдана Выполнение лабораторных работ l l l 37 Первая контрольная неделя – 2 балла: сдана и защищена первая л. р. , сдана вторая л. р. – 1 балл : сдана и защищена первая л. р. Вторая контрольная неделя – 2 балла : сданы и защищены первая, вторая и третья л. р. – 1 балл : сдана и защищена первая и вторая л. р. Зачёт – Претендент на автомат: 4 балла за К. Н. , сданы и защищены все лабораторные работы – Допуск на зачёт: 51 балл за л. р. (следующая л. р. выполняется только после выполнение текущей)

Расписание консультаций l 38 Каждый понедельник начиная с 1 марта в 9: 00 во Расписание консультаций l 38 Каждый понедельник начиная с 1 марта в 9: 00 во 2 -м корпусе, аудитория 418