35. FEACP애서는 실현 불가능함1992년2009년파이날 판타지 5 (슈퍼 패미콤)파이날 판타지 13 (PS3)펜티엄 프로세스 66Mhz(1993년)인텔 i7 프로세스 4 core 3.33GhzPC의 메모리는 4메가(1995)PC의 메모리는 4기가“요즘 PC의 속도와 용량이면 하나의 컴파일러로 C++의 코드 생성과 intellisense 양쪽 모두 가능한 새로운 intellisense을 만들 수 있다.!!!”
58. 성능 향상이 이루어졌습니다.auto1. 변수 정의 때 명시적으로 type을 지정하지 않아도 된다.2. auto로 정의한 변수는 초기화할 때 type이 결정.3. 컴파일 타임 때 type이 결정.4. 템플릿 프로그래밍에 사용하면 코딩이 간편. 5. 코드 가독성이 향상
59. 예제 코드auto NPCName = "KKamahui";cout << "NPC Name : " << NPCName << endl;auto* CharInven = new CharacterInvenInfo();typedef std::list<MCommand*> LIST_COMMAND;LIST_COMMAND::iteratoriter = m_listCommand.begin();auto iter = m_listCommand.begin();
61. static_assertAssert는 논리적인 오류 찾기, 작업 결과 확인, 처리해야 할 오류 조건 테스트 할때 사용static_assert는 컴파일 시점에서 실체화할 템플릿의 전제 조건을 조사할 때 사용static_assert( “constant-expression”, “error-message” );“constant-expression” - 검사할 조건 식“error-message” -조건이 false일 경우 출력할 error 메시지
108. 초 간단!!! task 사용 방법ppl.h파일을 포함합니다.#include <ppl.h>Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency;태스크 그룹을 정의합니다.structured_task_groupstructured_tasks;태스크를 정의합니다.auto structured_task1 = make_task([&] { Plus(arraynum1, true); } );태스크를 태스크 그룹에 추가한 후 실행합니다. structured_tasks.run( structured_task1 );태스크 그룹에 있는 태스크가 완료될 때까지 기다립니다.structured_tasks.wait();
110. Parallel Algorithms데이터컬렉션을 대상으로 쉽게 병렬 작업을 할 수 있게 해주는 알고리즘들.C++ STL에서 제공하는 알고리즘과 비슷한 모양과 사용법.paeallel_for, parallel_for_each, parallel_invoke가 구현되어 있음.parallel_accumulate, parallel_partial_sum은 Beta 1에서는 아직 미 구현.
111. parallel_forfor 문을 병렬화.for 문과 사용 방법이 흡사하여 쉽게 변환.step 값을 지정하는 버전과 지정하지 않는 버전 두 개가 있음(지정하지 않으면 1).index 조사는 ‘<‘만 지원.
112. 초 간단!!! parallel_for사용 법ppl.h파일을 포함합니다.#include <ppl.h>Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency;parallel_for에서 호출할 함수 정의parallel_for에서 사용할 data set 정의.parallel_for사용.
114. 초 간단!!! parallel_for_each사용 법ppl.h파일을 포함합니다.#include <ppl.h>Concurrency Runtime의 네임 스페이를 선언합니다.using namespace Concurrency;parallel_for_each에서 호출할 함수 정의parallel_for_each에서 사용할 data set 정의.parallel_for_each사용.
116. parallel_invoke병렬로 일련의 태스크 실행.동시 실행할 복수의 독립된 태스크를 실행할 때 좋음.task_group과 비슷하나 사용방법은 더 쉬움그러나 최대 10개의 태스크만 병렬 작업이 가능하다.
118. parallel objects - combinable스레드세이프한 오브젝트.계산 실행한 후 최종 결과에 그 계산 결과를 통합하는 재 사용 가능한 로컬 스트리지 제공.복수의 스레드 또는 채스크 간에 공유 리소스가 있는 경우 편리.lock-free thread-local sub-computations during parallel algorithmscombinable 클래스에 사용할 데이터는 기본 생성자와 복사 생성자를 가지고 있어야 한다.Win32 API의 thread local storage와 비슷.combine, combinable_each제공
119. 예제 코드#include <algorithm>#include <iostream> using namespace std;using namespace Concurrency; int main(){ vector<int> values(10);int n = 0; generate(values.begin(), values.end(), [&] { return ++n; } ); combinable<int> sums;parallel_for_each(values.begin(), values.end(), [&](int n) {sums.local() += n; }); int result = sums.combine([](int left, int right) { return left + right; }); cout << "The sum of " << values.front() << " to " << values.back() << " is " << result << ".";}
120. 예제 코드using namespace std;using namespace Concurrency; int main(){ vector<int> values(10);int n = 0; generate(values.begin(), values.end(), [&] { return ++n; } ); combinable<list<int>> odds;parallel_for_each(values.begin(), values.end(), [&](int n) { if (n % 2 == 1)odds.local().push_back(n); }); list<int> result;odds.combine_each([&](list<int>& local) { local.sort(less<int>());result.merge(local, less<int>()); }); cout << "The odd elements of the vector are:";for_each(result.begin(), result.end(), [](int n) {cout << ' ' << n; });}
121. concurrent containers병렬 환경에서 스레드 세이프하게 데이터를 저장.concurrent_queue, concurrent_vector, concurrent_hash_map.Beta1에서는 아직 미 구현.