mmx

요새 matrix 연산을 이용한 프로그램 조각 몇 가지를 짜보고 있는데, mmx 같은 SIMD instruction 을 사용하면 matrix 연산의 속도를 확 올릴 수 있지 않을까 싶은 생각이 들길래 inline asm 을 이용해서 간단한 mmx 코드를 만들어보았습니다.

위와 같은 코드를 작성하고, gcc mmx.c 를 통해 컴파일해서 돌려보니 간단히 성공 -_-v

c 코드를 사용할 경우 s1[0] load, s2[0] load, multiply, save to d[0] 와 같은 인스트럭션을 네 번 반복해서 실행하는 반면 mmx 를 사용할 경우 movq 를 통해 연속된 WORD 네 개를 mmx register 로 복사하고, pmullw 를 이용 4 개의 값을 한 인스트럭션에 연산을 하는 것을 통해 속도를 확 끌어올릴 수 있는거죠. ;)

다만 헷갈리는게 인텔의 메뉴얼에 나와있는 인자 순서와, AT&T 방식이 달라서 좀 헷갈리는군요.

  • Intel: movq mm0, [s1]
  • AT&T: movq (s1), %mm0

Intel 메뉴얼에서 설명하는 바에 의하면 첫번째 operland 가 destination 이 되고, 두번째 operland 가 destination 이 되는 반면 AT&T 방식에서는 거꾸로 첫번째 operland 가 src, 두번째 operland 가 dst 가 됩니다.

또한 주소값을 넘겨줄 때 intel 방식은 [] 로 감싸주면 되지만, AT&T 에서는 () 로 감싸줘야하고, 레지스터 이름 앞에 %를 붙여줘야 하는 규칙도 있어서 뭔가 대빵 귀찮네요. -_-;

참고로 gcc 에서 -masm=intel 옵션을 사용하면 intel 방식으로 어셈블리 명령어를 작성하는 것도 가능합니다.

p.s) movq 는 4개의 WORD 를 mmx register 로 복사하는 명령인데 –;; mm0 ~ mm7 식으로 64bit register name 을 써줘야 하는데 xmm0~xmm7 같은 sse 용 register 이름을 쓰는 바람에 잘못된 인스트럭션 사용이라고 계속 에러가나서 한참 헤맸네요;

wordpress: 최근 추가한 플러그인들…

여기저기 돌아다니다 보니 멋진 플러그인들이 많길래 이것저것 추가해보았습니다.

1. Korean Trackback
이글루스에서 오는 트랙백이 euc-kr 로 인코딩되어 있기 때문에, utf-8 기반의 워드프레스에선 이글루스에서 보내는 트랙백을 제대로 받을 수 없기에… 직접 플러그인을 작성해서 추가해줬습니다. -_-v

url: http://b.mytears.org/2006/09/396

2. iG:Syntax Hiliter
혹시나 포스트에 프로그램 코드를 삽입할 일이 있을 경우를 대비해서, 코드 하일라이팅을 위한 플러그인을 추가했습니다. 상당히 많은 언어를 지원합니다만 sh (쉘스크립트) 는 지원하지 않아서 약간 아쉽네요. 사용 예는 아래와 같습니다.

url: http://blog.igeek.info/wp-plugins/igsyntax-hiliter/

3. wp-scripts, ajax-spoiler
wp-scripts 는 prototype.js 등을 헤더에 삽입해주는 역할을 하고, ajax-spoiler 는 tt 에서와 같이 텍스트를 숨겼다가 보여줬다 하는 기능을 사용할 수 있도록 해줍니다.

tt 처럼 그냥 단순히 보였다 감췄다 정도가 아니라 애니메이션 효과까지 줄 수 있어서 상당히 멋드러집니다. ;)

url: http://082net.com/tag/wp-scripts/
url: http://082net.com/tag/aj-spoiler/

4. bad behavior
request 를 분석해서 봇이라고 생각되면 차단합니다. 적용 후 확실히 스팸이 줄었습니다. (하루 120 통 쯤에서 10통 이하.. 그나마 akismet 에 나머지는 걸립니다.)

url: http://www.homelandstupidity.us/software/bad-behavior/

조금만 부지런하면 이래저래 편리해지는 아름다운 워드프레스 세상입니다. 혹시 또 멋진 플러그인들을 알고 계신 분들은 트랙백 부탁드리겠습니다. ;)