Introduction :
C 17 a introduit deux constantes, std : :hardware_destructive_interference_size et std::hardware_constructive_interference_size, pour faciliter l'alignement et la disposition des structures de données pour des performances optimales sur différentes architectures matérielles.
Ces constantes sont destinées à fournir une approximation de la taille de la ligne de cache L1 pour l'architecture cible.
Considérons l'exemple suivant :
struct CacheOptimizedStruct { alignas(std::hardware_constructive_interference_size) int a; alignas(std::hardware_constructive_interference_size) int b; }; int main() { CacheOptimizedStruct data; // Accessing data.a and data.b in a tight loop will likely benefit from better cache locality. }
Dans cet exemple, l'attribut alignas utilise les constantes pour garantir que data.a et data.b ont un alignement et une disposition de la mémoire optimaux pour un véritable partage.
Oui, cela peut être un problème. Il n'est pas garanti que les constantes fournissent des tailles de ligne de cache précises pour toutes les machines cibles.
Cependant, vous pouvez définir vos propres constantes ou macros pour fournir des valeurs plus précises basées sur des informations spécifiques au système, telles que :
#ifdef KNOWN_L1_CACHE_LINE_SIZE constexpr std::size_t cache_line_size = KNOWN_L1_CACHE_LINE_SIZE; #else constexpr std::size_t cache_line_size = std::hardware_destructive_interference_size; #endif
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!