x86_64의 원자 부동 소수점 연산
C는 기본적으로 원자 이중 연산을 지원하지 않지만 잠금 없는 원자
x86_64의 원자 벡터 작업의 경우 직접적인 하드웨어 지원이 없습니다. 그러나 정렬된 128비트 및 256비트 로드 및 저장은 일반적으로 원자성이 보장됩니다. 정렬되지 않은 벡터 연산의 경우 원자성 보장이 덜 명확합니다.
이중 및 벡터 연산에 대한 어셈블리 수준 지원
x86_64는 원자성 연산에 대한 어셈블리 수준 지원을 제공합니다. 복식과 벡터:
MSVC 2017 Lock-Free 원자
MSVC 2017 구현 잠금 없는 원자을 구현합니다. 이중 폭 정수 레지스터를 사용하는 연산. 예를 들어 로드 작업에는 다음이 포함됩니다.
CAS: movq QWORD PTR [dst_addr], rax // 64-bit CAS
추가 작업에는 다음이 사용됩니다.
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax // 128-bit CAS
Atomic RMW(Read-Modify-Write) 작업
fetch_add와 같은 원자적 읽기-수정-쓰기(RMW) 작업에는 CAS 루프가 필요합니다. 구현. x86_64에서 CAS 명령어는 16바이트 작업(cmpxchg16b)을 지원합니다.
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax
CAS 루프는 원자 RMW 기능을 제공하지만 원자 로드 및 저장보다 비용이 더 많이 듭니다.
추가 참고사항
위 내용은 x86_64 아키텍처에서 원자 부동 소수점 및 벡터 연산은 어떻게 처리됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!