과학 컴퓨팅의 맥락에서 C ++ 11 이동 시맨틱의 영향은 무엇입니까?


10

C ++ 11에는 예를 들어 C ++ 03이 복사 구성 또는 복사 할당을 수행해야하는 상황에서 코드 성능을 향상시킬 수있는 이동 의미론이 도입되었습니다. 이 기사에서는 C + 11로 컴파일 할 때 다음 코드에서 5 배 속도가 향상된다고보고합니다.

vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
    vector<int> x(1000);
    V.push_back(x);
}

과학 컴퓨팅의 맥락에서 C ++ 11 이동 시맨틱의 영향은 무엇입니까?

나는이 질문에 관심이 있지만 더 구체적으로 부스트 라이브러리를 사용하여 작성된 유한 요소 코드의 이동 의미에 관심이 있습니다. 부스트 버전 1.47.0 ( 부스트 릴리스 노트 는 1.48.0에서 이동 의미론이 소개 되었기 때문에)과 부스트 버전 1.53.0을 사용하여 내 C ++ 03 코드 중 일부를 테스트 했지만 크게 개선되지는 않았습니다. 나는 복사 - 건설 할 필요가없는에서 모든 저축을 추측 boost::numeric::ublas::vector/ matrixboost::function시스템 매트릭스를 해결하는 워크로드의 대부분을 구성하기 때문에 눈에 띄는되지 않습니다.

편집 : 실제로 이동 의미가 구현 된 것 같습니다 boost::function( 버전 1.52.0 릴리스 정보 참조 ). 에 이동 의미에 대한 언급이 없으며 boost::numeric소스를 확인하여 rvalue 참조가없는 것 같습니다.


1
질문의 마지막 부분에서 알 수 있듯이 코드를 프로파일 링하고 많은 복사가 진행되지 않는 한 이동 의미론을 사용하여 성능을 크게 향상시킬 수는 없습니다.
Bill Barth

답변:


10

실제로 그 영향은 제한적이며 제한적이라고 생각합니다.

이 이유 입니다 지금 제한은 큰 유한 요소 패키지는 휴대용 코드를 작성 않도록주의 있다는 것입니다, 그들은 아직 자신의 코드에 C ++ (11) 언어 구조를 사용하지 않도록.

물론 소스 코드를 변경하지 않아도 GCC 용 libstdc ++와 같은 향상된 컴파일러 지원 라이브러리의 이점을 얻을 수있는 코드와 같은 이점이 있습니다. 즉, 과학 컴퓨팅 사용자는 복사 비용을 잘 알고 있으므로 중요한 객체의 경우 단순히 복사하지 않습니다. 즉석에서 생성하거나 얕은 복사를하거나 공유를 사용합니다. 포인터 또는 복사 오버 헤드를 피하기 위해 사용할 수있는 다른 많은 기술. 다시 말해, 이동 의미론이 개발 된 상황은 실제로 "실제"과학 코드에서 실제로 자주 발생하지는 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.