ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ влияСт Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C++ ΠΈ ΠΊΠ°ΠΊ Π΅Ρ‘ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ высоком ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠ΄Π°? Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ CatBoost Π•Π²Π³Π΅Π½ΠΈΠΉ ΠŸΠ΅Ρ‚Ρ€ΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» Π½Π° эти вопросы Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡΡ… ΠΈΠ· ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ CatBoost для x86_64.

Π’ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°



β€” ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. Π― занимаюсь ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ для CPU Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ машинного обучСния CatBoost. Основная Ρ‡Π°ΡΡ‚ΡŒ нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ написана Π½Π° C++. БСгодня расскаТу, ΠΊΠ°ΠΊΠΈΠΌΠΈ простыми способами ΠΌΡ‹ добиваСмся скорости.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСний складываСтся ΠΈΠ· Π΄Π²ΡƒΡ… частСй. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ β€” Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. Если ΠΌΡ‹ ошибаСмся с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ Π΅Π³ΠΎ быстро Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡˆΡŒ. Вторая Ρ‡Π°ΡΡ‚ΡŒ β€” Ρ‚ΠΎ, насколько наш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы, которая Ρƒ нас Π΅ΡΡ‚ΡŒ, с Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ вычислСния приходится ΠΈΠ·-Π·Π° большой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΈΡ… скорости. Если ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ памяти Π·Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΠ΅ΡˆΠ΅Ρ…ΠΎΠ΄Π°, Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ вычислСний β€” это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ крСйсСрская ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пассаТирского самолСта.

Π§Ρ‚ΠΎΠ±Ρ‹ эту Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΡΠ³Π»Π°Π΄ΠΈΡ‚ΡŒ, Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π΅ΡΡ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Π‘Π°ΠΌΡ‹ΠΉ быстрый ΠΈ самый малСнький β€” L1-кэш. ΠŸΠΎΡ‚ΠΎΠΌ Π΅ΡΡ‚ΡŒ кэш побольшС ΠΈ ΠΏΠΎΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня. И Π΅ΡΡ‚ΡŒ совсСм большой кэш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π° дСсятки ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚, кэш Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ уровня, Π½ΠΎ ΠΎΠ½ самый ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Из-Π·Π° Ρ€Π°Π·Π½ΠΎΠΉ скорости ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ вычислСний, Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ дСлится Π½Π° Π΄Π²Π° класса. Один класс лимитируСтся пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ класс лимитируСтся ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСссора. Π“Ρ€Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ выставляСтся Π² зависимости ΠΎΡ‚ числа ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ с ΠΎΠ΄Π½ΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ константа для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ тяТСлого Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Π°Π²Π½ΠΎ написана, ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°, ΠΈ Π΅ΡΡ‚ΡŒ большоС число Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, поэтому ΠΈΠΌΠ΅Π΅Ρ‚ смысл, Ссли Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² своСм ΠΊΠΎΠ΄Π΅ тяТСлыС вычислСния, ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡ… Π·Π° вас ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Из ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎΡΡ компиляторы ΡƒΠΌΠ΅ΡŽΡ‚ Π½Π΅ всё, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ тратится ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ рСсурсов. КакиС ΠΈΠ· Π½ΠΈΡ… сСгодня Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ стандарты, ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Π·Π° Π½ΠΈΠΌΠΈ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ? Π­Ρ‚ΠΎ frontend EDG, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€ΠΈΠ²Π°Ρ‚ΠΈΠ²Π°Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, компилятор Intel; LLVM; GNU ΠΈ frontend Microsoft.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… ΠΌΠ°Π»ΠΎ, компиляторы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ частотныС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ управлСния ΠΈ зависимости ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ. Если ΠΌΡ‹ смотрим Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ это Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ участки ΠΈ простыС Ρ†ΠΈΠΊΠ»Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅. ЧастотныС зависимости ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ½ΠΈ ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΎΡ‚ Ρ€Π΅Π΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹, скаТСм, суммируСм ΠΌΠ½ΠΎΠ³ΠΎ элСмСнтов Π² ΠΎΠ΄ΠΈΠ½, сворачиваСм ΠΈ выполняСм поэлСмСнтныС дСйствия Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими массивами.

