'Programming'에 해당되는 글 4건

  1. 2007.08.18 [pdaXrom] 아주 쉬운 native compiler 구성하기 (3)
  2. 2007.04.10 작업환경을 scipy로 전환하다.
  3. 2007.03.22 fftw 컴파일하기
  4. 2007.02.14 Intel C Compiler
1. 아래 링크에서 zgcc 이미지를 다운받는다. 이 이미지에는 컴파일을 위해 컴파일러 뿐만 아니라 필요한 lib와 include를 모두 포함하고 있다.
- zgcc-3.4.6.img

2. zgcc 이미지를 마운트할 디렉토리를 만들고 마운트를 한다.
# mkdir /mnt/zgcc
# mount -t squashfs /where/is/zgcc-3.4.6.img /mnt/zgcc

3. zgcc 는 이미지로 되어 있으므로 파일을 읽을 수는 있지만 쓸 수는 없다. 그래서 /mnt/zgcc 에 있는 모든 파일을 원하는 곳으로 복사한다. 예로 SD로 옮기고자 한다면
# mkdir /mnt/card/3.4.6-xscale-softvfp
# cp -r /mnt/zgcc/* /mnt/card/3.4.6-xscale-softvfp/

4. pdaXrom에서 compiler를 위한 변수가 미리 선언되어 있다. 여기에 맞춰 환경을 구성한다.
# mkdir /opt/native/arm -p
# ln -s /mnt/card/3.4.6-xscale-softvfp /opt/native/arm/

5. 이제 간단한 프로그램을 작성하여 테스트해보자.
# cat hello.c
/* Hello World program */

#include ‹stdio.h›

main()
{
printf("Hello World\n");
}

# gcc hello.c
# ./a.out
Hello World

6. 마지막으로 /mnt/card/3.4.6-xscale-softvfp/armv5tel-cacko-linux/include 를 /usr 로 링크해주는 것이 좋다.
ln -s /mnt/card/3.4.6-xscale-softvfp/armv5tel-cacko-linux/include /usr

Posted by yonggun
최근에 C 언어가 좀 불편함을 느끼고 새로운 계산툴을 찾아보았다.물론 빠른 속도를 요구하는 계산에는 c 특히 icc를 계속 사용할 것이다. 하지만 간단한 계산을 위해서는 스크립트언어의 필요성이 절실하다.

먼저 Matlab. 이것은 많은 사람들이 사용하고 있고 물론 실험실에서도 사용하고 있다. 그리고 이미 많은 함수들이 나와있어... 간단하게 조합을 하면 어려운 계산을 쉽게 할 수도 있다. 하지만 내 성격상... 덩치가 큰 프로그램은 별로 좋아하지 않는다. 그리고 상용프로그램도 역시...

그래서 다음 선택은 SciLab. 이것은 Matlab과 아주 유사하게 만들어졌다. 여러가지 함수들도 많이 있다... 하지만 왠지 꺼려지는 것은 아마도 많은 사람들이 사용하고 있지 않아서일까... 하지만 상당히 잘 만들어져있는 프로그램이다.

또다른 것으로 발견한 것은 SciPy. 이것은 Python기반으로 만들어진 과학기술계산 툴이다. 이것은 크게 두가지 부분으로 구성되어 있는데, 하나는 Numpy라고 배열계산을 위해 만들어졌고 다른 하나는 scipy. 이것은 모든 수치계산을 담당하고 있다. 그리고 이 툴에서 그래픽 툴인 matplotlib를 사용하면 Matlab이 부럽지 않은 환경으로 탈바꿈한다. 아래 그림은 scipy로 계산을 하고 matplotlib를 이용해 그래프를 그린 것이다.
사용자 삽입 이미지


현재까지는 scipy+matplotlib+ipython 조합이 만족스럽다. 하지만 사용하다가 또 무슨 일들이 생길지는 모르겠다.
Posted by yonggun
내가 사용하는 프로그램에서 fft 루틴이 속도의 많은 부분을 차지한다. 그래서 gcc로 컴파일되어 있는 것을 icc로 대체를 해보았다. 그 결과 프로그램 실행 및 계산 속도가 빨라졌다.

먼저 http://www.fftw.org에 가서 fftw 루틴을 다운받는다.

