안녕하세요. 메모리 배리어와 ILP, volatile에 대한 소소한 궁금증이 있어 질문 드립니다
(논쟁이 많은 영역이므로 아무쪼록 시스템에 이해도가 높으신 분들의 정확한 답변 부탁드립니다)
1. ARM에서 ILP가 일어나는 것에 대해 명시적으로 확인해볼 방법이나 코드가 있을까요?
- 일어난다고만 알고 있지 명시적으로 확인해본 적이 없어서요.
2. volatile하고 메모리 배리어는 엄밀히 다른 의미입니다만, 가끔 혼용해서 쓰거나 독립적으로 사용되는 구문도 찾을 수 있는데요.
예를 들어 다음 구문에서 처럼 혼용되서 쓰이는 곳이 있는 반면(사실 아래 구문에서도 왜 ACCESS_ONCE가 쓰인건지는 이해가 가지 않습니다.
#define smp_store_release(p, v) \
do {
compiletime_assert_atomic_type(*p); \
smp_mb(); \
ACCESS_ONCE(*p) = (v); \
} while(0)