가야할 때

Posted at 2008/03/09 14:54 // in Essay // by Daniel
예전부터 미리 준비하긴 했는데 -퇴장전략
그동안 뮤지컬 한 번 더 하고
찬양인도라는 것도 한달 내내 해보기도 하고

아프네요
바랐던 건 좀 더 아름답고 깔끔한 것이었으나
실제로는 약간 만신창이가 되어 난도질 당하는 느낌
그리고 잘못하고 있다는 느낌 :-)

이제 변하는 과정에서 저는 비켜서 주어야 할 것 같습니다.

아직은.. 확단은 아직 못했지만
그렇게 되어가고 있는 것 같습니다.

조용히 아름답게 사라질 각오를 하기
겸손하고 온유하기
사랑하고 높여주기
쓰임 받지 못해도 섭섭해하지 않기
밀려나도 다른 자리 찾기
작은 일에도 충성하기...
지금의 좋은 일에 우쭐해하지 말기

가야 할 때가 언제인가를
분명히 알고 가는 이의
뒷모습은 얼마나 아름다운가.

봄 한 철
격정을 인내한
나의 사랑은 지고 있다.

분분한 낙화….
결별이 이룩하는 축복에 싸여
지금은 가야 할 때.

무성한 녹음과 그리고
머지않아 열매 맺는
가을을 향하여
나의 청춘은 꽃답게 죽는다.

헤어지자
섬세한 손길을 흔들며
하롱하롱 꽃잎이 지는 어느 날.

나의 사랑, 나의 결별
샘터에 물 고인 듯 성숙하는
내 영혼의 슬픈 눈.
- 이형기, 낙화 -

그래도...
좋아합니다. 찬양은.. 하나님은..
크리에이티브 커먼즈 라이센스
Creative Commons License

웹기반 설치형 스프레드시트 wikicalc

Posted at 2008/03/07 13:34 // in Tips/Web // by Daniel

사용자 삽입 이미지

 pearl CGI로 된 스프레드 쉬트 기능이 들어간 위키입니다.
재밌네요


크리에이티브 커먼즈 라이센스
Creative Commons License

wget으로 웹페이지에 링크돼 있는 문서들 다 받기

Posted at 2008/03/06 13:43 // in Tips/Utility programs // by Daniel
리눅스의 유틸리티 wget은 http나 https, ftp로 파일을 다운로드 받을 때 커맨드라인에서 쉽게 받을 수 있는 프로그램입니다.
웹페이지가 있고 그 페이지에 여러 페이지나 자료의 링크가 있는데 이걸 다 받고 싶은 경우 wget 의 옵션을 사용하면 됩니다.
(예를 들어 강의 페이지의 자료들을 한꺼번에 받고 싶을 때 말이죠)

일단 해당 페이지를 받습니다.
$ wget URL

예를 들어
$ wget html://rommance.net/misc_path/a.html

그 다음 이 웹 페이지에서 나온 링크들을 전부 받습니다.
이제 사용하는 옵션은
-i : 뒤에 나오는 파일 안에 있는 URL을 다 다운로드 합니다.
-F : 파일을 html로 인식한다.
-B : Base URL(상대경로의 링크일 때 기본 베이스 주소)
이 세가지를 쓰면 됩니다.

$ wget -i a.html -F -B http://rommance.net/misc_path/

이런 식으로 사용하면 a.html 안에 있는 링크된 페이지와 자료들이 다 다운로드 됩니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

A Hardware/Software Framework for supporting Transactional Memory in a MPSoC Environment

Posted at 2008/03/04 01:14 // in Research/Papers Review // by Daniel
A Hardware/Software Framework for supporting Transactional Memory in a MPSoC Environment
Cesare Ferri  Brown University, Providence, RI
Tali Moreshet  Swarthmore College, Swarthmore, PA
R. Iris Bahar  Brown University, Providence, RI
Luca Benini  University of Bologna, Bologna, Italy
Maurice Herlihy  Brown University, Providence, RI


http://portal.acm.org/citation.cfm?id=1 ··· fulltext

멀티코어로 가는 대세 - 더이상 클럭을 올려서는 힘들고 여러개 코어로 나눠 일하는 concurrency 를 공략하는게 대세다
참고로 2003년 이후로는 거의 클럭이 올라가지 않고 있다.
클럭을 올려 속도를 빨리 하는 대신에 여러 코어에서 나눠 돌려서 전체적인 처리작업량을 늘리는 방법을 쓴다.
이렇게 하면 에너지(열)은 클럭주파수의 제곱에 비례하므로 낮은 클럭의 칩을 여러개 써서 높은 클럭 칩 하나로 일하는 것과 같은 성능을 낸다면 대체로 에너지를 더 적게 소모하고 열이 더 적게 나게 된다.
그러나 여러 코어에서 돌리려하면 일을 나누는 것, 그리고 나눠서 잘 돌아가게 관리해주는 게 필요하다.

