2012-04-16 4 views
1

OpenMP 프로그래밍에서 공유 변수에 대한 데이터 쓰기는 데이터 경합 조건을 방지하기 위해 특정 의식이 필요하다는 것을 알고 있습니다. 그러나 가변적 인 시나리오에서 완전히 읽음으로써 일어날 수있는 경주 조건이 있습니까?데이터 읽기 양식 읽기 openMP 공유 메모리

답변

0

메모리 위치를 동시에 읽는 것이 안전하지만 일반적으로 데이터 구조에서 동시 읽기는 일부 내부 상태를 읽으면 경주로 이어질 수 있습니다. 두 가지 예는 스플레이 트리 (읽기에 대해 자체 조정)와 읽기에 대한 내부 통계를 유지하는 데이터 구조입니다.

0

순전히 읽기 시나리오에서는 경쟁 조건이 불가능합니다. 레이스 조건은 읽기가 결정될 때 (읽은 이전 값이거나 새로 작성한 값일 수 있기 때문에) 쓰기가있을 때만 읽기에서 발생합니다.

+0

감사합니다. 그래서 만약 당신이 쓰레드간에 엄청난 C++ 벡터 컨테이너 (몇 GIG)를 공유한다면, 그것들을 읽는 것이 안전해야한다는 것을 의미합니까? 프로그램의 효율성은 어떻습니까? – Sourena

+0

여기서 병목 현상은 RAM에서 CPU 캐시로의 메모리 전송 또는 하드 드라이브에서 RAM으로의 CPU 캐시로의 메모리 전송입니다. 데이터로 무엇을하려하고 있습니까? 그냥 읽으십니까? –

+0

이것은 뇌 MRI 이미지의 분석을 포함하며 RAM> 12Gig가 필수임을 압니다. 예 파이프 라인의 일부는 std : vector 주위의 래퍼 인 컨테이너를 읽는 것을 포함합니다. 또한 파이프 라인에서 다른 벡터를 조작해야하지만 (R/W acess) 다른 컨테이너입니다. 이것을위한 캐시 친화적 인 접근 방식은 무엇입니까? – Sourena