memcpy의 다양한 버전의 속도차이 그리고 cpu prefetch

익명 사용자의 이미지

음 질문은 아니고요..

오늘 몇가지 실험과 그 데이터를 가지고 그래프 작업을 했는데
데이터가 잼있어서 공개합니다. ^^;

다양한 블럭 사이즈(혹은 정렬되고 안되고)와,
여러가지 방법으로 memcpy를 하면서 벤치마크를 해보았습니다.
제가 벤치마크 소스를 만든것은 아니고..
Martin Pool이란 사람이 한 테스트 인데,

mmx레지스터를 사용한 메모리 복사와,
cpu cache prefetch등을 사용해서 실험 결과가 여러가지를
생각하게 하는군요..

http//www.ezdoum.com/stories.php?story=02/05/08/2994599

익명 사용자의 이미지

speed.c 소스를 보시면 아시겠지만 다른 테스트는 메모리복사를 2번 하
는 반면 arjanv의 테스트는 복사를 1번만 합니다. 그러니 결과도 arjanv
쪽이 월등하게 뛰어날 수 밖에 없죠. 게다가 복사를 2번하는 것도 의미
가 없는 것이, 현실 세계에서는 from에서 to로 뭔가를 복사했다가 다시
to에서 from으로 덮어씌울 일은 거의 없습니다. 거기다 mmx_memcpy()에
선 블럭 사이즈가 64의 배수일 때에도 무조건 memcpy()를 재호출함으로
써 작은 블럭 벤치마크에서 엄청난 손해를 보게 됩니다. 그외 다른 함수
에서는 그 부분이 누락되어 있어 그만큼 이득을 보게 되구요. 이 모든 점
을 다 수정하고 테스트하면 결과도 상당히 다르게 나옵니다.

이 벤치마크는 실수로 짠 거라고 보기엔 석연치 않은 점이 너무 많습니
다. 일부러 prefetch 성능을 과대 선전하기 위해 조작한 듯한 의도까지
느껴지는군요.

익명 사용자의 이미지

벤치 마크 테스트에서 사용된 소스는 많은 비교거리를 제공하고 있습니다.
우선 mmx_memcpy()는 커널에서 사용되는 소스를 그대로 사용한 것으로
이것이 꼭 최대의 성능을 낸다는 의미가 아닙니다.

arjanv의 테스트 소스에서 한번만 복사하는 것은 사실입니다.
그런데 주목하셔야 할것이 정렬된 부분에만 이 벤치마크가 들어 있다는
것이죠.. 제가 평가한 부분은
한쪽 짜리 복사만 할때 각 prefetch의 상황의 성능 마크이지요..

복사를 from to에서 to from으로 한것은,
캐쉬가 적용되는 부분을 고려한 상황으로
빼고 싶으면 빼도 되겠죠.

저의 관점은 L1,L2 캐쉬의 사용과, mmx레지스터의 사용,
그리고 prefech겠죠.. prefetch도 타이밍이 중요한지라
arjanv의 경우엔 서로 다른 방법을 하는 거죠..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.