Tamkovich.com: Телеком/VoIP блог
Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys
Оптимизация кодеков Asterisk с помощью CUDA
25 января, 2009 by Сергей Тамкович
Asterisk, Железо CUDA, nVidia, TeslaCUDA — это архитектура параллельных вычислений общего назначения. CUDA позволяет разгрузить Центральный процессор, за счет выполнения части задач на Графических Процессорах nVidia (на сегодня продано более 100 миллионов CUDA-совместимых процессоров). Кроме того что бы задействовать GPU с видеокарты компьютера, можно установить себе одну или несколько плат Tesla C1060 (~1600$/шт). Данное устройство обладает внушительными характеристиками: 240 ядер работающих на частоте 1.3GHz, 4GB GDDR3 на частоте 800Mhz, пиковая производительность — 933 MFLOPS.
CUDA была тепло встречена производителями программного обеспечения. На сегодня, список ПО, поддерживающего CUDA, выглядит весьма внушительно. В нем можно найти такие названия как: CoreAVC, LabVIEW, MatLab и т.д. Глядя на эти имена и на специфику задач решаемых с помощью CUDA, возникает вопрос: а какая польза от этой технологии могла бы быть для Asterisk? Ответ очевиден — кодеки.
Данным вопросом задавался не только я и, соответственно, к очевидному ответу пришел тоже не я один. Первого января этого года, Joseph Benden из Thralling Penguin LLC, опубликовал в списке рассылки asterisk-dev отчет о своём исследовании. Данный отчет хорошо написан и отформатирован. В результате проделанной работы, автор приходит к выводу о том, что CUDA не подходит для оптимизации кодеков в Asterisk.
Не хочу вдаваться в технические подробности, хочу лишь обратить внимание на несколько досадных недочетов, которые не позволяют воспринимать выводы этого письма всерьез.
Неудачный выбор кодеков. В проведенном исследовании, Joseph Benden пытался с помощью CUDA оптимизировать преобразования ulaw <-> slin. Конечно, это делать никто не запрещает, однако судить по этой паре обо всех остальных кодеках, по меньшей мере, абсурдно. На моем не самом новом Intel(R) Celeron(R) CPU 3.06GHz 256 KB Cache, таблица перекодировок выглядит вот так:
*CLI> core show translation Translation times between formats (in microseconds) for one second of data Source Format (Rows) Destination Format (Columns) ulaw alaw g726aal2 adpcm slin lpc10 ulaw - 1 1002 2 1 3001 alaw 1 - 1002 2 1 3001 slin 1 1 1001 1 - 3000
т.е. на преобразования 1 секунды ulaw <-> slin тратится 1 микросекунда (0.000001 секунды) времени устаревшего процессора. Оценивать величины времени измеряемые в микросекундах — неблагодарное занятие.
Отсутствуют какие-либо цифры. В письме нет ни одной цифры: сколько была задержка на перекодировку в «ванильной» версии Asterisk, сколько стала после внедрения CUDA. Как вел себя график загрузки процессора без CUDA, как ведёт себя с ней. Отпрофайлить кодеки так же не помешало бы. Предметно разговаривать без цифр нельзя. Слова, не подтвержденные цифрами — гипотетические рассуждения
Отсутствует методика. Для проведения каких-либо сравнений, необходимо определить и описать методику этих сравнений. А именно: по каким критериям сравниваем, какие условия сравнения и т.п. Ничего этого конечно же нет. Есть только рассуждения не подкрепленные цифрами о том, что CUDA не подойдет для всех кодеков, потому что не подходит для пары ulaw <-> slin.
|
Asterisk, Железо CUDA, nVidia, Tesla