적당한 디렉토리에 푼 후 다음과 같이 한다.

tar zxvf fftw-*
cd fftw-*

export CC=icc
export CPP=icc
export CFLAGS='-O3 -tpp7 -axN -xN'
export CPPFLAGS='-O3 -tpp7 -axN -xN'
./configure : double-precision
for single-precision: ./configure --enable-float --enable-type-prefix --enable-shared
for double-precision: ./configure --enable-long-double --enable-type-prefix --enable-shared
make install


위의 컨피그 옵션중 나는 두번째 single-precision을 사용하였다.

다른 라이버러리들도 이런식으로 컴파일해서 사용한다면 속도가 많이 향상될 것이다.
Posted by yonggun

Intel C Compiler

Computer/Linux 2007.02.14 01:21
보통 사람들은 수치해석을 하거나 데이터를 분석할 때 matlab이나 origin들의 도구를 많이 사용한다. 물론 나도 팔요할 때 사용하곤 하지만 대체로 c를 사용하여 데이터를 분석한다. 그 이유로는 먼저 앞에 언급한 툴들은 너무 무겁다. 나는 작은 툴들을 여러개 이용하는 것을 좋아한다. 두번째로 더 근본적인 이유는 속도가 느리다는 것이다. 내가하는 분석은 PIV(Particle Image Velocimetry)나 PTV (Particle Tracking Velocimetry)로 하기 때문에 하나를 분석하는데 걸리는 시간은 대체 수십분이다. 많일 matlab을 사용한다면 한시간이 더 걸리지 않을까? 게다가 그런 분석이 보통 천개나 이천개 혹은 만개가 넘어가기 때문에 나는 불편하더라도 가능하면 빠르게 계산할 수 있는 툴을 애용한다. 그래서 Linux를 사용하면서 gcc로 프로그래밍을 해왔다. 하지만 icc(Intel C Compiler)를 사용한 후에 계산할 때 걸리는 시간이 대폭 줄어들었다. 약 30-50% 이상의 효율을 가져다 주었다. 게다가 icc는 Non-commercial user에게는 free이다. 그래서 이 글에서는 어떻게 icc를 구하고 debian에 설치하는 방법에 대하여 말해보겠다.


구하기

아래 링크에 가서 Free Non-Commercial Download를 누르고 시키는 대로 하면 이메일을 통해 다운로드 링크와 license를 얻을 수 있다. 현재 최신 버전은 9.1.046이며 이를 기준으로 설명하겠다.

http://www.intel.com/cd/software/products/asmo-na/eng/index.htm


설치


Fedora나 Redhat계열을 사용하는 사람들은 편하게 문서에 나와있는대로 설치하면 된다.
하지만 데비안을 사용하는 경우 바로 설치할 수가 없기때문에 약간의 트릭을 사용한다.

  • 일단 다운받은 icc 패키지를 적당한 곳에 압축을 푼다.
  • 먼저 intel-icc91046-9.1.046-1.i386.rpm 을 alien을 사용해 deb 파일로 변환하고 설치한다.
  • 그리고 /opt/intel/cc/9.1.046/bin/에 있는 icc와 iccvar.sh파일을 수정한다. 두 파일에 있는 <<>INSTALLDIR>를 모두 /opt/intel/cc/9.1.046/ 로 바꾼다.
  • 다운받은 라이센스 파일은 /opt/intel/licenses 로 카피한다.
  • icc에 맢는 환경을 위해 다음 명령을 실행한다. source /opt/intel/cc/9.1.046/bin/iccvar.sh
  • 이제 icc를 실행해보라. 작동이 잘 될것이다.



벤치마크 와 옵션
기본
real 11m6.145s
user 11m3.409s
sys 0m0.572s
-O3 -tpp7 -axW
real 7m45.334s
user 7m43.673s
sys 0m0.548s
-O3 -tpp7 -axW -xW
real 7m43.839s
user 7m42.221s
sys 0m0.508s
-O3 -tpp7 -axN -xN
real 7m30.265s
user 7m28.168s
sys 0m0.544s


위의 결과를 보면 컴파일시 -O3 -tpp7 -axN -xN 옵션으로 사용한다면 가장 빠르게 결과를 얻을 것이다.
Posted by yonggun