Skip to content

Commit 5e355b6

Browse files
authored
Словарь, нумерация глав, подписи картинок (#5)
* * glossary format * + section numbering * + automatic numbering of images with RU caption * + centred image captions * ! `++` in Chapter2 * ! subsections numbering in Chapter2
1 parent 4615252 commit 5e355b6

File tree

8 files changed

+61
-49
lines changed

8 files changed

+61
-49
lines changed

Chapters/Chapter1.adoc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[#section-chapter1]
2-
== Глава 1. Инструментарий компилятора
2+
== Инструментарий компилятора
33

44
Технологии компиляции стали важны как никогда.
55
Как небольшие, так и крупные технологические компании нанимают разработчиков компиляторов.
@@ -204,7 +204,7 @@ gcc --sysroot=/path/to/aarch64/sysroot -march=armv8-a hello.c
204204
Кросс-компилятор в A (CA) сгенерирует другой кросс-компилятор (CB), который будет работать на B.
205205
CB сгенерирует код для машины C.
206206

207-
image::canadian_cross.png[title="Схематичный пример канадской сборки",caption="Рис. 1: ",alt="Канадская сборка"]
207+
image::canadian_cross.png[title="Схематичный пример канадской сборки",alt="Канадская сборка"]
208208

209209
=== Введение в инструментарий GCC
210210

Chapters/Chapter2.adoc

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
== Глава 2. Введение в компиляторные оптимизации
1+
== Введение в компиляторные оптимизации
22

33
В этой главе вы узнаете о часто используемых компиляторных оптимизациях, которые используются для уменьшения размера кода
44
и повышения производительности, а также о различных инструментах и методах профилирования.
@@ -87,7 +87,7 @@
8787

8888
* *Флаги, предоставляющие значение*
8989
+
90-
Такие флаги, как `-D`, `-fprofile-use`, `-stdlib=libstdc++`, предоставляют компилятору дополнительные входные данные, которые могут помочь в оптимизации,
90+
Такие флаги, как `-D`, `-fprofile-use`, `-stdlib=libstdc{pp}`, предоставляют компилятору дополнительные входные данные, которые могут помочь в оптимизации,
9191
диагностике, инструментировании и т. д.
9292

9393
=== Оптимизация производительности
@@ -102,7 +102,7 @@
102102

103103
Это тривиальный случай, когда оптимизация компилятора не выполняется.
104104
Тем не менее оптимизация для конкретного языка в соответствии с требованиями стандарта по-прежнему выполняется.
105-
Например, вычисления во время компиляции, требуемые стандартом C++, по-прежнему выполняются.
105+
Например, вычисления во время компиляции, требуемые стандартом C{pp}, по-прежнему выполняются.
106106
Этот уровень очень полезен для целей отладки в сочетании с флагом компилятора `-g`.
107107
Поскольку `-O0` не выполняет оптимизацию, время компиляции является самым быстрым,
108108
что весьма полезно для итеративной разработки.
@@ -201,7 +201,7 @@ https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_cjh1548250046139
201201
Файл покрытия -- это, по сути, гистограмма частот выполнения различных точек программы.
202202
Для создания файла покрытия существует две методики, которые подробно описаны ниже.
203203

204-
==== 1. Использование инструментирования
204+
==== Использование инструментирования
205205

206206
Компиляторы могут вставлять «счетчики» в интересующие точки программы для сбора профилей времени выполнения.
207207
Код инструментируется путем передачи компилятору команды `+-fprofile-generate+`.
@@ -225,7 +225,7 @@ gcc -O2 -fprofile-use=/path/to/outputfile test.c -o b.out
225225
Компилятор часто оптимизирует размещение кода, вставку функций и циклы с учетом информации профиля.
226226
Обычно при использовании PGO (Profile-Guided Optimization) наблюдается повышение производительности более чем на 10%.
227227

228-
==== 2. Использование семплирующих профиляторов
228+
==== Использование семплирующих профиляторов
229229

230230
Семплирующие профиляторы, такие как Linux perf, используют аппаратные счетчики для регистрации определенных событий во время выполнения программы.
231231
Программы можно профилировать как с самого начала, так и во время их выполнения.
@@ -292,7 +292,7 @@ gcc -O3 -fauto-profile=a.gcov test.c -o b.out
292292

293293
[source,bash]
294294
----
295-
size gcc/11/libstdc++.dylib
295+
size gcc/11/libstdc{pp}.dylib
296296
----
297297

298298
[source,bash]
@@ -307,7 +307,7 @@ __TEXT __DATA __OBJC others dec hex
307307

308308
[source,bash]
309309
----
310-
strings gcc/11/libstdc++.dylib | wc -l
310+
strings gcc/11/libstdc{pp}.dylib | wc -l
311311
----
312312

313313
[source,bash]
@@ -322,7 +322,7 @@ strings gcc/11/libstdc++.dylib | wc -l
322322

323323
[source,bash]
324324
----
325-
bloaty gcc/11/libstdc++.dylib
325+
bloaty gcc/11/libstdc{pp}.dylib
326326
----
327327

328328
[source,bash]
@@ -451,7 +451,7 @@ https://www.youtube.com/watch?v=6IuDWfuMEno[«Code Size Compiler Optimizations a
451451
Оба подхода помогают уменьшить размер двоичного файла.
452452
Ниже приведены мотивирующие примеры.
453453

454-
Раннее вычисление: используя такие возможности языка, как `constexpr`, `static_assert` из C++, некоторые выражения могут быть вычислены раньше, например:
454+
Раннее вычисление: используя такие возможности языка, как `constexpr`, `static_assert` из C{pp}, некоторые выражения могут быть вычислены раньше, например:
455455

456456
[source,cpp]
457457
----
@@ -473,7 +473,7 @@ int main() {
473473
}
474474
----
475475

476-
Компилируя программу, представленную выше, используя команду `g++ std=c++17 -fno-exceptions -S`:
476+
Компилируя программу, представленную выше, используя команду `g{pp} std=c{pp}17 -fno-exceptions -S`:
477477

478478
[source,nasm]
479479
----
@@ -583,7 +583,7 @@ nm <Binary> | grep -i "test\|debug"
583583
=== Справочные материалы
584584

585585
* https://www.youtube.com/watch?v=6IuDWfuMEno[Адитья Кумар -- Оптимизация размера кода компилятора и методы для встраиваемых систем]
586-
* https://www.youtube.com/watch?v=OTCp_AkAyRQ[Адитья Кумар и Себастьян Поп -- Анализ производительности и оптимизация стандартных библиотек C++]
586+
* https://www.youtube.com/watch?v=OTCp_AkAyRQ[Адитья Кумар и Себастьян Поп -- Анализ производительности и оптимизация стандартных библиотек C{pp}]
587587
* https://developercommunity.visualstudio.com/t/192628900-pragma-optimize-off-is-not-working-as-ex/1091452[Сообщество разработчиков Visual Studio -- pragma optimize off работает не так, как ожидалось]
588588
* https://linux.die.net/man/1/nm[nm(1) -- страница руководства Linux]
589589
* https://hacktalks.blogspot.com/2013/08/gcc-instrument-functions.html[Инструментирующие функции GCC]

Chapters/Chapter3.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
== Глава 3. Создание приложений RISC-V
1+
== Создание приложений RISC-V
22

33
В этой главе мы узнаем, как использовать популярные наборы инструментов компилятора (как LLVM, так и GCC) для создания приложений RISC-V,
44
а также как запускать приложения на симуляторах и эмуляторах.

Chapters/Chapter4.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
== Глава 4. Методы отладки
1+
== Методы отладки
22

33
Отладка -- неотъемлемая часть жизненного цикла разработки программного обеспечения.
44
Даже при самых надежных методах программирования возникают ошибки, и их отладка -- не самое приятное занятие.

Chapters/TechnicalTerms.adoc

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
11
[#section-terms]
2+
[glossary]
23
== Список терминов
34

4-
* _toolchain_ -- инструментарий, набор инструментов
5-
* _high-level/low-level languages_ -- языки высокого/низкого уровня
6-
* _static analysis_ -- статический анализ
7-
* _instrumentation_ -- инструментирование
8-
* _introspection_ -- интроспекция
9-
* _compiler-driver_ ­-- драйвер компилятора
10-
* _bottleneck_ -- узкое место
11-
* _runtime profile_ -- профиль времени выполнения
12-
* _loop unrolling_ -- развертывание циклов
13-
* _inlining_ -- встраивание функций или инлайнинг
14-
* _instruction scheduling_ -- планирование инструкций
15-
* _register allocation_ -- распределение регистров
16-
* _benchmark_ -- тест производительности
17-
* _stack frame_ -- кадр стека
18-
* _buffer overflow_ -- переполнение буфера
19-
* _coverage file_ -- файл покрытия
20-
* _code layout_ -- размещение кода
21-
* _sampling profiler_ -- семплирующий профилятор
22-
* _call site devirtualization_ -- девиртуализация вызовов
23-
* _instantiate_ -- инстанцировать
24-
* _dead code_ -- мертвый код
25-
* _comprehensive test suite_ -- комплексный набор тестов
26-
* _rich performance profiles_ -- расширенные профили производительности
27-
* _ELF targets_ -- целевые платформы ELF
28-
* _sub-architecture_ -- субархитектура
29-
* _SoCs_ -- однокристальные системы
30-
* _print debugging_ -- отладочная печать
31-
* _sanitizer_ -- санитайзер
32-
* _assertion_ -- в курсе не переводится
33-
* _breakpoint_ -- точка останова или контрольная точка
34-
* _backtrace_ -- в курсе не переводится
35-
* _single-stepping instructions_ -- пошаговые инстукции
5+
toolchain:: инструментарий, набор инструментов
6+
high-level/low-level languages:: языки высокого/низкого уровня
7+
static analysis:: статический анализ
8+
instrumentation:: инструментирование
9+
introspection:: интроспекция
10+
compiler-driver:: драйвер компилятора
11+
bottleneck:: узкое место
12+
runtime profile:: профиль времени выполнения
13+
loop unrolling:: развертывание циклов
14+
inlining:: встраивание функций или инлайнинг
15+
instruction scheduling:: планирование инструкций
16+
register allocation:: распределение регистров
17+
benchmark:: тест производительности
18+
stack frame:: кадр стека
19+
buffer overflow:: переполнение буфера
20+
coverage file:: файл покрытия
21+
code layout:: размещение кода
22+
sampling profiler:: семплирующий профилятор
23+
call site devirtualization:: девиртуализация вызовов
24+
instantiate:: инстанцировать
25+
dead code:: мертвый код
26+
comprehensive test suite:: комплексный набор тестов
27+
rich performance profiles:: расширенные профили производительности
28+
ELF targets:: целевые платформы ELF
29+
sub-architecture:: субархитектура
30+
SoCs:: однокристальные системы
31+
print debugging:: отладочная печать
32+
sanitizer:: санитайзер
33+
assertion:: в курсе не переводится
34+
breakpoint:: точка останова или контрольная точка
35+
backtrace:: в курсе не переводится
36+
single-stepping instructions:: пошаговые инстукции

Course.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
:doctype: book
44
:toc: macro
55
:toc-title: Содержание
6+
:chapter-signifier: Глава
7+
:figure-caption: Рисунок
68

79
Данные материалы являются переводом курса https://training.linuxfoundation.org/training/risc-v-toolchain-and-compiler-optimization-techniques-lfd113x/[RISC-V Toolchain and Compiler Optimization Techniques (LFD113x)], распространяемого под лицензией https://creativecommons.org/licenses/by/4.0/[CC BY 4.0].
810

@@ -13,6 +15,7 @@ toc::[]
1315
:imagesdir: images
1416
:pp: ++
1517

18+
:sectnums:
1619
include::Chapters/Chapter1.adoc[Глава 1. Инструментарий компилятора]
1720

1821
include::Chapters/Chapter2.adoc[Глава 2. Введение в компиляторные оптимизации]

Makefile

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ CHAPTERS = $(wildcard $(CHAPTERS_DIR)/*.adoc)
88
ROOT_ASCIIDOC = $(ROOT_ASCIIDOC_NAME).adoc
99
RESULT_PDF = $(ROOT_ASCIIDOC_NAME).pdf
1010

11+
THEME = theme.yml
12+
1113
.PHONY: all
1214
all: $(RESULT_PDF)
1315

14-
$(RESULT_PDF): $(ROOT_ASCIIDOC) $(CHAPTERS)
15-
$(ASCIIDOCTOR_PDF) --trace --out-file='$@' '$<'
16+
$(RESULT_PDF): $(ROOT_ASCIIDOC) $(CHAPTERS) $(THEME)
17+
$(ASCIIDOCTOR_PDF) \
18+
--theme $(THEME) \
19+
--out-file='$@' '$<'
1620

1721
.PHONY: clean
1822
clean:

theme.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
extends: default
2+
image:
3+
caption:
4+
align: center

0 commit comments

Comments
 (0)