Π§Ρ‚ΠΎ ΠΆΠ΅ остаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ условно ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ части. ΠŸΠ΅Ρ€Π²Π°Ρ β€” Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° прилоТСния, компиляторы просто Π½Π΅ Π² состоянии ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π΅Π΅ Π·Π° нас.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ β€” Ρ‚ΠΎΠΆΠ΅ слоТная Π²Π΅Ρ‰ΡŒ для компиляторов. Π Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ слоТно: Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΈ всС вмСстС. ΠšΡ€ΠΎΠΌΠ΅ этого, компиляторы Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ качСство ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ, насколько быстрым получаСтся ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ приходится Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°ΠΌ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дальшС ΠΈΠ»ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ.

Π’ части Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΌΡ‹ посмотрим Π½Π° Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² большом числС случаСв Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° основываСтся.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ оставим Π·Π° скобками. По ΠΏΠΎΠ²ΠΎΠ΄Ρƒ использования памяти: это Ρ‚ΠΎΠΆΠ΅ Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ смыслС амортизация ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² памяти. Π’ части ΠΎΡ†Π΅Π½ΠΊΠΈ эффСктивности ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² ΠΊΠΎΠ΄Π΅.

ИспользованиС интСрфСйсов ΠΈ абстрактных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· основных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² проСктирования. Рассмотрим ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· машинного обучСния. Π­Ρ‚ΠΎ условный ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обновляСт ΠΏΡ€ΠΎΠ³Π½ΠΎΠ· Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Если Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ происходит, Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ интСрфСйс IDerCalcer для вычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ, ΠΈ функция, которая сдвигаСт ΠΏΡ€ΠΎΠ³Π½ΠΎΠ· (нашС прСдсказаниС) Π² соотвСтствии с Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ.

Π‘ΠΏΡ€Π°Π²Π° Π½Π° слайдС Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚ для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ случая. А Π² машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° β€” Π½Π΅ Π΄Π²Π° ΠΈ Π½Π΅ Ρ‚Ρ€ΠΈ, Π° ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹, дСсятки ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² элСмСнтов. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, насколько Ρ…ΠΎΡ€ΠΎΡˆ этот ΠΊΠΎΠ΄ для Π²Π΅ΠΊΡ‚ΠΎΡ€Π° порядка 10 ΠΌΠ»Π½ элСмСнтов.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π² качСствС Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ срСднСквадратичноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈ помСряСм, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π·Π° сколько ΠΎΠ½Π° сдвинСт этот ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ этой Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° слайдС. ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° условной машинС, которая дальшС остаСтся фиксированной, β€” 40 мс.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚ΡƒΡ‚ Π½Π΅ Ρ‚Π°ΠΊ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, β€” Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. Если ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² зависимости ΠΎΡ‚ числа ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΡΡ‚ΡŒ-Π΄Π΅ΡΡΡ‚ΡŒ инструкций. И Ссли, ΠΊΠ°ΠΊ Π² нашСм случаС, вычислСниС самой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ β€” это всСго Π΄Π²Π° арифмСтичСских дСйствия, Ρ‚ΠΎ это запросто ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ сущСствСнным Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходом. Для большого Ρ‚Π΅Π»Π° ΠΏΡ€ΠΈ вычислСнии ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… это ΠΎΠΊ. Для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ Ρ‚Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вычисляСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡƒΡŽ —скаТСм, Π΄Π°ΠΆΠ΅ Π½Π΅ 500 инструкций, Π° 20, 50 ΠΈΠ»ΠΈ Π΅Ρ‰Π΅ мСньшС, β€” это ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сущСствСнный ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² интСрфСйс.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ вычисляли ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΎΡ‚ поэлСмСнтной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ стандартный шаблон C++, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с view Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€. Или, Ссли ваш компилятор Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ послСдний стандарт, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ класс, Π³Π΄Π΅ хранится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€. Как помСняСтся ΠΊΠΎΠ΄? Π£ нас останСтся ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вычисляСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅, ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ Π½Π°ΠΌ придСтся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚, собствСнно, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ добавляСтся Ρ†ΠΈΠΊΠ», Π½Π°ΠΌ Π΅Ρ‰Π΅ придСтся Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сам Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ² ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ вычислили.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠΎΠΌΠ΅Ρ€ΡΠ΅ΠΌ снова Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ машинС ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ…ΡƒΠΆΠ΅, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» смысла Π½Π΅Ρ‚, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎΡ‚ самый частотный ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компиляторы ΡƒΠ·Π½Π°ΡŽΡ‚ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° ΠΎΠ΄ΠΈΠ½ элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС, Ρ‡Π΅ΠΌ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

