Вы находитесь на странице: 1из 6

���������� ����������

������� ����

���� ��������� - ���� ����� �� �������� ����������� � ������� ���������� ��


������������� �� ��/�++.
�� ����� �� ���������� ���������� ����������� ���������������� � �������� ���
����������� � ������� ����������.

����������� ������������ ����������

� ���� ���� ������ - ����� ���: https://agner.org


�� �������� ������������ ������, ����� ������������� ����, ���������������� Intel �
SIMD-���������� �������� � ��� ����� ����:
https://www.agner.org/optimize/

�������������� ���������������

� ������������� ���������������� ������ ������� ������������ �������������� �����.


������������� � ������������ ��� ������ ��������� ����, ���� ���� �����������
���������, ���� ������� ����������� ����, � ��� ���� ����� ����������.
��� ���� ����������� ������� ���������������� ��� �� ����� � �������� ���
�����������.

To be done

������� ������

������ ����� - ��� ������ ������� ������������� ��������� ���������� �����������


�/��� �����������.
������������ ���������� ���� ������������. ��� ���� ������ ��������� � ��� ������,
� ������� �� ������� (�� ����� ���� ���).
�������� ��� �� ��������� ���� (!) ���� � ������ ������� ����� ����������� ���� ��
�� ������, ���� ������ ������������
� ������ ������ � ���� �� ����, �������� �������� ������������ �������������� �����
����������.
������ ����� �� (� ������ �����������) ��������� ��������� ��� ���, ��� �� �������
�� ������ (��������������� � ������������),
� �� ��� ��� ����� ��������� � ����������� (� �����-�����������, �� �����
����������� ������).
�� ����, �����������, ��� ��� �� ������� ����� ��������� �������� ���� ��������, �
������� ��������� ���������� �������.
������ ������ ������ ������������ ����������� (�.�. ������������ � ������� ������
����������).
������ ������ ������ ������ "����� ����� ������� ���� ����� ����", �� ������������.

� C++ ���� ��� ������ ����� �� ��������:


1. relaxed: ������������ ������ ��, ��� �������� ����� ��������� ��������. � �����
������ - ������.
- ���������� ���������� "������" � ������ ������ �� �����
- ����� thread2 "������" ������� ����� � ��� �� ���������� � ��� �� ������, �
������� ����������� � ����������� � ������ thread1
- ������ ����������� ������ ���������� � ������ thread1 �� ��������� � ������
thread2
relaxed-���������� ����� ������������ ��� �������� ��� ����� ���������.
���� ������ � ���� ��������� ������ �����.
������ �� �������������� ������ ���� - READ UNCOMMITTED
2. sequential consistency, seq_cst: �������� ����� ��������������� ����� �����
�������� ���������.
- ������ ����������� ������ ��������� ���������� � ������ thread1 ��������� �
������ thread2
- ��� ������ ����� ������ ���� � ��� �� ������ ����������� ���� ���������
����������.
���� ����������� ����� ����������� � ������ �������
- ��� ����������� ����� (�� ������ ����������� ��� ���������) � ������ thread1,
���������� store �� ��������� ����������,
����� ����� ����� ��������� load ���� �� ���������� � ������ thread2
���� �������� � ���� ������� ������ �����.
������ �� �������������� ������ ���� - SERIALIZED
3. acquire/release: ������������ ����.
- ���������� ��������� ���������� � release ����� ��������� ����� � ������ ������,
���������� ������ ���� �� ��������� ���������� � acquire
- ��� ����������� ����� � ������ thread1, ���������� ������ ��������� ���������� �
release,
����� ����� ����� ��������� ����� ��� �� ���������� � acquire � ������ thread2
- ��������� � ��������� �� ����� ��������� �������� ������ � ����� ���� release
�������� � ������ thread1,
� ����� ���������� ���� �������� ����� �� ����� ���� acquire �������� � ������
thread2
�������� ������ ������������ ������ ����� ���� �������� (� ������� �� ���� �������
� 1 � 2).

https://habr.com/ru/post/517918/
https://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync
https://habr.com/ru/company/JetBrains-education/blog/523298/
https://habr.com/ru/post/545996/
https://habr.com/ru/post/546222/
https://habr.com/ru/post/546880/
https://elixir.bootlin.com/linux/latest/source/Documentation/memory-barriers.txt

����� ������� � ������������� ���������

������ ������ ������� �� ����������� x86/x64 - ���� �������.


�� �������� ����������� � ������������� �������� ����� ������� �����, � �� x64
�����: ��������� ����� ����������.

���� � ��� �� ��� ����� ��������� ������ ���� ��-�� ������� ������� ����� �������,
��� (�����) ���������� ����� ��������� �� �������.
����������� ����������� ��-��:
- ������������� ��������� ����������
- ������������� ����������� (�������, ������� ��������, �������� ���� � ������
������������)
- �������� ������� ��� ����������, ��� � ��������� ������ ������� (����)

