Cara menguji dan membandingkan implementasi mutex

12

Seperti judulnya: Bagaimana Anda menguji dan membandingkan penerapan berbagai mutasi di c ++ dengan benar?

Pada dasarnya saya menulis std :: mutex seperti kelas saya sendiri untuk proyek yang berjalan pada inti 2, armv7 dengan tujuan untuk meminimalkan overhead dalam kasus yang tidak terbantahkan. Sekarang saya sedang mempertimbangkan untuk menggunakan mutex tersebut di lebih banyak tempat dan juga arsitektur yang berbeda, tetapi sebelum saya melakukan ini saya ingin memastikannya

  • itu sebenarnya benar
  • tidak ada kasus patologis yang kinerjanya jauh lebih buruk daripada std :: mutex standar.

Jelas, saya menulis beberapa tes unit dasar dan tolok ukur mikro dan semuanya tampak bekerja, tetapi dalam kode multi-ulir "tampaknya berfungsi" tidak memberi saya kenyamanan yang luar biasa.

  • Jadi, apakah ada teknik analisis statis atau dinamis yang sudah ada?
  • Apa perangkap umum saat menulis unit test untuk kelas mutex?
  • Kasus tepi apa yang harus diwaspadai (berdasarkan kinerja)?

Saya hanya menggunakan tipe pustaka standar untuk implementasi, yang mencakup operasi load & store yang tidak konsisten secara berurutan pada atom. Namun, saya terutama tertarik pada implementasi saran agnostik, karena saya ingin menggunakan test harness yang sama untuk implementasi lainnya juga.

MikeMB
sumber
2
Saya tahu itu tidak diperlukan, tetapi saya akan menghargai jika downvoters akan berkomentar tentang apa masalahnya dengan pertanyaan ini. Saya baru mengenal SE dan tidak sepenuhnya akrab dengan spesifikasi situs ini.
MikeMB
3
Bukan pemilih bawah, tapi saya akan mengatakan bahwa situs ini sangat buruk untuk suara turun anonim pada pertanyaan yang sangat bagus. Rasanya bagi saya seperti banyak orang yang memilih berdasarkan apa yang saya sebut sebagai alasan "agama". Yang mengatakan, satu kemungkinan adalah bahwa Anda meminta rekomendasi pada alat, yang saya percaya disukai di sini. Tapi itu hanya dugaan. Dan banyak orang telah membahas alat tersebut dalam pertanyaan lain, jadi buatlah itu sesuai keinginan Anda.
user1118321
4
Bahkan, lihat meta postingan ini yang berjudul "Downvoting karena kami tidak setuju dengan pendekatan atau logika penanya."
user1118321
@ user1118321: postingan meta tidak cocok untuk pertanyaan ini karena IMHO tidak ada asumsi cacat dalam pertanyaan ini. Namun, dua dari 3 suara dekat yang saya lihat saat ini menggunakan alasan tutup "permintaan sumber daya pihak ketiga" yang telah ditentukan. MikeMB, Anda dapat mencoba mengedit pertanyaan Anda dan menghapus bagian-bagian itu, namun dalam bentuk saat ini, saya kira komunitas juga dapat menutupnya karena terlalu luas. Jika Anda mempersempit fokus pertanyaan dan bertanya secara spesifik apa yang ingin Anda uji dan apa yang Anda coba sejauh ini, Anda dapat meningkatkan peluang untuk bertahan dari pertanyaan Anda.
Doc Brown
Satu masalah dengan pertanyaan ini adalah bahwa "Pertanyaan yang meminta kami untuk menemukan atau merekomendasikan alat, perpustakaan, bahasa pemrograman, sumber daya (termasuk buku, blog, tutorial, dan contoh), atau proyek yang akan dilakukan adalah di luar topik di sini karena mereka menarik jawaban yang beralasan bahwa tidak akan memiliki nilai abadi bagi orang lain. "
David Hammen

Jawaban:

1

Masalahnya kompleks:

