뮤텍스 구현을 테스트하고 벤치마킹하는 방법


12

제목에서 알 수 있듯이 C ++에서 뮤텍스의 다양한 구현을 어떻게 올바르게 테스트하고 벤치마킹합니까?

본질적으로 나는 2 코어, armv7에서 실행되는 프로젝트에 대해 내 자신의 std :: mutex와 같은 클래스를 작성했습니다. 이제는 더 많은 장소와 다른 아키텍처에서 뮤텍스를 사용하는 것을 고려하고 있지만이를 수행하기 전에

  • 실제로 맞습니다
  • 표준 std :: mutex보다 훨씬 나쁘게 수행되는 병리학 적 사례는 없습니다.

분명히, 나는 몇 가지 기본 단위 테스트와 마이크로 벤치 마크를 작성했으며 모든 것이 작동하는 것처럼 보이지만 멀티 스레드 코드에서 "작동하는 것처럼 보임"은 큰 위안을주지 않습니다.

  • 정적 또는 동적 분석 기술이 확립되어 있습니까?
  • 뮤텍스 클래스에 대한 단위 테스트를 작성할 때의 일반적인 함정은 무엇입니까?
  • 성능 측면에서 살펴 봐야 할 일반적인 경우는 무엇입니까?

원자에 대한 비 순차 일관된로드 및 저장 작업을 포함하여 구현에 표준 라이브러리 유형 만 사용하고 있습니다. 그러나 다른 구현에도 동일한 테스트 하네스를 사용하고 싶기 때문에 구현에 독립적 인 조언에 주로 관심이 있습니다.


2
나는 그것이 필요하지 않다는 것을 알고 있지만, downvoters 가이 질문에 문제가 무엇인지에 대해 언급한다면 감사하겠습니다. 나는 SE를 처음 사용하고 있으며이 사이트의 특성을 완전히 알고 있지는 않습니다.
MikeMB

3
다운 유권자는 아니지만이 사이트는 특히 좋은 질문에 대한 익명의 다운 투표에 나쁜 영향을 미칩니다. 제가 "종교적"인 이유에 근거하여 투표를하는 많은 사람들처럼 생각합니다. 즉, 하나의 가능성은 당신은 내가 믿고 도구에 대한 권장 사항을 요구하고 있다는 것입니다 말했다 에 눈살을 찌푸렸다 여기. 그러나 그것은 단지 추측 일뿐입니다. 그리고 많은 사람들이 다른 질문에서 그러한 도구에 대해 논의 했으므로 원하는 것을 만드십시오.
user1118321

4
실제로, "우리는 asker의 접근 방식 또는 논리에 동의하지 않기 때문에 Downvoting"이라는 메타 게시물을 확인하십시오 .
user1118321 2016 년

@ user1118321 : IMHO는이 질문에 결함이있는 가정이 없기 때문에 메타 게시물 이이 질문에 적합하지 않습니다. 그러나 현재 내가보고있는 3 개의 마감 투표 중 2 개는 사전 정의 된 "타사 리소스 요청"마감 이유를 사용하고 있습니다. MikeMB, 질문을 편집하고 해당 부분을 제거하려고 시도 할 수 있지만 현재 양식에서는 커뮤니티가 너무 광범위하여 질문을 닫을 수 있다고 생각합니다. 당신이 아래 질문의 초점을 좁히고 specificially 묻는다면 무엇을 테스트하고 당신이 지금까지 시도하려는, 당신은 당신의 질문의 생존의 기회를 증가시킬 수있다.
Doc Brown

이 질문에 대한 한 가지 문제점은 "도구, 라이브러리, 프로그래밍 언어, 리소스 (책, 블로그, 튜토리얼 및 예제 포함) 또는 수행 할 프로젝트를 찾거나 추천하도록 요청하는 질문은 여기서 논란의 여지가있는 답변을 끌어들이는 주제입니다. 다른 사람들에게는 지속적인 가치가 없습니다. "
David Hammen

답변:


1

문제는 복잡합니다.

