소개:
C 17에서는 두 가지 상수를 도입했습니다. std::hardware_destructive_interference_size 및 std::hardware_constructive_interference_size, 다양한 하드웨어 아키텍처에서 최적의 성능을 위해 데이터 구조의 정렬 및 레이아웃을 용이하게 합니다.
이러한 상수는 대상에 대한 대략적인 L1 캐시 라인 크기를 제공하기 위한 것입니다. Architecture.
다음을 고려하세요. 예:
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. }
이 예에서 alignas 속성은 상수를 사용하여 data.a 및 data.b가 진정한 공유를 위한 최적의 정렬 및 메모리 레이아웃을 갖도록 보장합니다.
예, 이것이 문제가 될 수 있습니다. 상수는 모든 대상 컴퓨터에 대해 정확한 캐시 라인 크기를 제공한다고 보장되지 않습니다.
그러나 다음과 같은 시스템별 정보를 기반으로 보다 정확한 값을 제공하기 위해 고유한 상수나 매크로를 정의할 수 있습니다.
#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
위 내용은 `std::hardware_destructive_interference_size` 및 `std::hardware_constructive_interference_size`는 L1 캐시 라인 크기와 어떤 관련이 있으며 사용 사례는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!