C 11은 잠금 없는 std::atomic
x86_64는 잠금을 사용하여 수행되는 double에 대한 다음 원자 연산을 지원합니다. 무료 지침:
안타깝게도 캐시 일관성 시스템 전체에서 128b 또는 256b 벡터 저장 또는 로드의 원자성을 보장할 수 있는 방법이 없습니다. 그러나 정렬된 벡터의 경우 벡터 로드를 사용하고 찢어질 위험 없이 공유 이중 배열에 저장할 수 있습니다.
원자성 16B 로드가 필요한 경우 유일한 옵션은 want=expected로 잠금 cmpxchg16b를 사용하는 것입니다. 성공하면 기존 값을 그 자체로 바꿉니다. 실패하면 이전 내용을 얻게 됩니다. 이 "로드" 오류는 읽기 전용 메모리에 발생하므로 이 작업을 수행하는 함수에 포인터를 전달할 때 주의해야 합니다.
Atomic 16B Store와 RMW는 둘 다 명백한 방식으로 cmpxchg16b 잠금을 사용할 수 있습니다. 이로 인해 순수 저장소는 일반 벡터 저장소보다 비용이 훨씬 더 많이 들며, 특히 cmpxchg16b를 여러 번 재시도할 경우 더욱 그렇습니다. 그러나 원자 RMW는 이미 비용이 많이 듭니다.
16B 객체를 원자적으로 업데이트할 수 있지만 8B 절반을 별도로 읽을 수 있습니다. 그러나 컴파일러는 이를 명확하게 표현하는 방법을 제공하지 않으며 cmpxchg16b 인라인 처리는 컴파일러 개발자의 지속적인 고려로 인해 신뢰할 수 없습니다.
위 내용은 x86_64는 Double 및 SSE/AVX 벡터에 대한 원자적 연산을 지원합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!