Валентин Арьков - Организация параллельных потоков. Часть 2
- Название:Организация параллельных потоков. Часть 2
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:2020
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Арьков - Организация параллельных потоков. Часть 2 краткое содержание
Параллельные программы нужны для того, чтобы использовать вычислительные мощности многоядерных процессоров и графических ускорителей. В данной работе мы рассмотрим технологию автоматической организации параллельных потоков для многоядерных вычислительных машин.
Организация параллельных потоков. Часть 2 - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Напомним, что нумерация элементов массива в языке программирования Си начинается с нуля. Таким образом, argv [0] — это имя запущенной программы (файла типа EXE), argv [1] — это первый аргумент (параметр) после имени файла и т. д.
Составим программу, которая читает параметры командной строки и выводит их на экран (рис. 5.3).
Вначале мы выводим на экран количество аргументов (строка 5). Это значение переменной argc.
Затем мы организуем цикл от 0 до (argc — 1)и выводим номер и значение аргументов. Для вывода строки символов на экран мы используем формат %s — от слова string — «строка».
Рис. 5.3. Чтение и вывод параметров
Запускаем программу из среды разработки
Ctrl + F5.
Рассматриваем результаты (рис. 5.4).
У нас один параметр командной строки.
Получается, что исполняемый файл был запущен на выполнение с указанием полного пути, включая имя диска и все каталоги.
Рис. 5.4. Запуск из среды разработки
Задание.Составьте программу (рис. 5.3) и запустите её из среды разработки.
Среда разработки позволяет нам проводить отладку программы (debugging) с передачей параметров командной строки.
Открываем свойства проекта:
Project — Properties.
В окне параметров проекта переходим к следующему пункту:
Configuration Properties — Debugging — Command Arguments — Edit(рис. 5.5).
Рис. 5.5. Аргументы командной строки
Далее в окне Command Argumentsвводим параметры, разделяя их пробелом (рис. 5.6).
Нажимаем OK.
Рис. 5.6. Ввод аргументов
Снова запускаем программу из среды разработки.
Теперь на экран выводятся все наши параметры (рис. 5.7).
Убеждаемся, что программа распознала параметры и вывела их на экран.
Удаляем наши параметры в свойствах проекта.
Рис. 5.7. Вывод параметров
Задание.Задайте несколько параметров командной строки для отладки и запустите программу из среды разработки.
Мы убедились, что программа работает.
Запустим её в командном окне.
Указываем несколько параметров через пробел и рассматриваем результаты (рис. 5.8).
Среди прочего, мы видим, было ли указано расширение имени фала при запуске программы.
Рис. 5.8. Вывод аргументов
Задание.Запустите программу в командном окне с несколькими аргументами и рассмотрите результаты.
5.3. Использование параметров
Мы научились читать параметры (аргументы) командной строки. Теперь разберёмся с тем, как делать «разбор» (parsing) этих строк. Нам нужно взять строку и «вытащить» из неё число.
Будем использовать функцию преобразования строки символов в целое число:
int atoi (const char *str).
Название функции atoiможно расшифровать так:
Convert «a» (string of symbols) to integer.
Текст программы приводится на рис. 5.9.
Мы возьмём первый параметр и преобразуем его в целое число (строка 4).
Затем выведем исходную строку символов (строка 5) и полученное число (строка 6).
В нашей программе мы не проверяем количество аргументов. Конечно же, в более серьёзных приложениях такая проверка нужна обязательно.
Рис. 5.9. Преобразование строки в целое число
Запускаем программу и проверяем разные входные значения (рис. 5.10).
Напомним, что целое число типа intхранится в виде 4 байтов. Соответственно можно оценить диапазон значений для целого числа со знаком. Максимальное значение — это 2 в 31-й степени, то есть чуть больше двух миллиардов.
При выходе за пределы возможных значений мы получаем минимальное и максимальное число соответственно:
— 2 31 … 2 31—1.
Рис. 5.10. Результаты преобразования
Задание.Проверьте, как преобразуются вводимые числа. Проверьте, что происходит при выходе за границы допустимых значений. Вычислите минимальное и максимальное значения с помощью Калькулятора — Calculator, переключив его в режим научных вычислений.
В наших опытах нам потребуется значение больше, чем два миллиарда. Для этого придётся использовать другой целый тип — long long(8 байт).
Немного изменим нашу программу (рис. 5.11).
Для преобразования строки символов в длинное целое тоже нужна другая функция с похожим названием:
long long atoll (const char *str).
Расшифровка названия:
Convert «a» (string of symbols) to long long integer.
Вывод на экран длинного целого тоже требует своего, особого формата:
%lld.
Рис. 5.11. Преобразование строки в длинное целое
Запускаем нашу новую программу с разными входными значениями (рис. 5.12).
Здесь мы тоже можем найти пределы, выше которых подняться не удаётся.
Результаты нас устраивают. Нам пока что такое большое число не грозит.
Рис. 5.12. Результаты преобразования
Задание. Составьте программу (рис. 5.11) и проверьте правильность её работы.
5.4. Управление циклом
Мы научились вводить число из командной строки. Теперь мы сможем управлять поведением программы, не изменяя исходный текст.
Возьмём нашу «большую задачу» параллельного суммирования из раздела 4 и немного её усложним (рис. 5.13).
Зададим число итераций цикла из командной строки (строка 11).
А программа пусть выводит на экран время расчётов (строка 25).
Рис. 5.13. Управление циклом из командной строки
Запускаем программу в командной строке и подбираем число итераций в цикле. Нам нужно получить приемлемое время выполнения программы — около 20 секунд. Затем запускаем программу несколько раз (рис. 5.14).
Тем временем следим за загрузкой ядер процессора. Должно быть 100%
Рис. 5.14. Четыре запуска
Задание.Составьте программу (рис. 5.13) и подберите приемлемое число итераций. Запустите программу несколько раз и обратите внимание на длительность решения задачи.
5.5. Анализ эффективности
У нас практически всё готово для анализа эффективности распараллеливания.
Напомним две основных характеристики распараллеливания:
— speedup — ускорение;
— efficiency — эффективность.
Формулы для вычисления этих показателей приводятся на рис. 5.15.
Рис. 5.15. Характеристики распараллеливания
Обозначения в формулах:
Т1 — время выполнения последовательной программы (на одном процессоре);
р — количество виртуальных процессоров, работающих параллельно при выполнении программы;
Тр — время выполнения параллельной программы на р процессорах;
Sp — ускорение вычислений на р процессорах;
Ep — эффективность параллельных вычислений на р процессорах.
Показатель ускорения говорит о том, во сколько раз быстрее работает параллельная программа. Можно сказать, что ускорение измеряется «в разах».
Ускорение вычислений не надо путать с ускорением в физике. В разделе «Механика» ускорение измеряется в квадратных метрах в секунду и отражает скорость изменения скорости движения.
Читать дальшеИнтервал:
Закладка: