Skip to content

Commit 483951b

Browse files
conNULLcopybara-github
authored andcommitted
Update the crc32 dynamic dispatch table with newer platforms.
Up to 13% performance improvement for the platforms affected. PiperOrigin-RevId: 789033088 Change-Id: I1d74360377e3c40dfaae2108ec55f907960d177a
1 parent a9268d5 commit 483951b

3 files changed

Lines changed: 31 additions & 1 deletion

File tree

absl/crc/internal/cpu_detect.cc

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,14 @@ CpuType GetIntelCpuType() {
145145
}
146146
case 0x5e: // Skylake (client)
147147
return CpuType::kIntelSkylake;
148+
case 0x6a: // Ice Lake
149+
return CpuType::kIntelIcelake;
150+
case 0x8f: // Sapphire Rapids
151+
return CpuType::kIntelSapphirerapids;
152+
case 0xcf: // Emerald Rapids
153+
return CpuType::kIntelEmeraldrapids;
154+
case 0xad: // Granite Rapids
155+
return CpuType::kIntelGraniterapidsap;
148156
default:
149157
return CpuType::kUnknown;
150158
}
@@ -210,6 +218,14 @@ CpuType GetAmdCpuType() {
210218
return CpuType::kUnknown;
211219
}
212220
break;
221+
case 0x1A:
222+
switch (model_num) {
223+
case 0x2:
224+
return CpuType::kAmdTurin;
225+
default:
226+
return CpuType::kUnknown;
227+
}
228+
break;
213229
default:
214230
return CpuType::kUnknown;
215231
}
@@ -259,6 +275,7 @@ CpuType GetCpuType() {
259275
case 0xd40: return CpuType::kArmNeoverseV1;
260276
case 0xd49: return CpuType::kArmNeoverseN2;
261277
case 0xd4f: return CpuType::kArmNeoverseV2;
278+
case 0xd8e: return CpuType::kArmNeoverseN3;
262279
default:
263280
return CpuType::kUnknown;
264281
}

absl/crc/internal/cpu_detect.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ enum class CpuType {
3030
kAmdNaples,
3131
kAmdMilan,
3232
kAmdGenoa,
33+
kAmdTurin,
3334
kAmdRyzenV3000,
3435
kIntelCascadelakeXeon,
3536
kIntelSkylakeXeon,
3637
kIntelBroadwell,
38+
kIntelIcelake,
39+
kIntelSapphirerapids,
40+
kIntelEmeraldrapids,
41+
kIntelGraniterapidsap,
3742
kIntelSkylake,
3843
kIntelIvybridge,
3944
kIntelSandybridge,
@@ -42,7 +47,8 @@ enum class CpuType {
4247
kArmNeoverseV1,
4348
kAmpereSiryn,
4449
kArmNeoverseN2,
45-
kArmNeoverseV2
50+
kArmNeoverseV2,
51+
kArmNeoverseN3,
4652
};
4753

4854
// Returns the type of host CPU this code is running on. Returns kUnknown if

absl/crc/internal/crc_x86_arm_combined.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,13 +605,19 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
605605
case CpuType::kAmdRome:
606606
case CpuType::kAmdNaples:
607607
case CpuType::kAmdMilan:
608+
case CpuType::kAmdGenoa:
609+
case CpuType::kAmdTurin:
608610
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
609611
3, 1, CutoffStrategy::Fold3>();
610612
// PCLMULQDQ is fast, use combined PCLMULQDQ + CRC implementation.
611613
case CpuType::kIntelCascadelakeXeon:
612614
case CpuType::kIntelSkylakeXeon:
613615
case CpuType::kIntelBroadwell:
614616
case CpuType::kIntelSkylake:
617+
case CpuType::kIntelIcelake:
618+
case CpuType::kIntelSapphirerapids:
619+
case CpuType::kIntelEmeraldrapids:
620+
case CpuType::kIntelGraniterapidsap:
615621
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
616622
3, 2, CutoffStrategy::Fold3>();
617623
// PCLMULQDQ is slow, don't use it.
@@ -623,6 +629,7 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
623629
case CpuType::kArmNeoverseN1:
624630
case CpuType::kArmNeoverseN2:
625631
case CpuType::kArmNeoverseV1:
632+
case CpuType::kArmNeoverseN3:
626633
return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
627634
1, 1, CutoffStrategy::Unroll64CRC>();
628635
case CpuType::kAmpereSiryn:

0 commit comments

Comments
 (0)