Порядок выполнения и написания работ
Порядок выполнения работ
Изучить базовый принцип работы с технологией параллельных вычислений
Подробнее про технологии (мануалы, туториалы и ссылки на установку SDK) можно найти в материалах.
Отправить работу на проверку и получить обратную связь по ней
Правила отправки работ на проверку.
Если вы сомневаетесь, видна ли работы со стороны проверяющего, напишите ему в лс.
Получить результат проверки
Если полученный результат устраивает, то готовиться к защите (если за работу не меньше допустимомго минимума) – переход в п.5;
Если балл меньше минимума/желаемого значения, то нужно доделывать работу и заново её отправлять на проверку – переход в п.3;
В случае получения бана – переход в п.2 по другим работам курса.
За плагиат кода будет бан 0 баллов без защиты. Возможно также начисление отрицательных баллов.
Отчёт
В отчёте указываются значимые характеристики тестового стенда (своего ПК) и результаты тестирования на скорость/точность вычислений.
Отчёт оформляется в файле REPORT.md, лежащем в корне репозитория.
На защите помимо теоретических аспектов будут обсуждаться результаты замеров (то есть отчётные материалы), так что перед защитой настоятельно рекомендуется осознать, что было намерено и почему результаты получились такими.
Результаты тестирования должны быть представлены как графики времени работы** при различных параметрах алгоритма. Примеры графиков перечислены ниже, выбирайте те, которые применимы к каждой работе:
при различных значениях числа потоков при одинаковом параметре
schedule
;при одинаковом значении числа потоков при различных параметрах
schedule
;с выключенным OpenMP и с включенным с 1 потоком;
при разных размерах входных данных время разных реализаций алгоритма.
** В данном случае имеется в виду время работы алгоритма без времени на считывание данных и вывод результат.
schedule(kind[, chunk_size])
- kind
может принимать значения из набора {static, dynamic}
, chunk_size
– 1 и несколько (5-6) других осмысленных значений (guided
по желанию).
В случае, когда в программе возникают параметры, влияющие на результат, показать время работы программы при различных значениях этого параметра.
Требования к работам
В лабораторных ожидается реализация алгоритма в 2 вариантах: функция, где никак не используется OpenMP, и функция, где OpenMP используется. В коде, отправляемом на проверку, необходимо оставить ту комбинацию параметров schedule
, которая, по вашему мнению, работает быстрее всего.
Во всех работах нельзя использовать reduction
, putenv("OMP_NUM_THREADS=5")
.
Аргументы программе передаются через командную строку:
lab0.exe [--help] \
< --input [fname] > \
< --output [fname] > \
< --no-omp | --omp-threads [num_threads | default] >
где:
lab0.exe
– имя исполняемого файла (в C/C++argv[0]
);--help
– команда вывода справки;--input [fname]
– имя входного файла;--output [fname]
– имя выходного файла;--no-omp | --omp-threads [num_threads | default]
– вариант запуска:--no-omp
– запуск однопоточной реализации без OpenMP;--omp-threads default
– запуск многопоточной версии (число потоков – по умолчанию);--omp-threads num_threads
– запуск многопоточной версии (число потоков задано явно, целое положительное значение).
Все результаты выводятся в файл, имя которого указано в аргументах командной строки. Вывод результатов в стандартный поток вывода вместо файла (если по заданию нужно записывать результат в файл) или в стандартный поток вывода ошибок вместо стандартного потока вывода приравнивается к непройденному тесту.
Выбор устройства для запуска OpenCL/CUDA/HIP
Реализация должна поддерживать возможность выбирать device (<номер_девайса>, индексация с 0), на котором будет работать kernel, следующим образом:
Берется весь список доступных девайсов и сортируется в порядке:
Дискретная(ые) видеокарта(ы)
dgpu
;Интегрированная видеокарта
igpu
;Процессор(ы)
cpu
;Все остальные девайсы из
all
.
Вместо dgpu
и igpu
может быть передано значениеgpu
, тогда отдельно разбираться дискретные или интегрированные видеокарты не нужно.
Затем девайс определяется по правилу:
если указан
--device-type
, то список фильтруется по указанному типу;если указан
--device-index
, тоindex
– номер устройства в списке девайсов (еслиindex
выходит за пределы числа доступных девайсов, то считаемindex = 0
)если указаны оба параметра, то сначала список фильтруется по типу, затем из него выбирается девайс по указанному индексу.
Пример: в конфигурации есть 2 дискретных GPU и 1 процессор.
Случай 1. Указан только --device-type dgpu
. Тогда кернел запускается на первой найденной дискретной GPU.
Случай 2. Указан только --device-index index
. Тогда при index = 0
кернел работает на первой найденной GPU, при index = 1
– на второй, при index = 2
– на cpu.
Случай 3. Указаны --device-type dgpu --device-index index
. Тогда при index = 0
кернел работает на первой найденной дискретной GPU, при index = 1
– на второй, при index = 2
– снова на первой дискретной GPU (аналогично index = 0
).
Случай 4. Указан --device-type igpu
. В таком случае пользователь должен увидеть сообщение об ошибке, т.к. интегрированных видеокарт в конфигурации нет и запускаться не на чем.
Случай 5. Указан --device-type all --device-index index
. Тогда при index = 0
кернел работает на первой найденной дискретной GPU, при index = 1
– на второй, при index = 2
– на процессоре, при index >= 3
– снова на первой дискретной GPU (аналогично index = 0
).
Last updated