동일한 매개 변수를 사용하는 두 가지 기능을 계산해야합니다 (읽기 전용). 프로그램을 멀티 스레드로 만들었 으면, 실행중인 프로그램은 (0.5 배 대신) 2 배의 시간이 필요합니다. 나는 다중 스레드 프로그래밍에 익숙하지만 나는 false sharing을 의심 해왔다. 내 원래의 코드 (컷) : #include <iostream>
double frac_
내가 대칭 멀티 프로세서 (SMP) 시스템에서 거짓 공유는 다음과 같은 코드로 인해 각 코어의 개별 캐시 발생할 수 있음을 이해 : 그래서 내 질문은 http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads 01 double sum=0.0, sum
편집 : ST는 초보자를 위해 두 개 이상의 링크를 게시 할 수 없습니다. 누락 된 참조를 유감스럽게 생각합니다. 전역 상태에서 변경 사항을 감지하는 것이 성능과 관련이있는 C 응용 프로그램에서 잠금 오버 헤드를 줄이려고합니다. 최근에 주제에 대해 많은 것을 읽었지 만 (예 : H. Sutter 등), 구현에 대한 확신이 없습니다. 작업과 같은 CAS과 D
작지만 자주 사용되는 함수 객체가 있습니다. 각 스레드는 자체 복사본을 가져옵니다. 모든 것이 정적으로 할당됩니다. 사본은 전역 또는 정적 데이터를 공유하지 않습니다. 이 개체를 허위 공유로부터 보호해야합니까? 감사합니다. EDIT : Boost.Threads를 사용하는 장난감 프로그램입니다. 필드 데이터에 대해 허위 공유가 가능합니까? #include <
다음과 같은 일반 구조의 프로그램이 있습니다. 기본적으로, 나는 객체의 벡터를 가지고있다. 각 객체는 멤버 벡터를 가지며 그 중 하나는 더 많은 벡터를 포함하는 구조체의 벡터입니다. 멀티 스레딩을 통해 객체는 병렬로 작동되며 구성원 벡터 요소에 대한 많은 액세스 및 수정이 필요한 계산을 수행합니다. 하나의 객체는 한 번에 오직 하나의 쓰레드에 의해서만 처리