예를 들어서 피자 집에서 배달을 시키는데 원래 한명이 배달하다가 손님이 많아져서 두명으로 늘렸다고 치자.
아무리 둘로 늘려도 효울이 두배로 늘려면 당연히 피자가 나오는 속도가 두배여야 한다.
그리고 혹, 오토바이나 피자 배달을 준비하기 위한 데크등이 공용된다면 공용되는 자원을 누가 먼저 사용하는지 규칙이 있어야 하고 한번에 한사람만 쓰도록 관리해줘야 한다.

원래 기존에 컴퓨터과학에서 많이 쓰던게 락(잠금)기법인데
잠가버려서 한번에 하나만 쓰게 보장된다.
그러나 혹시 락을 건 상태로 프로세스가 죽거나 잠들어버리면 다른 기다리는 프로세스들은 하염없이 기다리게 된다.
기타 여러 문제가 있는데 이걸 해결해보고자 transactional memory가 나왔었다.
최근에 멀티코어가 많이 나오면서 다시 재조명 받게 된 주제인데

컨셉은
  일단 해본다.
  그리고 잘 안되면 기다렸다 다시 한다.
이다.

그러니까 공유자원 A가 있다면
모든 각각의 프로세스에서
기본적으로 다른프로세스가 내가 자료 A를 처리하는 동안에 A를 바꾸지 않았다는 가정하에
일단 계산을 해본다.
프로세스1이 그랬다고 치고
그리고 A값을 아마 업데이트 할텐데
그 전에 혹시 다른 프로세스가 A를 바꿨다면 이 프로세스1은 바꿨다는 것을 인식하게 된다.(인식하는 방법은 이 논문에 나온 방법은 하드웨어적으로 Cache Coherency를 이용한다.)
이때 Abort가 발생한다.
그러면 자기가 했던 작업들을 다 취소하고 새로 시작한다.

락 Lock은 기본적으로 비관적으로 남이 반드시 내 자원을 침범할 것이라 보고 미리 자물쇠를 걸어두는데
TM(Transactional Memory)은 낙관적으로 내 자원이 남에게 침범받지 않았을 거라고 가정하고 일단 해보는 것이다.

첨부한 프리젠테이션자료에 나오는 그래프처럼 어떤 상황에서는 일반적인 Lock이 프로세서가 늘어나면 각 프로세서에서 소모하는 시간이 기하급수적으로 늘어나는데 비해
TM은 상당히 괜찮다.

사용자 삽입 이미지


Review한 이 논문은  이 TM을 임베디드 환경에 맞춰서 간단한 TM을 가진 프로세서를 설계해 시뮬레이션해보고 어땠는지 보는 것이다.
결론은
 "성능은 좋아진다.
 그러나 Critical Section(프로그램에서 공유자원 사용하는 부분)에서 하는 일이 적을 경우 오히려 TM 기능을 구현하기 위한 하드웨어의 전력 소모때문에
 전력은 일에 따라 TM쪽이 더 많이 소모되기도 한다.
 그래서 TM을 임베디드에 적용하려고 해도 너무 간단하게는 말고 좀더 설계에 신경써야 된다."
이다.
TM 자체를 처음 접하는 거라 공부삼아 리뷰했다. Cite된 논문들 읽는 것 벅찼다. 처음 보는 게 너무 많아서..
결국 교수님께 모르는 부분 집혀서 곤란도 당했다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Sei 주의 선하심이

Posted at 2008/03/04 00:58 // in Essay // by Daniel

주의 선하심이
더 좋은 것으로 내 영을
만족케 하시리

주 얼굴 향하면
그 눈길의 사랑이 나를
평안케 하시리


그래..
사람이 어떻게 모든 걸 갖출 수 있겠니
난 부족한 건
그냥 하나님 보고
울려고 그런다.

많이..

2008/03/03

크리에이티브 커먼즈 라이센스
Creative Commons License

격려가 필요

Posted at 2008/03/02 00:41 // in Essay // by Daniel
내게 필요한 것은 격려

믿어주기

칭찬해주기

가까운 사람에게 받아봤으면..

2008/02/28
크리에이티브 커먼즈 라이센스
Creative Commons License

Fibonacci 함수

Posted at 2008/02/28 11:02 // in Programming // by Daniel
Recursive version
64비트 지원하도록 바꿈.
#include  <stdio.h>   /* Required to use printf() */
typedef unsigned long long u64;
typedef long long i64;
//#define i64   (long long)
/* Function l(n1,n2,n) calculates f(n) using parameters n1 and n2
 *  * to store the two previously calculated Fibonacci numbers */
long long l(long long n1,long long n2,long long n) {
        //printf("l(%lld,%lld,%lld)=%lld\n", n1, n2, n, (n<2 ? n1 : l(n1+n2, n1, n-1)));
    return n<2 ? n1 : l(n1+n2, n1, n-1);
}
/* Function f(n) returns the n'th Fibonacci number
 *  * It uses ALGORITHM 2B: SIMPLE RECURSION
 *   */
