ARM architecture와 메모리 배리어

happyKYS의 이미지

안녕하세요. 메모리 배리어와 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)

메모리 배리어가 독립적으로 쓰이는 곳도 있습니다. 이렇게 사용되는 이유를 아시는지요? 위에서 왜 ACCESS_ONCE(*p)가 쓰이는지에 대한 답변이면 양쪽 다 설명이 될 것 같습니다.
위를 보면 ACCESS_ONCE(*p) = (v)가 어떤 특별한 루프문 같은 내부에서 쓰인것도 아니고 바로 위에서 메모리 배리어로 메모리 연산에 대한 장벽을 치고 있음에도 바로 다음에 ACCESS_ONCE를 사용하고 있는 이유가 잘 이해가 가지 않습니다.
메모리 배리어랑 별개로 메모리 직접 접근으로 최적화를 피하려는 의도인가요?

3. smp_mb와 같은 연산들은 ARM에서는 (v7 이후) dmb, dsb, isb 와 같은 전용 명령어로 매핑이 되는데 이런 명령어들의 경우 서로 다른 core에서 실행되는 경우까지 장벽을 쳐주는 것이 맞는지 궁금하네요. 또 이게 파이프 라이닝의 현재 메모리 r/w 단계에 진입한 명령어에 대해서 유효한건지 궁금하네요.

3.1 예를 들어, smb_mb() 명령어에 진입하면, 이 명령어가 수행된 해당 코어 뿐 아니라 다른 코어들에서 실행되는 메모리 연산까지 기다려 주는 것인지.

3.2 이 명령어가 실제 실행되는 파이프 라이닝 단계에서 memory r/w 파이프 라인 단계에 걸쳐있는 다른 명령어들에 대해서 유효한건지, 아직 memory r/w 파이프 라인 단계는 아니지만 fetch, decode 등의 단계에서도 memory r/w 코드인 명령어들에 대해서도 유효한건지 궁금하네요.

답변이 달릴지는 모르겠지만.. 혼자 끙끙대기에 답답해서 한번 올려봅니다.

감사합니다.

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.