А Π²ΠΎΡ‚ созданиС большого Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ Π½Π΅ΠΌΡƒ β€” Π² этом мСстС стоит ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это ΠΏΠ»ΠΎΡ…ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ замСдлСнию, Π½ΡƒΠΆΠ½ΠΎ сСбС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Π² памяти, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° слайдС справа.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Когда посчитан Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ…, Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдвигаСт ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·. ΠŸΠ΅Ρ€Π΅Π΄ этим Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π² быстром кэшС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° частотС процСссора, останСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π½ΡŒ малСнькая Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. На слайдС это Π·Π΅Π»Π΅Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ Π½Π° свСтофорС. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ вытСснСны ΠΈΠ· кэша Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΈ ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Ρ‹, Π΄Π°Π½Π½Ρ‹Π΅ придСтся Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· памяти. А ΠΎΠ½Π° Ρƒ нас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π² ΠΎΠ±Ρ‰Π΅ΠΌ, вСсьма нСбыстро, со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅ΡˆΠ΅Ρ…ΠΎΠ΄Π°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Когда ΠΌΡ‹ обновляСм ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·, Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ сразу. Достаточно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… большими ΠΏΠ°Ρ‡ΠΊΠ°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ смысл Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ вычислСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° Π½Π° нСбольшиС Π±Π»ΠΎΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ эти Π΄Π²Π° дСйствия. К Ρ‡Π΅ΠΌΡƒ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚, Ссли ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅?

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ всС врСмя Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² L1-кэшС ΠΈ Π½Π΅ ΡƒΡΠΏΠ΅ΡŽΡ‚ ΡƒΠΉΡ‚ΠΈ Π² ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. А дальшС Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΡ‚ΠΎ ΠΆΠ΅ Π½Π°ΠΌ скаТСт этот Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠ°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π­Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ самому Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, сколько кэша Π΅ΠΌΡƒ трСбуСтся. Π”Π°Π»ΡŒΡˆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρƒ нас просматривал массив. Π•Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π°. Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ ΠΏΠΎ Π±Π»ΠΎΠΊΠ°ΠΌ, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π²Π° Ρ€Π°Π·Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ элСмСнтам Π±Π»ΠΎΠΊΠ°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ΠΎΡ‚ ΠΎΠ½, внСшний ΠΏΠΎ Π±Π»ΠΎΠΊΠ°ΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

А Π²ΠΎΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΏΠΎ элСмСнтам Π±Π»ΠΎΠΊΠ°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠœΡ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ послСдний Π±Π»ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ· этого получаСтся. Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ³Π°Π΄Π°Π»ΠΈ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ поняли, Π² Ρ‡Π΅ΠΌ Π΄Π΅Π»ΠΎ, ΠΈ Ρ†Π΅Π½ΠΎΠΉ довольно Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΈ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° восСмь ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ². Но ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ большС. НуТно Π΅Ρ‰Π΅ Ρ€Π°Π· критичСски ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ написали. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π½Π°ΠΌ вычисляСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ…, доступ ΠΊ элСмСнтам ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² нСблагоприятных ситуациях Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ Ρ‚ΡƒΡ‚ Π΄Π²Π΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π² Β«ΠΊΡƒΡ‡Π΅Β». Π’Π΅Π»ΠΈΠΊΠΈ ΡˆΠ°Π½ΡΡ‹, Ρ‡Ρ‚ΠΎ этот Π²Π΅ΠΊΡ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Ρ‚ΡŒΡΡ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ минус с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния скорости Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, вСроятно, ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ адрСсу. Π­Ρ‚Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ «холодная» с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния кэша, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ записью Π² Π½Π΅Π΅ процСссор Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² кэшС.

Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ вынСсти Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°. Для этого Π½Π°ΠΌ придСтся Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ интСрфСйс, ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π­Ρ‚ΠΎ стандартный ΠΏΡ€ΠΈΠ΅ΠΌ β€” вынос всСх манипуляций с рСсурсами ΠΈΠ· ΡƒΠ·ΠΊΠΈΡ… мСст Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ CalcDer Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, view Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΊΡƒΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Код Ρ‚ΠΎΠΆΠ΅ измСнится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½, снаруТи ΠΎΡ‚ всСх Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΈ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ просто добавится Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹ΠΈΠ³Ρ€Π°Π»ΠΈ Π΅Ρ‰Π΅ Π³Π΄Π΅-Ρ‚ΠΎ восСмь ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй, Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π±Π°Π·ΠΎΠ²ΠΎΠΉ β€” ΡƒΠΆΠ΅ 15%.

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‚ΡΡ Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, Ρ‡Ρ‚ΠΎ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ².

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста, понадобится Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ простой ΠΏΠΎΠ΄ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. НапримСр, я взял транспонированиС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π£ нас Π΅ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° approx ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° approxByCol, ΠΊΡƒΠ΄Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ транспонированныС Π΄Π°Π½Π½Ρ‹Π΅. И простоС Π³Π½Π΅Π·Π΄ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ². Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², создания Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π­Ρ‚ΠΎ просто ΠΏΠ΅Ρ€Π΅ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π¦ΠΈΠΊΠ» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ для компилятора.

