[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
C++11을 시작으로 모던 C++이 도입된 지도 어느새 6년이라는 시간이 흘렀습니다. 올해는 C++17 표준이 도입될 예정입니다. 그만큼 많이 개선되고 새로운 기능들이 많이 도입되었기에 실무에서 사용해보고 싶은 경우도 많습니다. 하지만 이미 서비스 중이라 기존 프로젝트를 새 버전의 VS로 마이그레이션하기 어려운 프로젝트가 많습니다. 그렇다고 아예 불가능한 일도 아닙니다. 이번 세미나에서는 기존 프로젝트를 새 버전의 VS로 마이그레이션하면서 발생했던 문제와 마이그레이션 이후 모던 C++을 사용하면서 발생했던 문제, 그리고 해결법을 설명하고자 합니다. 또한 새 버전의 VS에 생긴 유용한 기능들도 함께 알려드립니다.
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
C++11을 시작으로 모던 C++이 도입된 지도 어느새 6년이라는 시간이 흘렀습니다. 올해는 C++17 표준이 도입될 예정입니다. 그만큼 많이 개선되고 새로운 기능들이 많이 도입되었기에 실무에서 사용해보고 싶은 경우도 많습니다. 하지만 이미 서비스 중이라 기존 프로젝트를 새 버전의 VS로 마이그레이션하기 어려운 프로젝트가 많습니다. 그렇다고 아예 불가능한 일도 아닙니다. 이번 세미나에서는 기존 프로젝트를 새 버전의 VS로 마이그레이션하면서 발생했던 문제와 마이그레이션 이후 모던 C++을 사용하면서 발생했던 문제, 그리고 해결법을 설명하고자 합니다. 또한 새 버전의 VS에 생긴 유용한 기능들도 함께 알려드립니다.
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
1. The document compares the performance of IOCP and EPOLL for network I/O handling on Windows and Linux servers.
2. Testing showed that throughput was similar between IOCP and EPOLL, but IOCP had lower overall CPU usage without RSS/multi-queue enabled.
3. With RSS/multi-queue enabled on the NIC, CPU usage was nearly identical between IOCP and EPOLL.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
어느 해커쏜에 참여한 백엔드 개발자들을 위한 교육자료
쉽게 만든다고 했는데도, 많이 어려웠나봅니다.
제 욕심이 과했던 것 같아요. 담번엔 좀 더 쉽게 !
- 독자 : 백엔드 개발자를 희망하는 사람 (취준생, 이직 희망자), 5년차 이하
- 주요 내용 : 백엔드 개발을 할 때 일어나는 일들(개발팀의 일)
- 비상업적 목적으로 인용은 가능합니다. (출처 명기 필수)
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
1. The document compares the performance of IOCP and EPOLL for network I/O handling on Windows and Linux servers.
2. Testing showed that throughput was similar between IOCP and EPOLL, but IOCP had lower overall CPU usage without RSS/multi-queue enabled.
3. With RSS/multi-queue enabled on the NIC, CPU usage was nearly identical between IOCP and EPOLL.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
Deep learning with C++ - an introduction to tiny-dnnTaiga Nomi
1. tiny-dnn is a header-only deep learning framework for C++ that aims to be easy to introduce, have simple syntax, and support extensible backends.
2. It allows defining neural networks concisely using modern C++ features and supports common network types like MLPs and CNNs through simple syntax similar to Keras and TensorFlow.
3. The framework has optional performance-oriented backends like AVX and NNPACK to accelerate computation on different hardware, and supports functions for model serialization, basic training, and more through additional modules.
Klaytn 성능 향상 대장정 - 1000만 account 극복기
블록체인은 네트워크 상에서 상태가 합의를 이루고 복제되어야하는 제한 조건 때문에 전통적인 데이터베이스에 비해 떨어지는 성능을 보인다. 또한 Klaytn에서는 각 어카운트의 정보를 저장하기 위해 Merkle Partricia Trie를 사용하는데, Merkle Partricia Trie의 성능은 전체 어카운트 개수가 늘어날수록 떨어진다. 1000만개 이상의 어카운트가 존재할 때에도 성능 저하를 최소화 하기 위해 1) 일반적인 성능 향상과 더불어 2) 어카운트 개수 증가에 의한 성능 저하를 최소화하는 작업을 동시에 진행하였다. 본 세션에서는 블록체인의 성능 병목 구간에 대한 설명과 더불어 1) Consensus Layer, 2) In-memory Layer, 3) Persistent Layer 의 각 레이어 별로 적용한 최적화 기법들, 그리고 그 사이에 마주친 문제들에 대해 공유하는 시간을 갖는다.
1. 병렬 프로그래밍 소개Intel Threading Building Block 2011. 06. 11 아꿈사스터디( http://andstudy.com ) 윤석윤( seedyoon@EyaSoft.co.kr )
2. 개요 병렬화의 이유 병렬화의 문제점 TBB 설계 목표 TBB의 주요 기능 참고 이 문서는 TBB에 대하여 좋은 자료를 만들어 주신 분들의 PT 내용을 수집하여 만든 것 입니다. 간략한 소개가 목적이며, 자세한 내용 및 더 나은 설명은 참고 세션에 있는 자료들에서 찾아 봐주시길 바랍니다.
4. 병렬화의 이유 새로운 반도체 소자가 나오기 전까지는 더 이상 클럭 속도를 높이기 힘들다- 무어의 법칙의 한계 - Multi-core에서 Many-core 시대로 바뀌고 있다. ( 3~4년 내에 데스크탑 코어는 60개 까지 늘어날 것이다 ) 빠른 처리속도, 빠른 처리속도, 빠른 처리 속도를 얻기 위해서
6. 병렬화의 문제점 공유자원과 이벤트가 뒤섞인 상태 Data Race Dead Lock 잘못된 동기화 Context Switching 비용 False Sharing ABA 문제
7. TBB 설계 목표 추상화 병렬화 가능한 곳을 공략하자 Core의 개수를 신경쓰지 말자 쓰레드를 직접 건드리지 말자 가능한 곳에 묵시적 병렬성 명시적 병렬성 Thread가 아닌 Task 안전성 보장 강화 프로그래머가 쓰레드가 아닌 “병렬적 사고”에 더 신경 써야 한다
8. TBB의 주요 기능 일반 병렬처리에서 사용할 수 있는 풍부한 기능 C++ 라이브러리 독립적 컴파일러 C++ generic Programming 병렬 테스크 Thread가 아닌 Task WorkStealing을 이용한 부하 분산 병렬 알고리듬 공통적인 병렬 패턴, 효율적 실행 Memory Allocation False Sharing / 성능 향상 병렬 처리를 위해 고안됨 Container STL 식 컨테이너, 사용자 잠금 장치가 필요 없음( ABA 문제가 해결된 컨테이너 ) 동기화 장치 Mutex / atomic operation
9. TBB의 주요 기능 http://software.intel.com/en-us/blogs/2008/12/16/compare-windows-threads-openmp-intel-threading-building-blocks-for-parallelprogramming
10. TBB의 주요 기능 조정성 있는 메모리 할당자 scalable_malloc scalable_free scalable_realloc scalable_calloc scalable_allocator cache_aligned_allocator zero_allocator 상호 배제 뮤텍스 spin_mutex queuing_mutex spin_rw_mutex queuing_rw_mutex recursive_mutex null_mutex null_rw_mutex 원자적 연산 fetch_and_add fetch_and_swap fetch_and_store fetch_and_increment fetch_and_decrement 기본 알고리즘 parallel_for parallel_for_each parallel_reduce parallel_scan 고급 알고리즘 Parallel_while Parallel_do Parallel_preorder Pipeline Parallel_pipeline Parallel_sort Parallel_invoke 컨테이너 concurrent_queue concurrent_vector concurrent_hash_map concurrent_unordered_map 태스크 스케줄러 타이밍
11. TBB의 주요 기능 Task 병렬화 될 작업 단위 (raw thread 대신 사용) C++ 함수 객체(functor, function object)로 정의 테스크에 대한 정확한 이해를 위한 두가지 선행 지식 스레드 추상화 직접 스레드를 생성하고 일감을 효율적으로 분배하고 관리하는 복잡함을 뒤에 감추는 논리적 접근 함수 객체 평소에 익숙하지 못할 경우 TBB 테스크를이해하는데에 장애가 될 수 있음
12. TBB의 주요 기능 Task Scheduler 테스크스케쥴러가Blocked Range라는 Range 객체를 통해 테스크를 각 코어에 분배(Work Stealing) 병렬 프로그래밍에서 각 스레드에게균형있게 작업량을 주는 것이 중요 Parallel_for와 같은 TBB 알고리듬은테스크스케쥴러에 기반을 두고 실행 TBB는 생성될 개별 테스크들의 개수를 런타임에 결정, Range 객체를 통해 전체 범위를 재귀적으로 분할하여 분할된 하위 범위를 생성된 테스크에 할당하고 실제 스레드에 잘 들어맞도록 스케줄링 TBB는 타 스레딩 패키지처럼 직접 조정성 처리를 해 줄 필요가 없다(Scalability)
13. TBB의 주요 기능 #include "tbbask_scheduler_init.h“ // 헤더 파일 포함 using namespace tbb; // namespace 사용 int main() { task_scheduler_initinit; // 객체 선언 return 0; } // 소멸은 기본 소멸자가 실행시 컴파일러가 자동으로 호출
14. TBB의 주요 기능 Memory Allocator 매우 빠르고 효율적인 메모리 도구 C++의 기본 allocator를 바로 바꿔 줄 수도 있는 proxy 제공 STL용 allocator를 바로 바꿔 줄 수 있음 Scalable_allocator Processor 개수에 맞춰서 allocator가 만들어짐 매우 빠르다. Single thread에서도 기본 windows allocator보다 2~3배 정도 빠르다 Cache_aligned_allocator False sharing을 방지하기 위해 존재 Allocate 하는데이터 간에 cache line size 만큼 간격이 존재 Thread간 공유하는 데이터를 이 allocator로 바꿔줘야 한다.
18. 참고 www.threadingbuildingblocks.org 병렬화의 문제점들과 TBB 를 이용한 해결 Seed9 Games R&D 연구소 이경만(PDF) 프로그래밍의 정도 : 확장성과 신뢰성을 갖춘 응용 프로그램 제임스랜더스 인텔 국장 (PDF) TBB inAction TBB 역자 이창재 (PDF) Intel TBB를 써서 메모리 할당하기 Rein’s world(http://rein.kr/blog/archives/1817)