Làm thế nào để kiểm tra và điểm chuẩn thực hiện mutex


12

Như tiêu đề nói: Làm thế nào để bạn kiểm tra đúng cách và đánh giá các triển khai khác nhau của mutexes trong c ++?

Về cơ bản, tôi đã viết std :: mutex like class của riêng mình cho một dự án chạy trên lõi 2, armv7 với mục đích giảm thiểu chi phí trong trường hợp không kiểm chứng. Bây giờ tôi đang xem xét sử dụng mutex đã nói ở nhiều nơi hơn và cả các kiến ​​trúc khác nhau, nhưng trước khi tôi làm điều này tôi muốn chắc chắn rằng

  • nó thực sự đúng
  • không có trường hợp bệnh lý nào trong đó nó thực hiện tồi tệ hơn nhiều so với tiêu chuẩn std :: mutex.

Rõ ràng, tôi đã viết một vài bài kiểm tra đơn vị cơ bản và điểm chuẩn vi mô và mọi thứ dường như hoạt động, nhưng trong mã đa luồng "dường như hoạt động" không mang lại cho tôi sự thoải mái tuyệt vời.

  • Vì vậy, có bất kỳ kỹ thuật phân tích tĩnh hoặc động được thiết lập?
  • Những cạm bẫy phổ biến khi viết bài kiểm tra đơn vị cho các lớp mutex là gì?
  • Các trường hợp cạnh điển hình người ta nên tìm kiếm (hiệu suất-khôn ngoan) là gì?

Tôi chỉ sử dụng các loại thư viện tiêu chuẩn để triển khai, bao gồm các hoạt động lưu trữ & tải không nhất quán liên tục trên các nguyên tử. Tuy nhiên, tôi chủ yếu quan tâm đến lời khuyên bất khả tri, vì tôi cũng muốn sử dụng cùng một khai thác thử nghiệm cho các triển khai khác.


2
Tôi biết điều đó là không bắt buộc nhưng tôi đánh giá cao nếu những người downvot sẽ bình luận về vấn đề của câu hỏi này. Tôi mới làm quen với SE và không hoàn toàn quen thuộc với các chuyên gia của trang web này.
MikeMB

3
Không phải là cử tri đi xuống, nhưng tôi sẽ nói rằng trang web này đặc biệt tệ cho những người bỏ phiếu nặc danh cho những câu hỏi hoàn toàn tốt. Tôi cảm thấy như nhiều người bỏ phiếu dựa trên những gì tôi gọi là lý do "tôn giáo". Điều đó nói rằng, một khả năng là bạn đang yêu cầu đề xuất về các công cụ, mà tôi tin là đang nhăn mặt ở đây. Nhưng đó chỉ là dự đoán. Và nhiều người đã thảo luận về các công cụ như vậy trong các câu hỏi khác, vì vậy hãy làm những gì bạn muốn.
dùng1118321

4
Trên thực tế, hãy xem bài đăng meta này có tiêu đề "Downvote vì chúng tôi không đồng ý với cách tiếp cận hoặc logic của người hỏi."
dùng1118321

@ user1118321: bài đăng meta đó không phù hợp với câu hỏi này vì IMHO không có giả định sai sót trong câu hỏi này. Tuy nhiên, hai trong số 3 phiếu gần mà tôi hiện đang thấy đang sử dụng lý do gần gũi "yêu cầu tài nguyên của bên thứ ba" được xác định trước. MikeMB, bạn có thể cố gắng chỉnh sửa câu hỏi của mình và xóa những phần đó khỏi câu hỏi, tuy nhiên trong hình thức hiện tại, tôi đoán cộng đồng cũng có thể đóng nó vì quá rộng. Nếu bạn thu hẹp trọng tâm của câu hỏi và hỏi cụ thể những gì bạn muốn kiểm tra và những gì bạn đã cố gắng cho đến nay, bạn có thể tăng cơ hội sống sót cho câu hỏi của bạn.
Doc Brown

Một vấn đề với câu hỏi này là "Các câu hỏi yêu cầu chúng tôi tìm hoặc đề xuất các công cụ, thư viện, ngôn ngữ lập trình, tài nguyên (bao gồm sách, blog, hướng dẫn và ví dụ) hoặc các dự án để thực hiện đều lạc đề ở đây vì chúng thu hút các câu trả lời có ý kiến ​​rằng sẽ không có giá trị lâu dài cho người khác. "
David Hammen

Câu trả lời:


1

Vấn đề rất phức tạp:

Một số nguồn phức tạp bao gồm:

  • Có bao nhiêu chuyển đổi ngữ cảnh đang diễn ra: Điều này rất quan trọng tùy thuộc vào nền tảng mà các thử nghiệm này chạy trên. Một số nền tảng xử lý việc này tốt hơn những nền tảng khác
  • Là các chức năng mà các mutexes được kiểm tra nội tuyến hay không. tức là mutex chỉ hoạt động tốt trong mã được tối ưu hóa tốt hay tối ưu hóa.
  • Là những mutexes được thiết kế cho địa phương bộ đệm. Bộ nhớ cache sẽ làm giảm đáng kể hiệu suất hoặc gây ra nhiều chuyển đổi ngữ cảnh. trước và sau khi mutex được nhập vào.
  • Liệu mutex sẽ gây mất địa phương bộ nhớ cache. tức là dữ liệu trạng thái mutex được phân bổ động.
  • Liệu các mutexes này sẽ hoạt động tốt trong đó các chuyển đổi ngữ cảnh được chứa trong mutex. tức là io, malloc, v.v.
  • Liệu mutex có hoạt động tốt hay không là thời gian kernel được chứa trong phân bổ và phân bổ bộ nhớ động mutex.ie.
  • Hiệu năng có giữ được khi chạy trong VM không
  • Là sự phá hủy hoặc xây dựng của mutex đắt tiền, tức là dữ liệu trạng thái nằm trong bộ nhớ động

1
Không chắc chắn nếu tôi đồng ý với phần xây dựng / phá hủy. Nếu một chương trình đang tạo và phá hủy các mutexes của bạn mọi lúc, có (imho) có gì đó không đúng với thiết kế thiết kế. Nhưng nếu không, cảm ơn bạn cho con trỏ.
MikeMB

-1

Ý tưởng của bạn rất thú vị: một tiêu chuẩn tuân thủ mà việc triển khai mutex có thể được kiểm tra.

Thật không may, theo như tôi có thể thấy, không có tiêu chuẩn tuân thủ được biết đến rộng rãi cho việc triển khai mutex. Vì vậy, tôi đoán bạn có trong tay vấn đề rất thú vị của việc tạo một đề xuất cho điểm chuẩn tuân thủ như vậy.

Và, vì bạn đã tham gia vào việc tạo ra một triển khai điểm chuẩn, bạn là chàng trai.

Nếu bạn cho phép tôi đề xuất, có thể bạn có thể bắt đầu nghiên cứu này với tiêu chuẩn POSIX cho các luồng ở một bên và một số nghiên cứu về tài liệu lý thuyết về xử lý đồng thời, như CSP hoặc Giao tiếp quy trình tuần tự. Loại giấy tờ này thường đề cập đến các vấn đề đồng thời cổ điển, như các nhà triết học ăn uống.

Việc thực hiện chúng có thể là một phần thú vị của điểm chuẩn tuân thủ của bạn, tôi đoán vậy.


3
Tôi đã không đánh giá thấp bạn, nhưng điều này dường như không trả lời bất kỳ câu hỏi nào của tôi.
MikeMB

Cảm ơn đã không downvote. Và xin lỗi vì đã không trả lời câu hỏi của bạn. Bạn có phiền nếu tôi hỏi bạn nếu bạn đang xem xét để tạo một tiêu chuẩn tuân thủ cho các trường hợp khác nhau?
Hilton Fernandes

Không có khả năng. Và ngay cả khi, tôi là tiêu chuẩn duy nhất tôi quan tâm là tiêu chuẩn c ++ (mặc dù điều đó có thể giống với posix liên quan đến mutexes)
MikeMB

Để đủ điều kiện tuyên bố trước đây của tôi: Nếu tôi đưa ra một bộ thử nghiệm tốt cho mutex của riêng tôi, rất có thể tôi sẽ biến nó thành nguồn mở, nhưng tôi rất nghi ngờ rằng nó sẽ có chất lượng hoặc đủ hoàn chỉnh để trở thành một thực tế Điểm chuẩn "tuân thủ" - dù sao đó cũng có thể là thứ được xử lý tốt hơn bằng phân tích tĩnh.
MikeMB

Tôi đồng ý với bạn rằng không có một bộ thử nghiệm tốt cho các nguyên thủy mutex. Tôi cho rằng nó phải đến từ ba nguồn khác nhau: lý thuyết về xử lý đồng thời, đặc điểm kỹ thuật của một biến thể POSIX và các thuật toán đồng thời được thể hiện bằng cách sử dụng các biến đổi. Bạn có đồng ý với điều đó không ?
Hilton Fernandes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.