ΠŸΠΎΠΌΠ΅Ρ€ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ этот ΠΊΠΎΠ΄ Π½Π° достаточно большой ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ машинС.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я взял число строк 1000, число ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ 100 000. Машина β€” интСловский сСрвСр, ΠΎΠ΄Π½ΠΎ ядро. ΠŸΠ°ΠΌΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ такая, Π½Π°ΠΌ это Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ вся Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ памяти. Π—Π°ΠΌΠ΅Ρ€ΠΈΠ»ΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 1,4 с. Много это ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎ? Π§Ρ‚ΠΎ ΠΌΡ‹ успСваСм ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π° это врСмя?

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠœΡ‹ успСваСм ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ 800 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚, это Π½Π΅ транспонированная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Π° исходная. А Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ 1,6 Π“Π‘, это ΡƒΠΆΠ΅ транспонированная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ выполняСт Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ записью, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² кэшС.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

ΠŸΠΎΡΡ‡ΠΈΡ‚Π°Π΅ΠΌ, сколько пропускной способности ΠΌΡ‹ использовали с пользой. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ нашСго ΠΊΠΎΠ΄Π° составила 1,7 Π“Π‘/с.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π­Ρ‚ΠΎ Π±Ρ‹Π» тСорСтичСский расчСт. Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π― взял VTune. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚. ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρƒ β€” 1,8 Π“Π‘. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ согласуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² нашСм расчСтС ΠΌΡ‹ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ приходится Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ адрСса строк ΠΈ адрСса ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Плюс ΠΊ этому VTune рСгистрируСт Ρ„ΠΎΠ½ΠΎΠ²ΡƒΡŽ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ наша модСль согласуСтся с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, 1,7 Π“Π‘ β€” это ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, какая максимальная пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π½Π°ΠΌ доступна.

Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ спСки ΠΏΠΎ процСссору. Π•ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт ark.intel.com, Π³Π΄Π΅ ΠΏΡ€ΠΎ любой процСссор ΠΌΠΎΠΆΠ½ΠΎ всС ΡƒΠ·Π½Π°Ρ‚ΡŒ. Если ΠΌΡ‹ смотрим ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π° наш сСрвСр, Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ восСмь ядСр ΠΈ для самой быстрой памяти DDR3, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, обСспСчиваСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 60 Π“Π‘/с Π² ΠΎΠ΄Π½Ρƒ сторону.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Но Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ядро ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρƒ нас ΠΏΠΎΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти 60 Π“Π‘ Π½Π° наши условия ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ числу ядСр ΠΈ частотС памяти.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ наш ΠΊΠΎΠ΄ ΠΌΠΎΠ³ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 5,3 Π“Π‘ Π² ΠΎΠ΄Π½Ρƒ сторону. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π² ΠΈΠ΄Π΅Π°Π»Π΅, Ссли Π±Ρ‹ ΠΌΡ‹ просто ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ с мСста Π½Π° мСсто, достигли Π±Ρ‹ 10,6. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ нас Π΄Π²Π° чтСния ΠΈ ΠΎΠ΄Π½Π° запись, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 8 Π“Π‘/с. ΠœΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ 1,7. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ использовали Π³Π΄Π΅-Ρ‚ΠΎ 20%.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ получаСтся? Π‘Π½ΠΎΠ²Π° Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ кэшСм ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, Π° ΠΏΠΎ 64 Π±Π°ΠΉΡ‚Π° Ρ€ΠΎΠ²Π½ΠΎ, Π½ΠΈ большС Π½ΠΈ мСньшС. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ сообраТСниС.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ сообраТСниС: ΠΌΡ‹ записываСм транспонированныС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ располоТСны Π² памяти нСпрСдсказуСмым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ вСщСствСнноС число, Π½Π°ΠΌ приходится Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ 64 Π±Π°ΠΉΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…. Если ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ N, Ρ‚ΠΎ вмСсто ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ (N/5,3 + N/10,6) Ρƒ нас получаСтся (8*N/5,3 + N/10,6). Π“Π΄Π΅-Ρ‚ΠΎ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅-ΠΏΡΡ‚ΡŒ Ρ€Π°Π· большС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ эту ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² 20%.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π§Ρ‚ΠΎ с этим Π΄Π΅Π»Π°Ρ‚ΡŒ? НуТно ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ столбцу ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, сколько укладываСтся Π² ΠΎΠ΄Π½Ρƒ кэш-линию (64 Π±Π°ΠΉΡ‚Π°). Для этого Ρ€Π°Π·ΠΎΠ±ΡŒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» ΠΏΠΎ столбцам Π½Π° Ρ†ΠΈΠΊΠ» ΠΏΠΎ кэш-линиям ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎ элСмСнтам кэш-Π»ΠΈΠ½ΠΈΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ΠΎΡ‚ ΠΎΠ½ΠΈ, ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ кэш-линиям.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

