Научная статья на тему 'Повышение эффективности использования аппаратных ресурсов ЭВМ при вычислении частотно-временной корреляционной функции'

Повышение эффективности использования аппаратных ресурсов ЭВМ при вычислении частотно-временной корреляционной функции Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
391
92
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ЦИФРОВАЯ ОБРАБОТКА СИГНАЛОВ / БЫСТРОЕ ПРЕОБРАЗОВАНИЕ ФУРЬЕ / ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР / ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА / ЧАСТОТНО-ВРЕМЕННАЯ КОРРЕЛЯЦИОННАЯ ФУНКЦИЯ / АЛГОРИТМ КУЛИ-ТЬЮКИ / ПОТОК / ИТЕРАЦИЯ / БИТ-РЕВЕРСИРОВАНИЕ / ПЛАНИРОВЩИК ЗАДАЧ МЕЖДУ ПОТОКАМИ / DIGITAL SIGNAL PROCESSING / FAST FOURIER TRANSFORM / CENTRAL PROCESSOR / PARALLEL PROCESSING / MULTI-CORE PROCESSOR SYSTEM / TIME-FREQUENCY CORRELATION FUNCTION / ALGORITHM COOLEY-TUKEY / THREAD / ITERATION / BIT-REVERSAL / SCHEDULER BETWEEN THREADS

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Аврамчук Валерий Степанович, Лунева Елена Евгеньевна, Черемнов Александр Геннадьевич

Рассмотрены направления повышения эффективности использования многоядерных центральных процессоров ЭВМ при вычислении быстрого преобразования Фурье. Это преобразование является базовым в расчете частотно-временной корреляционной функции, которая, по сравнению с классической корреляционной функцией, позволяет повысить информативность проводимого анализа. Для вычисления частотно-временной корреляционной функции требуются значительные вычислительные затраты связанные с необходимостью многократного вычисления быстрого преобразования Фурье. В качестве алгоритма вычисления быстрого преобразования Фурье использован алгоритм Кули-Тьюки с фиксированным основанием два, который поддается эффективному распараллеливанию и является простым в реализации. Непосредственно перед вычислением быстрого преобразования Фурье использована операция бит-реверсирования входной последовательности данных. Для алгоритма вычисления частотно-временной корреляционной функции с использованием параллельных вычислений экспериментально получены данные, определяющие оптимальное количество итераций на каждое ядро центрального процессора в зависимости от размера выборки. Полученные данные позволили разработать специализированное программное обеспечение, обеспечивающее автоматический выбор эффективного количества подзадач при параллельной обработке данных; выбор последовательного или параллельного режима вычислений в зависимости от размера выборки, и количества частотных интервалов при расчете частотно-временной корреляционной функции.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Аврамчук Валерий Степанович, Лунева Елена Евгеньевна, Черемнов Александр Геннадьевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Increasing the efficiency of using hardware resources for time-frequency correlation function computation

In the article the techniques efficient using of multi-core processors for the task of calculating the fast Fourier transform. The fast Fourier transform is led on the basis of calculating a time time-frequency correlation function. The time-frequency correlation function allows increasing the information content of the analysis as compared with the classic correlation function. The significant computational capabilities are required to calculate the time-frequency correlation function because of the necessity of multiple computing fast Fourier transform. For computing the fast Fourier transform is used Cooley-Tukey algorithm with fixed base two, which lends itself to efficient parallelization and is simple to implement. Immediately before the fast Fourier transform computation the procedure of bit-reversing the input data sequence is used. For algorithm of calculating the time-frequency correlation function using parallel computing the data defining the optimal number of iterations for each core of the CPU, depending on the sample size was experimentally obtained. The results of experiments allow developing the special software that enables automatic selection of an effective amount of sub parallel processing of data, also the choice of sequential or parallel computations mode, depending on the sample size and the number of frequency intervals in the calculation of time-frequency correlation function.

Текст научной работы на тему «Повышение эффективности использования аппаратных ресурсов ЭВМ при вычислении частотно-временной корреляционной функции»

УДК 519.6:004.93

05.13.01 - Системный анализ управление и обработка информации (в промышленности)