long long f(long long n) {
    return l(1,1,n);
}
/* Function f_print(n) prints the n'th Fibonacci number */
void f_print(long long n) {
    printf("%lldth Fibonacci number is %lld\n",n,f(n));
}
/* Function main() is the program entry point in C */
int main(int argc, char* argv[])
{

        long long n=45;
        if (argc > 1)
                n = (long long) atoi( argv[1]);
    f_print(n);
    return 0;
}
Non recursive version
#include <stdio.h>
unsigned int f(int n) {
    int i;
    unsigned int n1=1,n2=1;

    for(i=1; i<=n; i++) {
        n1+=n2;
        n1^=n2^=n1^=n2; /* C trick to swap n1 and n2 */
    }
    return n1;
}
/* Function f_print(n) prints the n'th Fibonacci number */
void f_print(int n) {
    printf("%dth Fibonacci number is %lu\n",n,f(n));
}

int main(int argc, char* argv[])
{

        int n=45;
        if (argc > 1)
                n = atoi( argv[1]);
        f_print(n);

        return 0;
}
테스트용 프로그램이 필요해서 찾았다. http://cubbi.com/fibonacci/c.html
크리에이티브 커먼즈 라이센스
Creative Commons License

사랑은 일에 굴복한다.

Posted at 2008/02/27 14:04 // in Essay // by Daniel

사용자 삽입 이미지
사랑은 일에 굴복한다.
만일 사랑으로부터 빠져 나오기를 원한다면
바쁘게 되라.
그러면 안전할 것이다.

- 오비디우스

지하철, 동작역에서..

크리에이티브 커먼즈 라이센스
Creative Commons License

한결같기를 다짐해야만 하는 경우

Posted at 2008/02/26 22:52 // in Essay // by Daniel
한결같기를 다짐해야만 하는 경우
그렇다는 것은 한결같지 않아지려 하고 있다는 것.
크리에이티브 커먼즈 라이센스
Creative Commons License

Cache memory

Posted at 2008/02/26 21:15 // in Research // by Daniel
http://asmlove.co.kr/zBdC7/download.php?id=280
(원문이 자세함.)
1. Fully Associative Cache Schematics
Fully Associative 캐시는 Cache Set으로 캐시를 나누지 않고 태그 정보로만 데이터를 찾는다.
단순하게 복잡도를 계산해보면 최악의 경우 2^T 번의 태그 비교가 필요해지므로 O(2^T)의 계산 복잡도를 가진다.
T비트의 비교기는 동작 속도가 매우 빠르지만 캐시 메모리가 커질수록 태그 값을 찾는데 긴 시간이 필요하다는 단점이 있다. 하지만 데이터의 주소를 그대로 캐시 메모리에 저장하므로 유연성이 높다는 장점도 있다.

2. Direct-Mapped Cache Schematics
Fully-Associative 방식을 보완한 것이 Direct-Mapped 방식이다. 메모리 주소를 태그, 셋, 오프셋으로 나누고, 캐시 메모리도 셋 단위로 나눠서 관리한다. 셋 번호에 따라 어느 캐시 라인에 데이터가 있는지 먼저 찾고, 그 안에서 태그 값을 비교해서 원하는 캐시 데이터가 맞는지 확인하는 방식이다.
캐시 라인의 번호가 Cache Set의 번호가 된다. 따라서 셋 번호를 검색하는 시간이 줄어들고 태그 번호만 비교하면 된다. Fully Associative 방식에 비해 동작 속도가 매우 빨라진다.
제작 비용이 싸지는 장점이 있지만 동일한 셋 번호를 가지는 메모리 주소를 함께 저장할 수 없다는 단점이 있다. 따라서 연속된 메모리 데이터를 캐시에 저장할 수 없게 되고, 캐시의 성능이 떨어지게 된다. 예를 들어 0x16339C와 0x16338C는 같은 셋 번호를 가지므로 같은 캐시 라인에 들어가게 된다. 따라서 캐시에는 둘 중 하나의 데이터만이 저장되고 두 데이터가 동시에 저장될 수 없다. 가까운 메모리가 함께 사용된다는 Locality를 생각해보면 매우 성능상에 문제를 가져올 수 있다.

3. Set-Associative Cache Schematics
Set-Associative 방식은 위의 두가지 방식의 장점들을 합쳐서 만든 방법이다. 캐시를 태그로만 나누는 것이 아니라 같은 셋 값으로도 나누어서 태그 값이 같지만 셋 값이 다른 데이터들도 캐시에 저장될 수 있도록 한다.
n-Way Set-Associative 라는 말은 그림과 같이 태그가 같은 데이터 라인이 n개까지 있을 수 있다는 말이다. 즉, 태그가 다르고 셋 값이 같은 데이터 라인이 몇 개가 캐시에 있을 수 있는지를 나타내는 말이다.
여기에서 n 값이 너무 높아지면 Fully Associative 방식의 단점이 나타나고, n 값이 너무 작아지면 Direct Mapped 방식의 문제가 나타나므로 Trade Off에 대한 고려가 필요해진다.

EzDoum 사이트: [Cache] 2-way Set-Associative 방식이란 무엇일까?
http://www.ezdoum.com/stories.php?story ··· F5962073
What every programmer should know about memory
http://people.redhat.com/drepper/cpumemory.pdf
크리에이티브 커먼즈 라이센스
Creative Commons License
1 ... 61 62 63 64 65 66 67 68 69 ... 77