CPU캐시
CPU인스트럭션 리오더링
같은 하드웨어 동작때문에
어셈블리만 보지말고 CPU하드웨어 구조를 알아야댐
익명(223.62)2022-10-29 16:26
답글
이건 특히 인텔 이후에 나온 소위 RISC기반 아키텍처가 심함
익명(223.62)2022-10-29 16:26
답글
걍 C++11에 추가된 메모리모델 공부ㄱ
익명(223.62)2022-10-29 16:27
답글
뭘로 공부해야함 - dc App
Zuto(chotnt741)2022-10-29 16:51
답글
Effective Modern C++
아니면 걍 C++ memory model 구글링해도 예제랑 강의 많이나옴
영어자료 공부하면서 번역한 한국어 블로그도 있고
익명(223.62)2022-10-29 16:56
인텔 CPU는 이미 INC, DEC라고 1 증감 연산자가 있는데 문제는 이게 8086 시절에 정립된 명령어라 멀티스레드 환경에서는 원자적 연산을 보장할 수 없을지도 모름. 상식적으로 여러 실행 유닛이 서로 유한한 거리까지(같은 칩 내부일수도 있고, 칩 너머일수도 있고) 떨어져있을수도 있는데 제로 코스트의 완벽한 동기화 단일 명령어가 존재하리라고 생각해? 멀티코어 프로세서가 같은 명령어를 동시에 실행해도 클럭은 각자 따로 놀기 때문에 절대적인 실행 기준점이 없어서 걍 누가 먼저 실행이 완료 처리되냐에 따라 갈림.
앙감사띠 - dc App
그래서 단 한번의 인스트럭션으로 처리를 할 수 있는 클래스 써서 하기도 함
그게 머죠 - dc App
자바로 치면 AtomicInteger같은거
아 atomic이 그런 내용인건가 - dc App
실제로는 atomic하게 변수를 증가시키려면 x86에선 명령어 두 개 (lock xadd) 써야 함
https://www.felixcloutier.com/x86/xadd
CPU 구조에 따라서 단일 insn 으로도 에러가 발생 가능함 - dc App
핵심은 critical section 으로 지정해서 보호하는 것 - dc App
ㅇㅎ
어셈블리레벨x 기계어레벨x CPU하드웨어레벨o
CPU캐시 CPU인스트럭션 리오더링 같은 하드웨어 동작때문에 어셈블리만 보지말고 CPU하드웨어 구조를 알아야댐
이건 특히 인텔 이후에 나온 소위 RISC기반 아키텍처가 심함
걍 C++11에 추가된 메모리모델 공부ㄱ
뭘로 공부해야함 - dc App
Effective Modern C++ 아니면 걍 C++ memory model 구글링해도 예제랑 강의 많이나옴 영어자료 공부하면서 번역한 한국어 블로그도 있고
인텔 CPU는 이미 INC, DEC라고 1 증감 연산자가 있는데 문제는 이게 8086 시절에 정립된 명령어라 멀티스레드 환경에서는 원자적 연산을 보장할 수 없을지도 모름. 상식적으로 여러 실행 유닛이 서로 유한한 거리까지(같은 칩 내부일수도 있고, 칩 너머일수도 있고) 떨어져있을수도 있는데 제로 코스트의 완벽한 동기화 단일 명령어가 존재하리라고 생각해? 멀티코어 프로세서가 같은 명령어를 동시에 실행해도 클럭은 각자 따로 놀기 때문에 절대적인 실행 기준점이 없어서 걍 누가 먼저 실행이 완료 처리되냐에 따라 갈림.