PĂ«r tĂ« pĂ«rfshirĂ« nĂ« degĂ«n e ardhshme tĂ« bĂ«rthamĂ«s Linux 6.13, Ă«shtĂ« propozuar njĂ« patch me njĂ« implementim tĂ« ripĂ«rpunuar tĂ« algoritmit tĂ« llogaritjes sĂ« kontrollit CRC32C. Kodi i implementimit tĂ« CRC32C Ă«shtĂ« tkurrur rreth 10 herĂ« (nga 4546 nĂ« 418 byte). Kur mbrojtja retpoline ndaj sulmeve tĂ« klasĂ«s Spectre Ă«shtĂ« e çaktivizuar, rritja e performancĂ«s me implementimin e ri arrin deri nĂ« 11.8% nĂ« procesorĂ«t AMD Zen 2, 6.4% nĂ« Intel Emerald Rapids dhe 4.8% nĂ« Intel Haswell. Kur retpoline Ă«shtĂ« e aktivizuar, rritja e performancĂ«s Ă«shtĂ« mĂ« e dukshme dhe arrin deri nĂ« 66.8% nĂ« sistemet me procesorĂ« Intel Emerald Rapids, 35.0% nĂ« Intel Haswell dhe 29.5% nĂ« AMD Zen 2. retpoline enabled | 512 | 833 | 1024 | 2000 | 3173 | 4096 | âââââââ+ââ-+ââ-+ââ-+ââ +ââ-+ââ-+ Intel Haswell | 35.0% | 20.7% | 17.8% | 9.7% | -0.2% | 4.4% | Intel Emerald Rapids | 66.8% | 45.2% | 36.3% | 19.3% | 0.0% | 5.4% | AMD Zen 2 | 29.5% | 17.2% | 13.5% | 8.6% | -0.5% | 2.8% | retpoline disabled: | 512 | 833 | 1024 | 2000 | 3173 | 4096 | âââââââ+ââ-+ââ-+ââ-+ââ +ââ-+ââ-+ Intel Haswell | 3.3% | 4.8% | 4.5% | 0.9% | -2.9% | 0.3% | Intel Emerald Rapids | 7.5% | 6.4% | 5.2% | 2.3% | -0.0% | 0.6% | AMD Zen 2 | 11.8% | 1.4% | 0.2% | 1.3% | -0.9% | -0.2% |
Versioni origjinal i CRC32C përfshinte 128 cikle të zgjatur (unroll), që solli në një kod mjaft të madh. Meqenëse procesorët modernë me mbështetje për ekzekutimin e instrukcioneve jashtë rendit (out of order) mund të ekzekutojnë komanda paralelisht, optimizimi i tillë i komandave të kalimit në cikle rezultoi i tepruar dhe solli vetëm në një kod jashtëzakonisht të madh. Në vend të 128 iteracioneve, në variantin e ri mbetën vetëm 4, gjë që jo vetëm që reduktoi ndjeshëm volumin e kodit, por gjithashtu përshpejtoi realizimin e operacionit.
Burimi: opennet.ru