몇 가지 복잡성의 원인은 다음과 같습니다.

  • 컨텍스트 전환 수 : 테스트가 실행되는 플랫폼에 따라 매우 중요합니다. 어떤 플랫폼은 이것을 다른 플랫폼보다 잘 처리합니다
  • 뮤텍스가 테스트되는 기능은 인라인으로되어 있는지 아닌지. 즉, 뮤텍스는 최적화되거나 최적화 가능한 코드에서만 잘 수행됩니다.
  • 이 뮤텍스는 캐시 로컬 성을 위해 설계되었습니다. 캐시 미스로 성능이 크게 저하되거나 더 많은 컨텍스트 전환이 발생합니다. 뮤텍스가 입력되기 전후.
  • 뮤텍스 자체가 캐시 로컬 성을 상실하게됩니까? 즉, 뮤텍스 상태 데이터가 동적으로 할당됩니다.
  • 이러한 뮤텍스는 컨텍스트 스위치가 뮤텍스 내에 포함 된 곳에서 잘 작동합니까? 즉, io, malloc 등
  • 커널 시간이 mutex.ie 동적 메모리 할당 및 할당 해제에 포함되어 있으면 뮤텍스가 제대로 수행됩니까?
  • VM 내에서 실행할 때 성능이 유지됩니까?
  • 뮤텍스의 파괴 또는 구성이 비싸다. 즉 상태 데이터가 동적 메모리에 위치한다

1
구성 / 파괴 부분에 동의하는지 확실하지 않습니다. 프로그램이 항상 뮤텍스를 생성하고 파괴하는 경우, 디자인 디자인에 문제가 있습니다 (임호). 그러나 그렇지 않으면 포인터에 감사드립니다.
MikeMB

-1

뮤텍스 구현을 테스트 할 수있는 컴플라이언스 벤치 마크는 매우 흥미 롭습니다.

불행히도, 내가 알 수있는 한, 뮤텍스 구현에 대한 널리 알려진 준수 벤치 마크는 없습니다. 따라서 귀하는 이러한 준수 벤치 마크에 대한 제안서를 작성하는 데있어 매우 흥미로운 문제가 있다고 생각합니다.

그리고 벤치 마크 구현 생성에 참여했기 때문에 그 사람입니다.

나에게 제안을 할 수 있다면, 한 쪽의 스레드에 대한 POSIX 표준으로이 연구를 시작하고 CSP 또는 의사 소통 순차 프로세스와 같은 동시 처리에 대한 이론적 문헌에 대한 연구를 시작할 수 있습니다. 이런 종류의 논문은 대개 식사 철학자와 같은 고전적인 동시 문제를 다룹니다.

그것들을 구현하면 규정 준수 벤치 마크의 흥미로운 부분이 될 수 있습니다.


3
난 당신을 downvote하지 않았지만 이것은 내 질문에 대답하지 않는 것 같습니다.
MikeMB

비공식 감사합니다. 질문에 대답하지 않아서 죄송합니다. 뮤텍스에 대한 컴플라이언스 벤치 마크 작성을 고려하고 있는지 물어봐도 될까요?
힐튼 페르난데스

있을 것 같지 않게. 그리고 내가 신경 쓰는 유일한 표준은 c ++ 표준 (뮤텍스와 관련하여 posix와 동일하더라도)입니다
MikeMB

이전 진술의 자격을 갖추려면 : 자신의 뮤텍스에 적합한 테스트 슈트를 만들어야한다면 오픈 소스로 만들 가능성이 높지만 실제 품질이 될 정도로 품질이 우수하거나 완성 될 것이라고 확신합니다. "컴플라이언스"벤치 마크 – 어쨌든 정적 분석으로 더 잘 처리 될 수 있습니다.
MikeMB

뮤텍스 프리미티브에 적합한 테스트 스위트가 없다는 것에 동의합니다. 필자는 동시 처리 이론, POSIX 뮤텍스 사양 및 뮤텍스를 사용하여 표현 된 동시 알고리즘의 세 가지 소스에서 나온 것으로 가정합니다. 당신은 그것에 동의합니까?
힐튼 페르난데스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.