2012-01-11 4 views
0

fetch_add는 모두를 지원하는 CPU의 CAS 루프에 대해 win (게시 의견 참조) 인 것 같습니다.atomic fetch-and-add vs fetch-and-add에 대한 하드웨어 지원

비트를 설정하기 위해 클리어 비트를 토글 할 때 비트 연산 또는 더하기 연산을 사용할 수 있습니다. 결과는 동일합니다. 나는 각각에 대한 성과가 같을 것이라고 기대한다. 따라서 어떤 연산을 사용할 것인지 결정하는 것은 하드웨어 지원의 차이에 달려 있습니다 (상대 프로세서 지원에 대한 정보를 얻지 못하면).

하나 이상의 다른 프로세서를 선호하는 이유가 있습니까? 이 경우에는?

+0

나는 fetch-and-add를 사용하여 fetch-and-or를 일반적으로 구현할 수 있다고 생각하지 않는다. –

+0

아니요, 이미 명확한 비트 설정에 대해 언급 한 특정 사례에 대해서는 carry가 없을 수 있습니다. 추가 사항은 정확히 비트와 비슷합니다. – Eloff

+1

첫 번째 주석에서 내가 얻은 것은 명확한 비트를 설정하려는 경우에도 가져 오기 및 붙여 넣기를 사용하여 가져 오기 및 붙여 넣기를 구현할 수 있다고 생각하지 않는다는 것입니다. 또는 그 비트들을 설정하는 것입니다. 비트를 동시에 설정하려고하는 두 개의 프로세스가 있다고 가정 해보십시오. 각각은 비트가 현재 명확하다는 것을 확인하고 발견 할 수 있으며 비트를 효과적으로 설정하기 위해 적절한 상수를 추가 할 수 있습니다. 그러나 상수는 두 번 더 추가됩니다. 나는 당신이 일반적으로 그 시나리오를 어떻게 다룰 수 있는지를 보지 못한다. –

답변

1

특정 프로세서 아키텍처를 코딩하는 대신, 컴파일러 내장 함수를 사용하는 것이 좋습니다. 예를 들어 GCCClang은 몇 가지 기본 내장 함수를 지원하며 그 중 하나는 __sync_fetch_and_or입니다.

Visual Studio 2005부터 Visual C++는 _InterlockedOron all architectures을 지원합니다.

+0

하드웨어 지원에 대한 제 질문에 대한 답변입니다. 감사합니다! – Eloff