Порядок выполнения и написания работ

Порядок выполнения работ

1

Изучить базовый принцип работы с технологией параллельных вычислений

Подробнее про технологии (мануалы, туториалы и ссылки на установку SDK) можно найти в материалах.

2

Написать программу, решающую поставленную задачу

Прочитайте условие работы и задания. В условии будут указаны ограничения на язык и технологии, которые можно использовать.

3

Отправить работу на проверку и получить обратную связь по ней

Правила отправки работ на проверку.

Если вы сомневаетесь, видна ли работы со стороны проверяющего, напишите ему в лс.

4

Получить результат проверки

  1. Если полученный результат устраивает, то готовиться к защите (если за работу не меньше допустимомго минимума) – переход в п.5;

  2. Если балл меньше минимума/желаемого значения, то нужно доделывать работу и заново её отправлять на проверку – переход в п.3;

  3. В случае получения бана – переход в п.2 по другим работам курса.

5

Защитить работу

К защите работы иметь:

  1. исходный код программы;

  2. возможность запуска программы для демонстрации её работоспособности;

  3. загруженный отчёт.

Отчёт

В отчёте указываются значимые характеристики тестового стенда (своего ПК) и результаты тестирования на скорость/точность вычислений.

Отчёт оформляется в файле REPORT.md, лежащем в корне репозитория.

На защите помимо теоретических аспектов будут обсуждаться результаты замеров (то есть отчётные материалы), так что перед защитой настоятельно рекомендуется осознать, что было намерено и почему результаты получились такими.

Результаты тестирования должны быть представлены как графики времени работы** при различных параметрах алгоритма. Примеры графиков перечислены ниже, выбирайте те, которые применимы к каждой работе:

  1. при различных значениях числа потоков при одинаковом параметре schedule;

  2. при одинаковом значении числа потоков при различных параметрах schedule;

  3. с выключенным OpenMP и с включенным с 1 потоком;

  4. при разных размерах входных данных время разных реализаций алгоритма.

** В данном случае имеется в виду время работы алгоритма без времени на считывание данных и вывод результат.

schedule(kind[, chunk_size]) - kind может принимать значения из набора {static, dynamic}, chunk_size – 1 и несколько (5-6) других осмысленных значений (guided по желанию).

В случае, когда в программе возникают параметры, влияющие на результат, показать время работы программы при различных значениях этого параметра.

Требования к работам

В лабораторных ожидается реализация алгоритма в 2 вариантах: функция, где никак не используется OpenMP, и функция, где OpenMP используется. В коде, отправляемом на проверку, необходимо оставить ту комбинацию параметров schedule, которая, по вашему мнению, работает быстрее всего.

Аргументы программе передаются через командную строку:

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, следующим образом:

Берется весь список доступных девайсов и сортируется в порядке:

  1. Дискретная(ые) видеокарта(ы) dgpu;

  2. Интегрированная видеокарта igpu;

  3. Процессор(ы) cpu;

  4. Все остальные девайсы из 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