05.13.11 - Математическое обеспечение вычислительных машин, комплексов и компьютерных сетей

Аврамчук Валерий Степанович

Национальный исследовательский Томский Политехнический Университет

Россия, Томск Кандидат технических наук, доцент E-Mail: [email protected]

Лунева Елена Евгеньевна

Национальный исследовательский Томский Политехнический Университет

Россия, Томск Кандидат технических наук, доцент E-Mail: [email protected]

Черемнов Александр Г еннадьевич

Национальный исследовательский Томский Политехнический Университет

Россия, Томск Студент

E-Mail: [email protected]

Повышение эффективности использования аппаратных ресурсов ЭВМ при вычислении частотно-временной корреляционной функции

Аннотация: Рассмотрены направления повышения эффективности использования многоядерных центральных процессоров ЭВМ при вычислении быстрого преобразования Фурье. Это преобразование является базовым в расчете частотно-временной корреляционной функции, которая, по сравнению с классической корреляционной функцией, позволяет повысить информативность проводимого анализа. Для вычисления частотно-временной корреляционной функции требуются значительные вычислительные затраты связанные с необходимостью многократного вычисления быстрого преобразования Фурье. В качестве алгоритма вычисления быстрого преобразования Фурье использован алгоритм Кули-Тьюки с фиксированным основанием два, который поддается эффективному распараллеливанию и является простым в реализации. Непосредственно перед вычислением быстрого преобразования Фурье использована операция бит-реверсирования входной последовательности данных. Для алгоритма вычисления частотно-временной корреляционной функции с использованием параллельных вычислений экспериментально получены данные, определяющие оптимальное количество итераций на каждое ядро центрального процессора в зависимости от размера выборки. Полученные данные позволили разработать специализированное программное обеспечение, обеспечивающее автоматический выбор эффективного количества подзадач при параллельной обработке данных; выбор последовательного или параллельного режима вычислений в зависимости от размера выборки, и количества частотных интервалов при расчете частотно-временной корреляционной функции.

Ключевые слова: Цифровая обработка сигналов; быстрое преобразование Фурье; центральный процессор; параллельная обработка; частотно-временная корреляционная функция; алгоритм Кули-Тьюки; поток; итерация; бит-реверсирование; планировщик задач между потоками.

Идентификационный номер статьи в журнале 26TVN613

Valeriy Avramchuk

Tomsk Polytechnic University Russia, Tomsk E-Mail: [email protected]

Elena Luneva

Tomsk Polytechnic University Russia, Tomsk E-Mail: [email protected]

Alexandr Cheremnov

Tomsk Polytechnic University Russia, Tomsk E-Mail: [email protected]

Increasing the efficiency of using hardware resources for time-frequency correlation function computation

Abstract: In the article the techniques efficient using of multi-core processors for the task of calculating the fast Fourier transform. The fast Fourier transform is led on the basis of calculating a time time-frequency correlation function. The time-frequency correlation function allows increasing

the information content of the analysis as compared with the classic correlation function. The

significant computational capabilities are required to calculate the time-frequency correlation function because of the necessity of multiple computing fast Fourier transform. For computing the fast Fourier transform is used Cooley-Tukey algorithm with fixed base two, which lends itself to efficient parallelization and is simple to implement. Immediately before the fast Fourier transform computation the procedure of bit-reversing the input data sequence is used. For algorithm of calculating the time-frequency correlation function using parallel computing the data defining the optimal number of iterations for each core of the CPU, depending on the sample size was

experimentally obtained. The results of experiments allow developing the special software that

enables automatic selection of an effective amount of sub parallel processing of data, also the choice of sequential or parallel computations mode, depending on the sample size and the number of frequency intervals in the calculation of time-frequency correlation function.

Keywords: Digital signal processing; fast Fourier transform; central processor, parallel processing; multi-core processor system; time-frequency correlation function, algorithm Cooley-Tukey; thread; iteration; bit-reversal; scheduler between threads.

Identification number of article 26TVN613

Введение

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

