Tuesday, March 17, 2009

임창정 11집



머라 할 말이 없다...

들으면서도 그저 당황스러울 뿐.

Monday, March 16, 2009

cudaMemcpy2D를 이용한 초간단 zero-padding

오랫만에 cuda 관련 포스트(지만 그닥 쓸모는 없어보인다.)

어떤 알고리즘을 구현하다보면 (특히 dsp알고리즘) 뒤에 0을 붙여주는 과정이 필요할 때가 생기는데, 이를 zero-padding이라 한다. 예를 들어 rgb데이터를 rgba데이터로 표시하고 싶다하면, 메모리상에는 linear로 rgbrgbrgbrgb... 이렇게 가지만, rgb0rgb0rgb0rgb0...이렇게 한 바이트씩 더 주고 싶은 경우라던가.

cpu에서 한다면 for문을 한개 돌려서 이런 식으로 할 수 있다.

mem=0, src=0;
for (int i=0; i< n; i++)
{
tempimg[mem++] = img1[src++];
tempimg[mem++] = img1[src++];
tempimg[mem++] = img1[src++];
tempimg[mem++] = 0; // padding zeros
}


cudaMemcpy2D를 이용하면 이것을 한 줄로 쓸 수 있다. 일단 cudaMemcpy2D 함수의 문법을 보면,

cudaError_t cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind);

여기서 spitch와 dpitch를 다르게 주는 것으로 가능. 위의 for문은 간단히 이렇게 쓸 수 있다.

cudaMemcpy2D(tempimg, 4, img1, 3, 3, n, cudaMemcpyHostToHost);


주의할 점은, 한 줄로 간단히 쓴다고 해서 더 빠르다는 것은 아니라는 점. 실제로 for문을 돌리는 것이 더 빨랐더랬다. 그치만 gpu메모리에 다시 memcpy를 해야하는 경우라면 좀 다를지도 모르겠다.

(cuda 포럼에 가보면 cudaMemcpy2D 함수가 느리다는 불평이 꽤나 많음.)

Sunday, March 15, 2009

아내가 결혼했다



손예진은 여전히 예쁘고, 김주혁이랑 연기도 잘하지만,
도대체 뭔 소린지 알기어려운 영화.
축구 어쩌구 얘기로 풀어나가보려 한 것 같긴 한데,
특히 마지막 부분에서 얘기를 하다만 듯.

배가 아파서 열심히 화장실에서 힘을 줬는데,
조금 남아있는 게 신경쓰이는 기분이랄까.

와인샵에서

정신없이 바빴던 한 주를 뒤로 하고,
와인을 사러 들렀던 가게에서
그 동안 눈독들였던 와인을 사고 싶었지만,
이미 그 자리엔 다른 와인이 자리 잡고 있었다.

어떤 맛인지도 모르고, 어떤 향인지도 모르지만,
없어진 그 자리는 아쉬움이 남았다.
눈에 들어왔을 때, 집었어야 했다.
늘 그 자리에, 나를 위해 있는 건 아니었다.



대신 집어온, 전에 사려고 했던 것 보다는 비싼
전문가들이 무지 높은 점수를 줬던 와인.
스스로에게 상을 주듯이, 혀도 호강을 해보라고
그렇게 집어온 와인.

강한 꽃향기에 한 번 놀라고,
향기와는 전혀 다른, 혀를 누르는 묵직함에 또 한 번,
전문가의 높은 점수와는 상관없이
나에겐 더 좋은 와인이 있었으리라.

아마도, 나에겐 과분한 와인이었을지도.
하루가 지나고 다시 맛본 그 것은
강한 꽃향기도, 혀를 누르는 묵직함도 없었으니
내가 마시기엔 아직 어리고 조금 복잡한 것이었는지 모르겠다.

그저, 그런게 아니었을까...
원할 때 어찌되었던 붙들었어야 했지만,
그것도 어쩌면 이 와인처럼, 나에겐 과분한 것이었을지도
나에겐 알 수 없는 일.

하긴......
나를 만나 자신의 능력을 보여주지 못한 이 와인도,
그저 벗겨진 라벨과 그저 그런 기억으로만 남을테니,
조금 억울할 지도 모르겠다.

코르크를 열어 공기를 만나버린 와인처럼,
얼마나 더 버틸 수 있을지 모르겠다 싶다.
아니 아직 향이 남아있긴 한 걸까?
와인병에 담겨있다고 다 와인은 아닐테니까.