matrix multiply with mmx #2

대강 생각을 해보니 정말 mmx 를 이용해서 빠르게 연산을 하려면 위와 같이 하는게 가장 빠르겠군요. 다만 레지스터를 많이 쓰고 완전히 asm 코딩을 해야한다는 게 조금 귀찮겠군요. ;)

위의 다이아그램에 있는 과정을 통해 4×4 matrix * 4×4 matrix 의 한 row 씩을 계산해낼 수 있습니다. 대강 계산했을 때 3배 이상의 속도 향상이 있을거라고 예상되던데 과연~

코드로 옮기니 위와 같군요. 중간에 실수로 바이트오더를 헷갈려서 연산 결과가 뒤집혔었습니다. 정상적인 결과는 250 260 270 280 이 나와야 하는데 280 270 260 250 이 나와버리더군요. 아아 이거 다시 하고 싶은 작업이 아니네요;

흐흣 그래도 오랫만에 어셈블리 관련된 것들을 생각하고 있는데, 이것도 가끔 하니까 재밌네요. 근데 길어지면 할만하지 않다는거 -_-!

p.s) 전체 연산 코드를 보고 싶으시면 http://mytears.org/resources/mysrc/c/mmx.c 를 보시길 ;)

Related Posts

Published by

3 thoughts on “matrix multiply with mmx #2”

  1. jenix// 흐흐 먼저 연습장에 그려놓고 옮긴거라;; 흐흐 하지만 노가다 ㅠ_ㅠ

    막상 좀 더 생각해보니 pmaddsw 후에 paddw 를 두 번 해주고 packssdw 는 것도 가능하고, packssdw 를 두 번 해주고 pmaddsw 를 해주는 것도 가능한데 과연 어떤게 더 빠를까 고민이…

    아무래도 pack 은 거의 register 내에서의 값 이동 정도밖에는 안되고 add 는 그래도 산술연산이니까 pack 을 두 번 하고 add 를 한 번하는게 더 빠를거 같은데…

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">