Одним из таких подходов является разработка узкоспециализированного архитектурного решения, учитывающего аппаратные особенности используемого вычислителя и системы в целом. Для многопроцессорных систем, в которых все вычисления выполняются центральным процессором (ЦП), добиться прироста производительности можно путем параллельного выполнения вычислительных процессов. Современные ЦП ЭВМ имеют от двух до восьми мощных вычислительных ядер (например, Intel Core i7-3930K 3.2GHz или AMD FX-8350 4.0GHz) и позволяют параллельно выполнять вычислительные задачи в рамках логических ядер или «нитей» [1, 2], число которых в два раза превышает количество физических ядер.

Для использования всех доступных нитей ЦП созданы специализированные технологии. Например, для достаточно известной среды разработки приложений Delphi разработан класс TThread, позволяющий разработчику создавать параллельные потоки и задавать приоритет их выполнения [3]. Корпорация Microsoft разработала инструментарий параллельного выполнения заданий ParallelExtensions (входит в состав Microsoft.NET Framework 4.5) [4]. Еще одним инструментом разработки параллельных вычислений является кроссплатформенная библиотека Intel® Threading Building Blocks (TBB), которая позволяет получить заметное увеличение производительности многоядерных ЦП Intel®. Функциональный набор классов и функций этой библиотеки позволяет создавать хорошо масштабируемые кроссплатформенные приложения [5]. Целью данной работы является исследование эффективности использования многоядерных ЦП ЭВМ при вычислении частотно-временной корреляционной функции.

Теоретический анализ

Корреляционный анализ сигналов в настоящее время применяется практически во всех областях науки и техники, таких как акустика, физика, экономика, биология, геология и т.д. При обработке больших массивов данных или при необходимости обработки в режиме, близком к реальному времени, используют быструю корреляцию, расчет которой основан на использовании теоремы о корреляции и быстрого преобразования Фурье (БПФ) [6]

