Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Результаты экспериментов с технологией CUDA
Описание реализации Поставленная задача фильтрации была реализована двумя способами. Первый заключался в стандартном кодировании алгоритма на языке c++. Второй базируется на использовании технологии CUDA и кодировании на расширенном языке c++ специально для этой технологии. Особенность реализации на технологии CUDA заключается в том, что каждая подзадача алгоритма выполняется отдельным потоком на видеокарте. При этом все потоки асинхронны и не зависимы между собой. Каждая отдельная нить обращается к своему отдельному блоку памяти. Программа читает входные данные из файла, это описано в приложении Б, размер данных задается заранее. Также по выбору запускается фильтрация на процессоре, видеокарте, либо на том и другом с замером скорости работы. После данные сохраняются в файл, для каждого выбора отдельно. Программа с использованием технологии CUDA описана в приложении А, нужные методы для работы импортируются и запускаются из обычного.cpp файла. Поэтому переход на технологию CUDA практически не заметен. Рассмотрим последовательность действий алгоритма, все данные визуализированы в программе matlab. Для иллюстрации работы алгоритма рассмотрим фрагмент дефектограммы на (рис. 7). Рис. 7 Фрагмент исходных данных На нем представлен фрагмент полезного сигнала. Как было описано ранее, темно синий цвет соответствует сигналу с слабой амплитудой (нулевой), более светлый оттенок синего это слабые шумы, а яркий желтый сигнал с сильной амплитудой от болтовых стыков, головки и подошвы рельса. На первом этапе прохода по строкам матрицы удаляются слабые сигналы в подстроке размером 20 значений. Матрица в gpu разбивается на 180 блоков по количеству строк. Затем внутри каждого блока вся его длина разбивается по 20 значений. Получается одновременно 90000 потоков, каждый из которых работает со своей выборкой данных. Выборка не пересекается. Результат показан на (рис. 8). Рис. 8 Дефектограмма после 1го шага алгоритма На втором этапе прохода по строкам матрицы удаляются слабые сигналы в подстроке размером 200 значений. В этом случае разбиение схоже с первым этапом, только внутри каждого блока выборка уже больше, поэтому в целом получается 9000 потоков. Результат показан на (рис. 9). Рис. 9 Дефектограмма после 2го шага алгоритма На третьем этапе проход осуществляется по столбцам матрицы, при этом удаляются слабые сигналы в массиве размером 50 значений. Матрица разбивается по числу столбцов на 10000 блоков. Затем внутри каждый блок делится на 4. Итого получается 40000 потоков, где каждый работает со своей частью матрицы. Выборка не пересекается. Результат показан на (рис. 10). Рис. 10 Дефектограмма после 3го шага алгоритма На четвертом этапе проход осуществляется диагональной матрицей, при этом удаляются слабые сигналы, которые не образуют связной наклонной линии. Матрица внутри gpu разбивается на 500 блоков, размер каждого блока 180 строк и 20 столбцов. Результат показан на (рис. 11). Рис. 11 Дефектограмма после 4го шага алгоритма На финальном этапе алгоритма остаются наиболее выраженные связные наборы сигналов. Результат фильтрации на CPU совпадает с представленными данными, разница заключается в скорости работы алгоритма. |
Последнее изменение этой страницы: 2019-03-20; Просмотров: 334; Нарушение авторского права страницы