УДК 621.391
РЕШЕНИЕ ПРОБЛЕМ ПРОИЗВОДИТЕЛЬНОСТИ ПРИ СИМУЛЯЦИИ
ПОЛЯРНЫХ КОДОВ1
*
Г. С. Тимофеев Научный руководитель - С. Г. Колесников
Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева Российская Федерация, 660037, г. Красноярск, просп. им. газеты «Красноярский рабочий», 31
E-mail: tlmOfeev.grigorij @gmail. com
Этап симуляции при разработке алгоритма помехоустойчивого кодирования информации полярными кодами играет важную роль. Он позволяет оценить эффективность алгоритма в различных условиях и принять решение о дальнейшем направлении работы. В работе описан опыт повышения производительности модели полярных кодов.
Ключевые слова: коды с коррекцией ошибок, полярные коды, симуляция полярных кодов SOLVING THE PERFORMANCE ISSUES OF POLAR CODES SIMULATION
G. S. Timofeev* Scientific supervisor - S. G. Kolesnikov
Reshetnev Siberian State University of Science and Technology 31, Krasnoyarskii rabochii prospekt, Krasnoyarsk, 660037, Russian Federation E-mail: t1m0feev.grigorij @gmail. com
The simulation stage during the polar coding algorithm development has an important role. It gives an ability to evaluate the algorithm's effectiveness in various conditions and make a decision on the future work direction. The paper describes the experience of improving the performance of the polar coding model.
Keywords: error correcting codes, polar codes, polar coding simulation.
Полярные коды занимают важное место в теории помехоустойчивого кодирования. Э. Арикан в работе [1] доказал, что полярные коды достигают пропускной способности канала, а так же отличаются простотой построения, кодирования и декодирования.
В процессе исследования полярных кодов был разработан симулятор полярных кодов в системах связи. Пакет разработан с использованием языка программирования Python 3 и получил название Python Polar coding. Основная цель разработки - изучение существующих распространенных алгоритмов полярных кодов, а также разработка новых алгоритмов декодирования полярных кодов и сравнение с существующими алгоритмами.
Основным недостатком первой версии пакета Python Polar coding оказалось высокое время симуляции. Было принято решение уделить большее внимание оптимизации при работе над второй версией.
На первом этапе был использован следующий подход: одна задача симуляции разбивается на несколько задач, выполняемых параллельно на нескольких ядрах процессора. Для решения этой задачи был использован модуль Concurrent.futures [2], входящий в состав
Работа выполнена при поддержке Фонда Содействия Инновациям, номер договора 13524ГУ/2018.
Актуальные проблемы авиации и космонавтики - 2020. Том 2
стандартной библиотеки языка Python 3. Это позволяет преобразовать одну задачу симуляции передачи X сообщений по каналу связи в T задач по симуляции передачи X/ T сообщений в каждой.
На втором этапе была добавлена поддержка динамической компиляции участков кода, отвечающих за математические расчеты. К таким участкам кода относятся операции модуляции и демодуляции, наложения шума в канале связи, а также кодирования и декодирования. Для этого был использован модуль Numba [3]. При первом запуске программы, динамически компилируемые участки кода на Python компилируются в байт-код, который выполняется при втором и последующих запусках. Этот вариант хорошо подходит для многократно выполняемых симуляций передачи сообщения по каналу связи.
Перейдем к оценке результатов оптимизации работы пакета Python Polar coding. В табл. 1 представлены параметры системы, на которой осуществлялась оценка производительности. В табл. 2 представлены параметры модели канала связи, которая использовалась для оценки.
Таблица 1
Параметры системы
Наименование CPU Intel Core i7-3820 Sandy Bridge-E
Количество ядер 4
Тактовая частота, МГц 3600
Объем оперативной памяти, ГБ 16
Таблица 2
Параметры модели канала связи
Количество сообщений 1000
Количество повторений симуляции 100
Модуляция BPSK
Отношение Сигнал/Шум в канале, дБ 2,5
Канал AWGN
Длина кодового слова К, бит 1024
Длина информационного сообщения К, бит 512
Конструктивное отношение Сигнал/Шум, дБ 2,5
Для симуляции использованы алгоритмы декодирования полярных кодов Fast SSC [4] и Generalized Fast SSC с параметром AF = 3 [5]. Данные алгоритмы лежат в основе ряда используемых на сегодняшний день списочных и стековых алгоритмов декодирования.
749.0±0,010 Е
О
378.5±0.010 5
О
210.0±0.009 5
£ No. " Fasts С (1024, 512) <5 _ Т ras:SC (1024, с ' 2)
198.7±0.007 S
О
182.5+0.009 5
О
9.75^=0.007
О
5.02±0.010 S
О
4.32±0.006З
4.39±0.005 S
12 3 4 5 6 7
№ of Parallel processes
Рис. 1. Среднее время симуляции кодированного канала связи с Fast SSC декодером полярных кодов
1000
еоо.о±о.оо5 s
q No JIT G FastSC 3(1024, 512: О J TG FastSC 3(1024 512)
453.04:0.013 5
• 262.5i0.030 s О о
235. 54:0.007 s 210.04:0.006 s
Ш 18.40±0.091 s 10
О
9.434:0.011 s
О
5.15±0.012 s
1 2 3 4 5
№ of Parallel processes
Рис. 2. Среднее время симуляции кодированного канала связи с Generalized Fast SSC декодером полярных кодов
5.034:0.022 S
4.54±0.015 S
6 7 8
На рис. 1 и 2 представлены графики времени симуляции канала связи с заданными параметрами с использованием различного числа параллельных процессов и выключенной/включенной динамической компиляцией кода.
По результатам исследования можно сделать следующие выводы:
1. Разбиение задачи симуляции канала связи на X параллельных задач ведет к увеличению скорости симуляции, близкому к кратному в том случае, когда число параллельных задач T < C, где С - количество ядер CPU в системе. При дальнейшем увеличении T прирост является незначительным.
2. Применение динамической компиляции участков кода, отвечающих за математические расчеты, дает увеличение скорости работы в 50-55 раз при любом числе параллельных задач симуляции X.
Дальнейшим направлением в работе по увеличению производительности симуляции канала связи в пакете Python Polar Coding является использование GPU для вычислений.
Библиографические ссылки
1. Arikan E. Channel polarization: A method for constructing capacity-achieving codes for symmetric binary-input memoryless channels // IEEE Transactions on Information Theory, 2009, Vol. 55, No. 7, P. 3051-3073.
2. Python 3 documentation [Электронный ресурс]: Concurrent.futures — Launching parallel tasks. URL: https://docs.python.org/3/library/concurrent.futures.html (дата обращение: 24.04.2020).
3. Numba documentation [Электронный ресурс]: A High Performance Python Compiler. Anaconda, 2020. URL: http://numba.pydata.org/ (дата обращение: 21.04.2020).
4. G. Sarkis, P. Giard, A. Vardy. Fast polar decoders: Algorithm and implementation // IEEE J. Sel. Areas Commun., 2014, Vol. 32, No. 5, P. 946-957.
5. C. Condo, V. Bioglio, I. Land. Generalized Fast Decoding of Polar Codes // IEEE Global Communications Conference (GLOBECOM), 2018, P 885-896.
© Тимофеев Г. С., 2020