K (г) = F[ F ( л, ) F *( Л, ) ;,

где F - прямое дискретное преобразование Фурье сигнала х., F - комплексносопряженное значение результатов прямого дискретного преобразования, F 1 - обратное дискретное преобразование Фурье.

Получаемые в результате расчета корреляционные функции не содержат информацию

о частотных свойствах сигнала. Указанного недостатка лишена частотно-временная корреляционная функция [6, 7], использование которой позволяет выявить в зашумленном сигнале периодические составляющие и определить их частоты, что, несомненно, позволяет повысить информативность проводимого анализа.

Реализация этого подхода заключается в предварительном разбиении произведения F(Xj)F (Xj) на m копий Mk, к = 0, m — 1, обнулении всего спектра кроме к -ой части. Результатом обратного преобразования Фурье каждой из этих копий является

корреляционная функция на соответствующих частотных участках. Вычисление этой функции осуществляется на основе следующих выражений:

к (Л, ^^,

Ы] =

^-1 [ Ык ] і

^ к 1 к +1 Р — <—-—<-------------

1 ’ “ ^п-1 1 ’

т 2 +1 т

0, иначе,

Рз = ^ (х )^ *( ^),

где х - дискретные отсчёты анализируемого сигнала, / = 0,1,..., 2п — 1,

1 = 0,1,...,2п—1 +1, к = 0,1,...,т — 1, т = 1,2,...,2п—1, п = 2,3,... .

Основным недостатком реализации рассмотренного подхода является увеличение числа операций преобразования Фурье.

В качестве алгоритма вычисления БПФ в работе использован алгоритм Кули-Тьюки [8, 9], с фиксированным основанием 2. Выбор этого алгоритма очевиден: он прост в реализации, обладает хорошей наглядностью и поддается эффективному распараллеливанию [9, 10]. Повышения эффективности вычисления БПФ можно добиться предварительной обработкой входных данных, а именно, выполнить операцию их бит-реверсирования (изменение порядка следования бит в двоичном представлении числа на противоположный) [11]. Преобразованию подвергаются только индексы элементов массива. В результате этого меняется порядок следования входных данных; численное значение элемента массива при этом остается неизменным. Пример выполнения бит-реверсирования для индексов восьми элементов приведён на рисунке 1 [9, 11].

Рис. 1. Пример выполнения бит-реверсирования

После обработки входных данных выполняется расчет БПФ. Процедура вычисления БПФ осуществляется в log(n) этапов [9, 10], где п - размер исходной выборки. На каждом этапе выполняется одна и та же процедура «Бабочка» [8]. Необходимо отметить, что цикл, выполняющий базовые операции алгоритма «бабочка», должен выполняться параллельно.

Экспериментальная часть

В качестве инструмента параллельных вычислений в данной работе использована кроссплатформенная библиотека Intel® TBB, на основе которой в среде разработки Visual C++ 2012 создано программное обеспечение. Выбор этой библиотеки объясняется использованием вычислительных систем на базе ЦП Intel®. Определение времени выполнения операции бит-реверсирования и «бабочки» осуществлено в Intel® VTune™ Amplifier XE 2013 (входит в состав среды разработки Intel_Parallel_Studio_XE_2013) [5]. В результате установлено, что время, затраченное на операцию бит-реверсирования, незначительно по сравнению со временем выполнения процедуры «бабочка». Для реализации параллельного вычисления БПФ использован шаблон библиотеки Intel TBB tbb::parallel_for. Распределение итераций между потоками определяет параметр «Grainsize». Планированием распределения итераций между потоками занимается специальный планировщик, предусмотренный библиотекой. Принцип распределения итераций по потокам в зависимости от параметра «Grainsize» следующий [5]:

1. если параметр «Grainsize» равен числу итераций, то все итерации будут выполнены в одном потоке;

2. если параметр «Grainsize» равен отношению общего числа итераций к числу вычислительных устройств (ядер ЦП), то каждый поток выполнит примерно одинаковое количество итераций. Слово «примерно» используется по той причине, что распределение данных между потоками происходит в динамическом режиме;

3. если «Grainsize» меньше отношения общего числа итераций к числу вычислительных устройств, то планировщик распределит итерации динамически. При этом какие-то потоки обработают большее количество итераций.

Определение оптимального числа подзадач или итераций осуществлено для вычисления частотно-временной корреляционной функции с числом копий m=1000 (операций БПФ). Размер выборки варьировался в пределах 4-262144 отсчётов. Экспериментальные исследования проведены на трех ЦП фирмы Intel®: Core™2 Quad Q6700, Xeon® 5160 и Core™ i5 750. Параметр «Grainsize» варьировался от 1 до 262144. Создание

экспериментального приложения осуществлено с использованием компилятора Visual C++ 2012. В созданном программном обеспечении реализованы два алгоритма вычисления БПФ: БПФ1 - без использования параллельных вычислений, БПФ2 - с использованием параллельных вычислений. В качестве примера в таблице 1 приведено время вычисления частотно-временной корреляционной функции на ЦП Core™2 Quad Q6700 и оптимальное значение параметра «Grainsize».

Анализируя полученные результаты, можно сделать вывод, что оптимальное значение параметра «Grainsize» лежит в диапазоне [1, z], где z - отношение общего числа итераций к числу вычислительных устройств. Такие значения параметра «Grainsize» можно объяснить следующим образом. Точное разделение числа итераций по количеству доступных потоков не позволяет получить оптимальный результат, т.к., например, при завершении одного из созданных потоков вычислительные мощности не будут задействованы в полном объеме.

Таблица 1

Результаты вычисления частотно-временной корреляционной функции при m = 1000

Intel Core 2 Quad - 4 вычислительных ядра, компилятор Visual C++ 2012

Размер выборки Время выполнения алгоритма БПФ1, t1, мс Время выполнения алгоритма БПФ2, t2, мс Grainsize t1/t2

4 0,3 0,5 4 0,5

8 0,8 1,2 8 0,7

16 2,3 2,7 16 0,9

32 6,0 6,1 32 1,0

64 14,5 14,1 64 1,0

128 34,3 29,7 64 1,2

256 79,1 55,3 64 1,4

512 182,2 96,2 128 1,9

1024 409,8 197,5 128 2,1

2048 913,0 373,9 512 2,4

4096 2020,1 740,9 512 2,7

8192 4413,5 1533,2 2048 2,9

16384 9575,5 3184,0 4096 3,0

32768 206650,0 6735,1 4096 30,7

65536 44580,0 14284,2 4096 3,1

131072 95814,1 30798,3 4096 3,1

262144 209964,1 68493,1 4096 3,1

На рисунке 2 представлено отношение времени выполнения реализации алгоритма БПФ1 (11) ко времени выполнения реализации алгоритма БПФ2 (12). По данным графиками видно, что время вычисления БПФ с использованием параллельных вычислений при малых выборках (до 256 элементов) для всех процессоров больше или равно времени выполнения алгоритма БПФ без использования параллельных вычислений. Это легко объяснить существенными затратами времени на создание потоков для параллельной обработки данных, а также, на синхронизацию кэш-памяти ЦП при параллельной работе ядер.

3.5

з

2.5 2 -

1.5 1 ■

0,5 0

Рис. 2. Зависимость отношения ti/t2 от размера выборки

На рисунках 3-4 приведено время вычисления частотно-временной корреляционной функции при да=1000 (операций БПФ) для алгоритмов БПФ1 и БПФ2. Полученные результаты подтверждают ранее сделанный вывод. Время вычисления частотно-временной корреляционной функции для ЦП Intel Xenon 5160 при размерах выборок более 2048 элементов значительно превышает время расчета рассмотренных ЦП. Данный факт может быть объяснен особенностью работы кэш-памяти процессора.

При реализации специализированного решения вычисления частотно-временной корреляционной были учтены данные особенности - для выборок менее 512 элементов

используется алгоритм без параллельных вычислений. При использовании параллельных вычислений количество подзадач выбирается экспериментально так, чтобы, с одной стороны, обеспечить хорошую масштабируемость решаемой задачи, а с другой - обеспечить рациональный расход вычислительных ресурсов на работу планировщика задач. График зависимости значения параметра «Gramsize» от размеров выборки для различных ЦП приведен на рисунке 5.

Рис. 3. Время вычисления частотно-временной корреляционной функции

(реализация алгоритма БПФ1)

Рис. 4. Время вычисления частотно-временной корреляционной функции

(реализация алгоритма БПФ2)

Рис. 5. График зависимости значения параметра «Отт^в» от размера выборки для

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

различных центральных процессоров

Выводы

На примере вычисления частотно-временной корреляционной функции исследована кроссплатформенная библиотека Ш;е1® ТВВ. Экспериментальным путем определены оптимальные значения параметра «Gramsize» для рассмотренных ЦП с различным количеством вычислительных ядер и размерами обрабатываемой выборки.

В общем случае эффективность использования технологии параллельной обработки на многопроцессорной системе зависит от числа вычислительных ядер ЦП и его архитектуры. Для небольших размеров выборок (менее 512 элементов) время вычисления БПФ сравнимо или меньше времени создания потоков. При параллельном вычислении БПФ количество подзадач для обработки каждым потоком выбирается в соответствии с полученными экспериментальными данными так, чтобы обеспечить хорошую масштабируемость вычисляемой задачи, и, в тоже время, обеспечить рациональный расход вычислительных ресурсов на работу планировщика задач между потоками.

Полученные данные позволили разработать специализированное программное обеспечение, обеспечивающее автоматический выбор эффективного количества подзадач при параллельной обработке данных; выбор последовательного или параллельного режима обработки данных в зависимости от размера выборки, и количества частотных интервалов частотно-временной корреляционной функции.

Созданное программное обеспечение учитывает архитектурные и технические особенности ЦП; позволяет минимизировать основной недостаток метода расчета частотновременной корреляционной функции.

ЛИТЕРАТУРА

1. Рихтер Д. CLR via C#. Программирование на платформе Microsoft.NET

Framework 4.0 на языке C#. 3-е изд. - СПб.: Питер, 2012. - 928 с.

2. Desktop 3rd generation Intel Core Processor Family [Электронный ресурс]. -

Режим доступа: http://www.intel.ru/content/www/ru/ru/processors/core/3rd-gen-

core-desktop-specification-update.html?wapkw=intel+core+i5-3570k+%D0%B8+i7-3770k - 02.02.2013.

3. Аврамчук В.С., Чан Вьет Тьяу. Частотно-временной корреляционный анализ цифровых сигналов // Известия Томского политехнического университета. -2009. -Т. 315. - № 5. - С. 112-115.

4. Архангельский А.Я. Приемы программирования в Delphi на основе VCL. - М.: Бином-Пресс, 2009. - 944 с.

5. Intel Threading Building Blocks (Intel® TBB) User Guide [Электронный ресурс]. -

Режим доступа:

http://software.intel.com/sites/products/documentation/doclib/tbb_sa/help/index.htm#t bb_userguide/title.htm - 02.10.2013.

6. Айфичер Э.С, Джервис Б.У. Цифровая обработка сигналов: практический подход. 2-е изд. - М.: Вильямс, 2008. - 992 c.

7. Способ спектрального анализа многочастотных периодических сигналов, представленных цифровыми отсчетами: пат. 2229140 Рос. Федерация. № 2003108753/28; заявл. 28.03.03; опубл. 20.05.04, Бюл. № 14. - 6 с.

8. H.V. Sorensen, C.S. Burrus, M.T. Heideman. Fast Fourier transform database. -Boston: PWS Publishing Co., 1995. - 175 p.

9. Нуссбаумер Г. Быстрое преобразование Фурье и алгоритмы вычисления свертки. - М.: Радио и связь, 1985. - 248 c.

10. Блейхут Р. Быстрые алгоритмы цифровой обработки сигналов. - М.: Мир, 1989. -448 с.

11. Smith S. The Scientist and Engineer's Guide to Digital Signal ProcessingK. В. [Электронный ресурс]. - Режим доступа: http://www.analog.com/static/imported-files/tech_docs/dsp_book_frontmat.pdf - 02.10.2013.

Рецензент: Берестнева Ольга Григорьевна, д.т.н., профессор, Национальный исследовательский Томский Политехнический Университет.

REFERENCES

1.

2.

3.

4.

5.

6.

7.

8.

9.

10. 11.

Rihter D. CLR via C#. Programmirovanie na platforme Microsoft.NET Framework 4.0 na yazyke C# 3-e izd. - SPb.: Piter, 2012. - 928 p.

Desktop 3rd generation Intel Core Processor Family [online resource]. -http://www.intel.ru/content/www/ru/ru/processors/core/3rd-gen-core-desktop-specification-update.html?wapkw=intel+core+i5-3570k+%D0%B8+i7-3770k (accessed 02.02.2013).

Avramchuk V.S., Chan V'et T'yau. Chastotno-vremennoy korrelyacionnyy analiz cifrovyh signalov [Izvestiya Tomskogo politehnicheskogo universiteta] - T. 315. - № 5 (2009): 112-115.

Arhangelskiy A.Y. Priemy programmirovaniya v Delphi na osnove VCL. - M.: Binom-Press, 2009. - 944 p.

Intel Threading Building Blocks (Intel® TBB) User Guide [online resource]. http://software.intel.com/sites/products/documentation/doclib/tbb_sa/help/index.htm#t bb_userguide/title.htm (accessed 02.10.2013).

Ayficher E.C., Djervis B.U. Cifrovaya obrabotka signalov: prakticheskiy podhod. 2-e izd. - M.: Vil'yams, 2008. - 992 p.

Sposob spektralnogo analiza mnogochastotnyh periodicheskih signalov, predstavlennyh cifrovymi otschetami: pat. 2229140 Ros. Federaciya. №

2003108753/28; zayavl. 28.03.03; opubl. 20.05.04, Byul. № 14. - 6 p.

H.V. Sorensen, C.S. Burrus, M.T. Heideman. Fast Fourier transform database. -Boston: PWS Publishing Co., 1995. - 175 p.

Nussbaumer G. Bystroe preobrazovanie Furie i algoritmy vychisleniya svertki. - M.: Radio i svyaz, 1985. - 248 p.

Bleyhut R. Bystrye algoritmy cifrovoy obrabotki signalov. - M.: Mir, 1989. -448 p.

Smith S. The Scientist and Engineer's Guide to Digital Signal ProcessingK. B. [online resource]. http://www.analog. com/static/imported-

files/tech_docs/dsp_book_frontmat.pdf (accessed 02.10.2013).

i Надоели баннеры? Вы всегда можете отключить рекламу.