표준 출력

표준 출력을 파일로 저장

print에 의해 출력되는 내용을 파일로 저장하는 방법이 있다. sys모듈의 stdout은 출력을, stderr은 표준 에러 출력을, stdin은 입력을 위한 객체를 지정하고 있다. 

sys.stdout을 파일 객체로 변환하면 모든 print 문(표준 출력)에 의한 출력이 파일로 저장된다.




표준 에러 (stderr)

print 문을 직접 이용하기

print 문의 출력을 파일로 직접 보낼 수 있다. 표준 에러로 출력을 보내려면, 다음과 같이 하면된다.


이것은 sys.stderr(표준 에러)로 리다이렉션하고 옆의 문장을 내보내라가 된다. 즉, 표준에러로 문장을 내보내라



표준 출력을 문자열로 저장

print 출력을 문자열로 저장하는 방법은 StringIO 표준 모듈을 이용하는 것이 간편하다.

StringIO 모듈의 StringIO 클래스는 문자열을 파일 객체처럼 입/출력한다.




문자열을 파일 객체처럼 읽기

주어진 문자열이 있고, 그것을 파일 객체를 이용해서 파일처럼 읽어 내야 할 필요가 있을 때 StringIO 모듈을 이용한다.



실행 결과



'Programming > Python' 카테고리의 다른 글

함수의 중첩 영역  (0) 2013.04.27
[File I/O] 지속 모듈  (0) 2013.04.14
파일 입/출력 예제  (0) 2013.03.12
파일 객체 속성들  (0) 2013.03.11
객체의 복사 및 형 변환  (0) 2013.03.08
Posted by scii
:

OpenCL

Programming/OpenCL 2013. 4. 10. 00:38 |


병렬화의 중요성

CPU 의 동작 주파수가 매년 향상되면서 소프트웨어를 최적화하지 않아도 동작 속도가 빨라지는 시절이 있었다. 하지만, 인텔 cpu가 4GHz 에 가까워진 2004년쯤부터는, cpu의 동작 주파수 향상은 점점 더뎌졌다. 그리고 Power Wall(전력 장벽) 이라는 소비 젼력과 발열량의 증가가 심각한 문제로 주목받기 시작했다.

또한, 2004년 이후의 cpu는 동작 주파수 향상이 아니라 연산코어 증가라는 형태로 진화했다. 그런데 멀티코어 cpu의 동작 주파는 싱글코어 cpu와 같거나 약간 느려진 상황이기 때문에 싱글코어에서 만든 기존의 애플리케이션을 멀티코어 cpu에서 동작시킨다고 속도가 빨라지지 않는다. 최근 일반 소비자용 노트북에도 멀티코어 cpu가 탑재되고 있고, 고도의 연산 능력이 필요한 분야뿐만 아니라 일반 컴퓨팅 환경에서도 병렬화 기술을 사용한다. 따라서 멀티코어 프로세서의 성능을 충분히 사용하는 병렬처리 연산이 가능한 애플리케이션으로 최적화시킬 필용성도 높아졌다.


하드웨어 관점의 병렬 컴퓨팅

위키피디아에서 정의하는 병렬 컴퓨팅: http://ko.wikipedia.org/wiki/%EB%B3%91%EB%A0%AC%EC%BB%B4%ED%93%A8%ED%8C%85

실제로 어떤 작업 하나를 처리 장치 여러 개로 나누어 동작시키는 하드웨어 아키텍처는 여러 가지가 있다. 규모가 큰 것에서 작은 순서로 나열하면 다음과 같다.

# 인터넷에 접속된 다양한 종류의 연산 자원을 연결해, 하나의 연산을 실행하는 그리드 컴퓨팅

# 슈퍼 컴퓨터의 아키텍처로서 유명한 초병렬 연산기 (Massively Parallel Processor, MPP) 시스템

# 범용 컴퓨터를 조합해 만드는 클러스터 서버 (Cluster Server) 시스템

# 같은 cpu 여러 개를 탑재하고 밀접하게 결합해, 하나의 연산기를 구성하는 대칭형 멀티프로세싱 (Symmetric Multiprocessing, SMP) 시스템

# cpu 내부에 여러 개의 연산코어를 가진 멀티코어 프로세서 (Multicore Processor) 시스템


플린의 분류

컴퓨터 아키텍처를 분류하는 지표 중에 '플린의 분류(Fluynn's Taxonomy) 가 있다. 마이클 J. 플린은 하나의 처리를 실현하는 명령의 나열인 명령 스트림(Instruction Stream) 의 병렬도(병렬성이 있는지나 없는지의 정도를 나타냄) 처리 대상이 되는 데이터의 나열인 데이터 스트림(Data Stream) 의 병렬도에 따라 모든 컴퓨터 아키텍처를 다음 4가지로 분류한다.

SISD (Single Instruction, Single Data Stream) 

하나의 명령 스트림이 하나의 데이터 스트림을 처리하는, 즉 명령과 데이터에 병렬성이 없는 순차적인 시스템을 말한다. 싱글코어 프로세서 하나가 탑재된 pc가 여기에 해당한다.

SIMD (Single Instruction, Multiple Data Streams)

단일 명령을 복수의 연산기에 전달하더라도 각각의 연산기는 서로 다른 데이터를 가지고 연산하는 시스템을 말한다. 벡터 연산기라고 불리는 일분의 슈퍼 컴퓨터가 대표적인 예이다.

MISD (Multiple Instruction, Single Data Stream)