И Π²ΠΎΡ‚ ΠΎΠ½ΠΈ, ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ кэш-Π»ΠΈΠ½ΠΈΠΈ. Π’ΡƒΡ‚ ΠΌΡ‹ для простоты считаСм, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Ρ‹ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ кэш-Π»ΠΈΠ½ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VTune, Ρ‡Ρ‚ΠΎ получится.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ расчСтным восьми Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°ΠΌ Π² сСкунду β€” 7,6. Но Π΅Ρ‰Π΅ Π½Π΅ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ всС эти 7,6 β€” полСзная Ρ€Π°Π±ΠΎΡ‚Π°. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, сколько-Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ… β€” Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, сколько ΠΏΠΎΠ»ΡŒΠ·Ρ‹ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ, ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ послС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ 0,5 с Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ самой машинС. ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, которая приходится Π½Π° само транспонированиС, стала 4,8 Π“Π‘/с. Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ остался запас, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ, ΠΌΡ‹ ΠΈΠ· 20-ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠΉ эффСктивности ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 60-ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΡƒΡŽ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ 80% ΠΈΠ»ΠΈ 95%.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ доступ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VTune ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ инструкции сгСнСрированы для доступа ΠΊ элСмСнтам массива. Π–Π΅Π»Ρ‚Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ слСва Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ адрСса ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ транспонированной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. И это, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ инструкции, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Но дальшС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ, остановимся ΠΈ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡ‚ΠΎΠ³ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ C++: совмСщаСм ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π”ΠΎΠΊΠ»Π°Π΄ ЯндСкса

О Ρ‡Π΅ΠΌ я сСгодня Π²Π°ΠΌ рассказал? ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ совСт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ β€” ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ, Π°ΠΌΠΎΡ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ. Плюс Π·Π° счСт блочности ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ доступа.

Вынос Π°Π»Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ ΠΈΠ· ΡƒΠ·ΠΊΠΈΡ… мСст β€” это Ρ‚ΠΎΠΆΠ΅ ΠΈΡ… амортизация. И Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ скорости доступа Π·Π° счСт фиксации Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² Π² памяти.

По ΠΏΠΎΠ²ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° β€” ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для поиска ΡƒΠ·ΠΊΠΈΡ… мСст Β«Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС». Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это позволяСт ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½Ρ‹ ΠΌΡ‹ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ дальшС, ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π² ΠΊΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ.

На этом Ρƒ мСня всС. Если Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ CatBoost ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΎ Π½Π΅Π³ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅, β€” Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π° Π₯Π°Π±Ρ€Π΅, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Π½Π°ΠΌ Π½Π° GitHub, ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ. Π‘ΠΎΠ»ΡŒΡˆΠΎΠ΅ спасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com