[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
기존에 작성해 놓은 C++ 코드에 모던 C++를 적용하기는 쉽지 않습니다. 막상 개선하려고 마음먹었다고 해도, 어디서부터 바꿔야 할 지 막막하기만 합니다. 이 세션에서는 기존 C++ 코드에서 모던 C++를 적용해 프로그램의 구조와 성능을 개선하는 방법에 대해서 설명합니다. 그리고 기존 C++ 코드에 모던 C++를 적용할 때 주의해야 될 점에 대해서도 살펴봅니다.
- 지금 #COCOK 에 지원하세요!
같이, 함께라는 뜻의 “CO-” 와 칵테일 “Cocktail” 의 COCOK은
2014년 5월 1일에 출범한 대학연합 칵테일 동아리입니다.
코콕인들은 칵테일에만 관심이 있는게 아닙니다.
COCOK 에는 비전이 있습니다.
칵테일을 통해 다양한 경험을 하고, 다양한 사람들과 소통하며,
나만의 꿈을 찾고 자신만의 인생을 설계하는 것 입니다.
이처럼 술의 긍정적인 가치를 인식하고 올바르게 사용, 활용하려
노력하며 술에 대한 제대로 된 교육까지 진행하고 있습니다
COCOK은 이와 같은 목표들을 통하여 단순한 칵테일 동아리를 넘어서,
동아리 원들 개개인의 꿈과 비전을 찾을 수 있는 동아리가 될 수 있도록 노력합니다.
우리 COCOK은 시간(나이)이나 공간(학교) 상태(직업) 등으로
모집에 제한을 두고 있지 않습니다.
단 하나, 코콕이 중시하는 가치와 비전을 같이 추구할 수 있는 사람들을 원합니다.
코콕과 함께 도전하고 함께 발전하세요.
더 가치있고 멋진 나날을 만들어보세요!
- 한국에서 가장 빨리 크고, 최고로 멋있는 #칵테일동아리 !
매 기수, 모집 행사마다 평균 경쟁률 " 8.7 : 1 " !!!
약 15회의 최고로 전문적인 브랜드 앰버서더 & 오픈 클래스!
COCOK 만의 클래스팀이 고급 브랜드로 진행하는 내부 COCOK 클래스!
UMF, UnivEXPO Seoul,건대, 신촌, 세종대로 등 다양한 축제와 파티 초청 참가!
서울시와 파티 기획팀 및 문화 대행사에서 먼저 행사 기획 제의가 들어오고,
국내 바탐방을 넘어 해외 바탐방 프로젝트 등 특별하고 다양한 경험들이 있고
무려 6개 글로벌 기업, 28개의 브랜드와 함께 80,000,000원 이상 규모로
COCOK x 기업 스폰 & 프로젝트까지!!
도전하고 나아가고, 성공하고자 하는 의지가 있다면,
누구나 COCOK과 함께 할 수 있습니다!
지금! 이 위대한 여정에 동참하세요! :)
#활동시간 및 장소
시간 : 일요일 오후 2시 ~ 6시
장소 : 건국대학교 서울캠퍼스
기간 : 의무 6개월
*한 달에 평균 3회, 클래스 및 활동 진행
(칵테일 클래스 2회, 비저닝 클래스 1회)
*일요일에 진행하는 클래스는 기업 스폰, 행사, 축제, 외부 활동 등의
특별한 기회들로 바뀔 수 있습니다.
*COCOK은 언제나 더 많은 가치와 경험을 주기 위해 노력합니다!
#기타문의
COCOK 공식 Facebook 페이지 : https://www.facebook.com/COCOK.club
회장: 이승재 (010-6289-공일팔구)
dragonz21@naver.com
부회장: 서동재 (010-3121-삼오팔오)
#참고사항
* 여기까지 읽으셨다면, 당신은 이미 COCOK인!
* 14'~15' 활동 내역
- https://goo.gl/7G0gue
- https://goo.gl/Uhl9NO
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기Ki-Hwan Kim
PYCON Korea 2015
Python은 과학 계산 분야에서도 이미 널리 사용되고 있습니다. numpy와 scipy 기반으로 만들어진 많은 모듈들이 휼륭한 생태계를 이루고 있기 때문입니다. 그러나 극한의 계산 성능을 요구하는 분야(HPC, High Performance Computing)에서는 여전히 C와 Fortran으로만으로 짜여진 코드들이 선호되고 있습니다. 이런 분야에서 Python에 대한 일반적인 견해는 전처리/후처리에는 유용하지만 메인 코드에 적용하기에는 느리다라는 것입니다.
이번 발표에서는 HPC 분야에서도 Python의 유용함을 보여줍니다. 계산이 집중된 부분만을 Fortran, C로 구현하여 Python 메인 코드에 접합하면, Python의 장점은 충분히 활용하면서도 계산 성능에 큰 손해는 보지 않을 수 있습니다. 게다가 CUDA-C, OpenCL-C와 연동하면 GPU, MIC와 같은 가속 프로세서들도 비교적 쉽게 활용할 수 있습니다. 이번 발표에서는 간단한 시뮬레이션 코드를 예제로 사용하여 Python 코드로부터 시작하여 Fortran, C, CUDA-C, OpenCL-C 등을 단계적으로 접합해 나가는 것을 보여줄 것입니다.
2. 날짜 토의 내용
*조원별 업무 분담.
역할 분담 팀원
자료조사 및 이해 09 김창헌 09김성현
코딩 04 이성욱
보고서 11 성주희
*이번 프로젝트를 할 때 전체적인 일정을 정함
6/4(월)
월 화 수 목 금
4일 5일 6일 7일 8일
- 조원별 업무 분담 및
계획 작성 - 자료조사 및 이해
- 프로젝트 문제파악 - 알고리즘에 대해
- 프로그램 검토
- 프로젝트에 필요한 - 프로그램 및 보고서 작성
토의하고 이해 - 최종보고서 완성
학습내용 토의
- 프로젝트 진행방향 - 문제점 토의
토의
*프로젝트에 필요한 학습내용 토의.
*프로젝트 진행방향 토의
*자료를 조사한 것을 공유하고 꼼꼼히 공부를 하고 토의함.
용어 정의
- 부울 대수에서의 연산 식
boolean expression - 단독의 변수나 정수 또는 그것들의 연산자로 조합시킨 것과 함수의 인용으로 표
시한 식
- 함수의 모든 minterms의 합으로 이루어진 식
disjunction of minterms
- n개의 variable를 가지는 함수는 2^n개의minterm을 가진다.
- 이것은 truth table에서 F= 1을 가지는 것을 골라내면 된다.
- 임의의 불 함수를 나타내기 위해 필요한 최소한의 연산자 집합.
- 논리곱(AND)과 부정(NOT), 논리합(OR)과 NOT, 부정 논리곱(NAND) 또는 부
complete set of operations
6/5(화) 정 논리합(NOR)만으로 임의의 불 함수를 나타낼 수 있으므로 (AND, NOT), (OR,
NOT), (NAND), (NOR)는 완전 집합이다.
- 부울 함수를 표준형으로 표현할 수 있는 모든 가능한 방법들 중의 한가지로 보
Karnaugh maps
통 3변수 이상 6변수 이하의 부울 함수에서 사용한다.
- 컴퓨터 과학에서의 2진의 형태로 데이터를 기록하는 장치, 또는 그러한 코드화
binary device
된 데이터를 판독하는 장치.
- 디지털 회로의 기본적인 요소 부문. 대부분 2개의 입력과 하나의 출력으로 되어
- 있으며,
logic gates 기본적인 논리 게이트에는 논리곱(AND), 논리합(OR), 배타적 논리합(XOR),
NOT, 부정 논리곱(NAND), 부정 논리합(NOR), XNOR 등 7가지가 있다.
6/6(수)
*프로그램 작성 및 보고서 작성.
6/7(목)
*프로그램 검토 및 최종보고서 완성
6/8(금)
- 프로그램 참조.
3. 최종 프로그램
#include<stdio.h>
int halfadderu( int , int );
int halfadderv( int , int );
int main(void){
int a,b,c,d;
int u1,v1,u2,v2,u3,v3;
printf("입력 a: ");
scanf("%d" , &a);
printf("입력 b: ");
scanf("%d" , &b);
printf("입력 c: ");
scanf("%d" , &c);
printf("입력 d: ");
scanf("%d" , &d);
if((a==0 || a==1) && (b==0 || b==1) && (c==0 || c==1) && (d==0 || d==1)){
u1=halfadderu(a,c);
v1=halfadderv(a,c);
u2=halfadderu(b,d);
v2=halfadderv(b,d);
u3=halfadderu(v1,u2);
v3=halfadderv(v1,u2);
u1=u1+u3;
if(v1==2) v1=1;
printf("e: %d, f: %d, g: %dn" , u1 , v3 , v2);
}
else printf("n입력이 잘못되었습니다.n");
}
int halfadderu( int x , int y){
return x*y;
}
int halfadderv( int x , int y){
int tempx,tempy,temp;
if(x == 1) tempx = 0;
else tempx=1;
if(y == 1) tempy = 0;
else tempy=1;
temp=(tempx*y)+(x*tempy);
if(temp==2)temp =1;
return temp;
}
실행 결과