Beberapa sumber kompleksitas termasuk:

  • Berapa banyak saklar konteks yang terjadi: Ini sangat penting tergantung pada platform tes ini dijalankan. Beberapa platform menangani ini lebih baik daripada yang lain
  • Apakah fungsi yang mutex diuji inline atau tidak. yaitu apakah mutex berkinerja baik hanya dalam kode yang dioptimalkan atau dioptimalkan dengan baik.
  • Apakah mutex ini dirancang untuk lokalitas cache. Akankah cache meleset secara signifikan mengurangi kinerja atau menyebabkan lebih banyak konteks switch. sebelum dan sesudah mutex dimasukkan.
  • Akankah mutex itu sendiri menyebabkan hilangnya lokalitas cache. yaitu data keadaan mutex dialokasikan secara dinamis.
  • Apakah mutex ini bekerja dengan baik di mana sakelar konteks terkandung dalam mutex. yaitu io, malloc dll.
  • Akankah mutex bekerja dengan baik jika waktu kernel terdapat dalam alokasi dan dealokasi memori dinamis mutex.ie.
  • Apakah kinerja terus ketika berjalan di dalam VM
  • Apakah penghancuran atau konstruksi dari mutex mahal yaitu data negara terletak di memori dinamis
Christiaan Pretorius
sumber
1
Tidak yakin apakah saya setuju dengan bagian konstruksi / penghancuran. Jika suatu program membuat dan menghancurkan mutex Anda sepanjang waktu, ada (imho) sesuatu yang salah dengan desain desain. Tetapi sebaliknya terima kasih atas petunjuknya.
MikeMB
-1

Gagasan Anda sangat menarik: tolok ukur kepatuhan yang dapat digunakan untuk menguji implementasi mutex.

Sayangnya, sejauh yang saya bisa lihat, tidak ada patokan kepatuhan yang dikenal luas untuk implementasi mutex. Jadi, saya kira Anda memiliki masalah yang sangat menarik dalam membuat proposal untuk tolok ukur kepatuhan tersebut.

Dan, karena Anda telah terlibat dalam pembuatan implementasi benchmark, Anda adalah orangnya.

Jika Anda memberi saya saran, mungkin Anda bisa memulai penelitian ini dengan standar POSIX untuk utas di satu sisi, dan beberapa studi literatur teoritis pemrosesan bersamaan, seperti CSP, atau Communicating Sequential Processes. Makalah semacam ini biasanya berkaitan dengan masalah konkuren klasik, seperti Filsuf Makan.

Implementasi dari mereka bisa menjadi bagian yang menarik dari tolok ukur kepatuhan Anda, saya kira.

Hilton Fernandes
sumber
3
Saya tidak menurunkan suara Anda, tetapi ini sepertinya tidak menjawab pertanyaan saya.
MikeMB
Terima kasih tidak downvoting. Dan maaf karena tidak menjawab pertanyaan Anda. Apakah Anda keberatan jika saya bertanya apakah Anda mempertimbangkan untuk membuat tolok ukur kepatuhan untuk mutex?
Hilton Fernandes
Tidak sepertinya. Dan bahkan jika, saya satu-satunya standar yang saya pedulikan adalah standar c ++ (walaupun itu mungkin sama dengan
posix
Untuk memenuhi syarat pernyataan saya sebelumnya: Jika saya harus datang dengan test-suite yang baik untuk mutex saya sendiri saya kemungkinan besar akan membuatnya open source, tetapi saya sangat meragukan bahwa itu akan memiliki kualitas atau cukup lengkap untuk menjadi aktual tolok ukur "kepatuhan" - itu mungkin sesuatu yang lebih baik ditangani oleh analisis statis.
MikeMB
Saya setuju dengan Anda bahwa tidak ada test suite yang baik untuk primitif mutex. Saya kira itu harus berasal dari tiga sumber yang berbeda: teori pemrosesan bersamaan, spesifikasi mutex POSIX, dan algoritma bersamaan diekspresikan menggunakan mutex. Apakah kamu setuju dengan itu ?
Hilton Fernandes