��� ���������� ��������� ���������� ����� ���������� �����������, �����


������������ ������ ��������������,
������ ������ �������� ������ ������������.
�� � ��������, �� �������� � �� ������ ���������, � ������������� ������ ���������
� ���� ���� ���� �� �����,
��� �������� �����.

������, ������� �� �������� ��������, �� ����� ��������� ������� �64 ��� ���� :)

����� �������� � ����������: ����� ���� ��������� �����, ������� ���� ���������
��������, ������ ����� � ������.

� �++ ���� chrono::high_resolution_timer. �� �� ������ �����������, ������ �� �


����������� ��� �������� ����� �� ��� ������.
����� ������ �������� � ����� �� Linux / Intel(R) Core(TM) i5-4690K CPU @ 3.50GHz /
gcc 8.4, � �������� � 30 ����������.
�� Intel Core i5 480M @ 2.67GHz / Windows 7 / MSVC 2017 �������� ������ 4000
����������.
�� Intel Atom x7-Z8750 @ 1.6GHz / Windows 10 / MSVC 2017 �������� 320 ����������.

�� x64 ������ ������� ����� ������ � ������ Timestamp Counter (TSC) - �������� ��
���� ��������� �64 �������� MSR.
�� ��������� ���������, � ��� ��������� ����� ������ ������� ������������� �������
� ������� ������ ����������.
�� ������ ��������� � �������������� ����������� ����� ����� ������� ���������.
������� ������������� ������� ������� ����� ��������� �� ������ ����� constant_tsc
� /proc/cpuinfo.
������ ������� ��������� ����������� RDTSC/RDTSCP, ��� � ��� ������� ����� ���� �
������.
������ ������� ���� �� ���� ����� �� ����������: ����� �������� ��������, ������
��������� ������������� ���������,
����� �� ��� (���� �� ����-�� �������� ��������� ������).

�������� ������� �������:


1. �������� ���� ���������� RDTSC � ������ ��� �������* ��������:
- ��������� ������� ������ �� ���� ����������, �������� ������� ����� ������ ��
���������
2. �������� (�����������**) ������ ������� �������:
- ������� ��������� ���, ������� ������ ��������� �� ���� �������***
3. ��������� ���� � ������������ ������ �����, �� ��������� ������ �� 1 � 2.
4. ���������� ��������� ������� ����������� RDTSC, ������� ���� ����� RDTSC
5. �������������� ������������ ������.
* ��� ��������� ��������, ���� RDTSC ����� ������� - ��-�� �������� �������
����������, ������� ��������.
** ������ � ������������� ��������� ������� ������� ���������� ������, ��� ��-��
������� ������ ������ ����� �������
�� ������ �����������, ��� � ��-�� ������� � ����������� �������� ������ �
��������.
https://stackoverflow.com/questions/42189976/calculate-system-time-using-rdtsc
������ �� ��� ������� ����, ������ � ��������, �� �������� ����������
�������������� �������.
*** � ��� �� ��������� �� ��������� ������� sleep � ��/����������, ��������
�������� �����.

������������ �������:
- ������� �������� ������� �������� ������������ ���������� ���� RDTSC �����:
���������� ���������� ������� ���� �������������, � ���������� �������� ��������
������ ����� ������ ����.
�� ����, �� ����� ���� ���� ��� �������� �� ������� ����, � �������� ������
��������.
- ������� �������� - ��� ����������� ��������� � ��������, ���� ������ �����
���������� ���� ����� �������.
����� ���� ��� ����� ���� �������� ������� ����� ������ - ��� �������� � ���� ����,
��� � ���������� �������� ����� ������ (�������� �� ������������ ���).
- ������� �������� - �������� �������� ������ �� ���� ��� �������� � ����
- ��������� ������� �����-����� ������������ ������.

��� �����, �������� ������������.


������� ��� �� ���� �������� ������ �������, �� ��� ��� ����� �������� ��� ��
������������ ��������������
��������� ����, � ��������� ������������ ����������� �����.

� ����������� x86 ���� ���������� ���� ������� �� ������������������ � Performance


Monitoring Unit (PMU),
����� ������� ���� ����������� �� ������� ������� (������� Coreclock register)

������ ��������� ������� � ������������� ��

�������� ���� �����������. ���� ����������� ��������� ������ �������� � ����������;


���� ���� �������� ����� ���� ����������.
� MS DOS �������� ����������� ������ �� ����������; � RT-11 ��� ��� ����������
������������ �����-������.
� ����������� ���� ���������� �������, ��������� �������������.
��� ��� �������� �������, ������� ����� ��������� ����.
������� ��������� � ���� ��������������� ������� � ��������������.

�������� realtime-���� �� Linux, �� ������������� �������� ���������������


������������, ������� ����� ����������� ���������
� ��������� �������� � ������ �������� ��. ��� �������� �� ������ �����
�������������� ��������.
������� ��� ������� ���������� ��������� ��� ��������� ����������:
https://habr.com/ru/post/562636/

����� ����������� ������ ������ � ������ �������� ���� �� �������� Linux - �������
��������� ���� ������� �� (thread affinity).
�� ��������� ���������� � ��������� �������� ��� ���� ������� �� ������ ����.
��� ��������� ���� ����������� ���������� ��������� �� ��������� �� (�����
��������� ����������� ����������).
https://access.redhat.com/documentation/en-us/
red_hat_enterprise_linux_for_real_time/8/html/tuning_guide/chap-
general_system_tuning

���������� ����

�� ��������� ����������� (���������� ������� �������) ��������� ����� ��� ���


Kernel Bypass:
��������� �������� ������ ���� ����, � userland. � ��������� ����� ��������� �
������� ������ SolarFlare (�� ������ OnLoading).
���� ���� TCP/IP ����������� � ����������, ��������� � ������ �����������.
���������� �� ������ ��������� ����, � ��� ������������� � ����; �� �� ����������
������ � ���� �������� ������� ������ (iptables) � ��� ��������.
��� ������� ������ ���������� ��������� kernel/user, ������������ ����������
(������� �������� ����� ���� �������� �� ������ �������� ���-�� ���),
���������� �������, ���������� ���������� ��������������� ������� �����������
����������� � ����, ���.
��� ������ ���������� � ������������ ����� �� (��.����) �� ���������� ����.
� ���������� ����������� ���������� �������� � ������� ����������.
�� ������������ ��� ������� ��� ������� ������.

Bonding �������.

�� ��������� ���������� ����������� ����������� RDMA - ��������� ����� ������ �


����� (������ ������ � ����).
��� ���� ����������� � ����� ��������� ���������� ��������������� � �����������
��������� ������ ������� �����,
���� ��������� ����������� �����������, ���� �� ��� ������ (�� ���� ��� ���������
���������).
����� ����������� ����� ��������� ��������, �� �������� ���������� ��� ������ ��
�������� ���������� ������ ������ (��������, � ������������������ ����).
������ ������ - Infiniband, ���������� libibverbs.
��������� � interlinked-���������, ���������� ����.
����� ����� ���������� ����� - ����� �� ���������� ������� (zero copy).
�� ����������� ������ ���� ���������� ������ *���* ��������� ��������� �����������
�����.
�� 100�� ������ ���������� ����.
������ ��� ������� � ���������� � ������� ������ ������������ ��������������� �
���������/�������� �������.

������� ����������� (SHADOW BUFFERING/DOUBLE BUFFERING)

�� ��������� ������� ���������� ����������� �������� ������ (� ����, ��� ������ ��


����) ����������� ������ ����������:
- �������� ��������� �������, ������ ���� �� ��� ������� (����� � ��������) � ����
������ �������
- ���������� ������ ��������� ������� � ��������� �������
- �� ��������� ������ ��� �������� �������� ������
- �� ���������� �������� �� ��������� ������, �� ��������� ��� ����������;
��������� �������� ������� � ������ �����.

��� ������� ������ ���� ���������� ������.

������

��������� � �������� ������ ��� �����������


https://habr.com/ru/post/523654/

���������� �������������� ���������� � ���� -ffast-math � GCC 11


https://habr.com/ru/company/ruvds/blog/586386/

������� ������� double


https://habr.com/ru/company/ruvds/blog/542640/
https://github.com/fastfloat/fast_float

������ �������� UTF8


https://habr.com/ru/company/ruvds/blog/551060/
https://arxiv.org/pdf/2010.03090.pdf

ASM today
https://habr.com/ru/post/544786/

��������� ����� ��� ������ �� �����


https://habr.com/ru/company/otus/blog/557310/

epoll � Windows IO Completion Ports: ����������� �������


https://habr.com/ru/company/infopulse/blog/415403/

����� ������ � ������������ ���������? ��������� �� x86 � M1


https://habr.com/ru/company/selectel/blog/557410/

������
1. Agner Fog, Optimization manuals https://www.agner.org/optimize/
2. ��������� �������� � ������ �� https://habr.com/ru/company/otus/blog/343566/
3. select / poll / epoll: ����������� �������
https://habr.com/ru/company/infopulse/blog/415259/
4. Evaluating the Cost of Atomic Operations onModern Architectures
https://spcl.inf.ethz.ch/Publications/.pdf/atomic-bench.pdf
5. Intel Intrinsics Guide
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
6. Neon Intrinsics Reference https://developer.arm.com/architectures/instruction-
sets/simd-isas/neon/intrinsics
������
�����
https://easyperf.net/notes/
http://scrutator.me/

Вам также может понравиться