복수의 명령 스트림이 단일 데이터 스트림을 처리하는 시스템을 말한다. 이론상으로만 존재할 뿐 쓸모가 없으므로 이 분류에 해당하는 실제 시스템은 거의 존재하지 않는다.

MIMD (Multiple Instruction, Multiple Data Streams)

복수의 연산기가 가진 각기 다른 데이터 스트림을 서로 다른 명령 스트림에서 처리하는 시스템을 말한다.


이 4가지 분류에 다르면 앞서 이야기한 클러스터 시스템이나 SMP 시스템 등 별렬 컴퓨팅을 실행하기 위한 하드웨어 아키텍처의 대부분이 MIMD 에 속한다. 따라서 병렬 컴퓨팅을 더욱 상세하게 분류하고 싶다면 하드웨어의 메모리 구성에 주목하는 것이 일반적이다.


Posted by scii
:

sacnf 함수의 리턴 값 의미

gg.c

이 하나의 예제로 scanf 함수의 리턴 값의 의미를 알 수 있다.



실행 결과


실행 결과로 알 수 있듯이, 서식문자에 합당한 값이 정확히 들어오면 그에 맞게 몇개가 정확히 들어왔는지 그 개수를 리턴해준다.




'Programming > C' 카테고리의 다른 글

void pointer 예제  (0) 2013.09.18
Bit Field  (0) 2013.02.15
Bit Mask  (0) 2013.02.15
시간과 날짜 관련 함수들  (0) 2013.02.15
난수 (Random Number)  (0) 2013.02.15
Posted by scii
:

3n+1 문제

Programming/C++ 2013. 3. 27. 14:54 |


어떤 수열을 만들어내는 다음과 같은 알고리즘을 생각해보자. 어떤 정수 n에서 시작해 n이 짝수면 2로 나누고, 홀수면 3을 곱한 다음 1을 더한다. 이렇게 해서 새로 만들어진 숫자를 n으로 놓고 n=1 이 될 때까지 같은 작업을 계속 반복한다. 

예를 들어, n=22 이면 다음과 같은 수열이 만들어진다.

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

아직 증명되진 않았지만 모든 정수 n에 대해 이 알고리즘을 적용시키면 결국에는 n=1 에 이르게 되는 것으로 추측된다. 그리고 이 가설은 적어도 1,000,000 까지의 정수에 대해서는 참이다. 

n이라는 값이 입력되었을 때 1이 나올 때까지 만들어진 수의 개수를 n의 사이클 길이(cycle-length) 라고 한다. 


문제가 이것이였다. 그래서 Linked-List 자료구조로 한번 만들어 보았다. 여기 문제에서는 1백만번까지의 정수에 대해 참이라고 해서, 한번 2백만번까지 돌려보았다. 2백만번 까지도 참이었다. 그 이상은 안해보아서 모르겠다. 

그리고, 결과 값을 보니 중첩되는 숫자가 없어 혹시나해서 몇번이고 테스트를 해보았다. 신기하게도 중복되는 숫자가 없었다. 

오오~ 아직은 어느 상황에서 쓰면 좋을 지 감이 잘 오지않지만, Houdini에서 중복되는 숫자가 없어야 하는 상황에서 이 알고리즘을 적용해서 쓰면 괜찮겠다는 생각이 든다.


DLinkedList.cpp

DLinkedList.h

ques.cpp

 


실행 결과

과과






The_three_algorithm.c


'Programming > C++' 카테고리의 다른 글

const 객체와 const 객체의 특성성  (0) 2013.08.13
복사 생성자의 완벽한 이해  (0) 2013.08.12
List 자료구조로 만든 프로그램  (0) 2013.03.20
namespace (이름 공간)  (0) 2013.03.17
template을 이용한 inline 함수  (0) 2013.03.17
Posted by scii
:

자료구조 복습 겸, C++ 복습 겸해서 한번 만들어 보았다.


account.cpp

account.h

List.cpp

List.h

main.cpp


list header file

list source file


account header file

account source file


main file


실행 결과


'Programming > C++' 카테고리의 다른 글

복사 생성자의 완벽한 이해  (0) 2013.08.12
3n+1 문제  (0) 2013.03.27
namespace (이름 공간)  (0) 2013.03.17
template을 이용한 inline 함수  (0) 2013.03.17
C++ Language의 창시자 홈페이지  (0) 2012.11.29
Posted by scii
:


이 하나의 예제로 이름공간의 거의 모든 것이 설명되어짐.




'Programming > C++' 카테고리의 다른 글

3n+1 문제  (0) 2013.03.27
List 자료구조로 만든 프로그램  (0) 2013.03.20
template을 이용한 inline 함수  (0) 2013.03.17
C++ Language의 창시자 홈페이지  (0) 2012.11.29
C++ Language Tutorial 사이트  (0) 2012.11.20
Posted by scii
:


template <typename T>

template <class T>

이 두 문장은 똑같다.

템플릿을 이용하면, 자료형에 의존적이지 않은 함수를 만들 수 있다. 

즉, define SQUARE(x)     ((x)*(x)) 와 똑같이 된다. 그리고 define은 전처리기에 의해 처리가 되어서 오류를 잡지 못하지만 inline은 컴파일러에 처리가 되어서 오류를 잡을 수 있으니 얼마나 좋은가~~


실행 결과



Posted by scii
:




TP.docx


HDK로 컴파일하고 디버깅할 때 필요한 변수들.

'Programming > HDK' 카테고리의 다른 글

HDK User Reference  (0) 2013.01.08
Compiling HDK Code  (0) 2012.12.30
Houdini Development Kit 관련 사이트  (0) 2012.12.26
Posted by scii
: