baik, itu benar-benar tergantung pada apa yang Anda kembangkan. jawabannya, tergantung pada apa yang Anda kembangkan, dapat berkisar dari "itu tidak signifikan" hingga "itu benar-benar kritis, dan kami berharap semua orang di tim memiliki pemahaman yang baik dan penggunaan implementasi paralel".
untuk sebagian besar kasus, pemahaman yang kuat dan penggunaan kunci, utas, dan tugas dan kumpulan tugas akan menjadi awal yang baik ketika kebutuhan akan paralelisme diperlukan. (bervariasi menurut lang / lib)
menambah bahwa perbedaan dalam desain Anda harus membuat - untuk multi-pemrosesan nontrivial, kita harus sering belajar beberapa model pemrograman baru, atau strategi paralelisasi. dalam hal itu, waktu untuk belajar, gagal cukup waktu untuk memiliki pemahaman yang kuat, dan untuk memperbarui program yang ada dapat membutuhkan satu tim setahun (atau lebih). setelah Anda mencapai titik itu, Anda akan (mudah-mudahan!) tidak melihat atau mendekati masalah / implementasi seperti yang Anda lakukan hari ini (asalkan Anda belum melakukan transisi itu).
Kendala lain adalah Anda secara efektif mengoptimalkan program untuk eksekusi tertentu. jika Anda tidak diberi banyak waktu untuk mengoptimalkan program, maka Anda benar-benar tidak akan mendapat manfaat sebanyak yang Anda seharusnya. paralelisasi tingkat tinggi (atau yang jelas) dapat meningkatkan kecepatan program Anda yang dipersepsikan dengan sedikit usaha, dan itu sejauh yang dilakukan banyak tim hari ini: "Kami telah memaralelkan bagian-bagian aplikasi yang sangat jelas" - itu tidak masalah dalam beberapa kasus. Apakah manfaat dari mengambil buah yang menggantung rendah dan menggunakan parallization sederhana sebanding dengan jumlah inti? seringkali, ketika ada dua atau empat inti logis tetapi tidak terlalu sering di luar itu. dalam banyak kasus, itu merupakan pengembalian yang dapat diterima, mengingat investasi waktu. model paralel ini adalah pengantar banyak orang untuk menerapkan penggunaan paralelisme yang baik.
apa yang Anda pelajari menggunakan model paralel sepele ini tidak akan ideal dalam semua skenario paralel kompleks; efektif menerapkan desain paralel yang kompleks membutuhkan pemahaman dan pendekatan yang jauh berbeda. model-model sederhana ini sering terlepas atau memiliki interaksi sepele dengan komponen lain dari sistem. juga, banyak implementasi dari model-model sepele ini tidak skala baik untuk sistem paralel yang efektif kompleks - desain paralel kompleks yang buruk dapat memakan waktu selama untuk mengeksekusi sebagai model sederhana. ill: ini dieksekusi dua kali lebih cepat dari model single threaded, sementara menggunakan 8 core logis selama eksekusi. contoh paling umum menggunakan / membuat terlalu banyak utas dan gangguan sinkronisasi tingkat tinggi. secara umum, ini disebut perlambatan paralel. cukup mudah untuk ditemui jika Anda mendekati semua masalah paralel sebagai masalah sederhana.
jadi, katakanlah Anda benar - benar harus menggunakan multithreading yang efisien dalam program Anda (minoritas, dalam iklim saat ini): Anda harus menggunakan model sederhana secara efektif untuk mempelajari model yang kompleks dan kemudian mempelajari kembali bagaimana Anda mendekati aliran dan interaksi program. model yang kompleks adalah di mana program Anda pada akhirnya harus berada karena di situlah perangkat keras hari ini, dan di mana perbaikan yang paling dominan akan dilakukan.
pelaksanaan model-model sederhana dapat dibayangkan seperti garpu, dan model-model kompleks beroperasi seperti ekosistem yang kompleks. Saya pikir pemahaman model sederhana, termasuk penguncian umum dan threading harus atau akan segera diharapkan dari pengembang menengah ketika domain (di mana Anda mengembangkan) menggunakannya. memahami model yang kompleks masih agak tidak biasa saat ini (di sebagian besar domain), tetapi saya pikir permintaan akan meningkat cukup cepat. sebagai pengembang, lebih banyak program kami yang harus mendukung model-model ini, dan sebagian besar penggunaannya cukup jauh ketinggalan dalam memahami dan mengimplementasikan konsep-konsep ini. karena jumlah prosesor logis adalah salah satu area terpenting dari peningkatan perangkat keras, permintaan orang yang memahami dan dapat menerapkan sistem yang kompleks pasti akan meningkat.
akhirnya, ada banyak orang yang mengira solusinya hanyalah "tambahkan paralelisasi". Seringkali, lebih baik membuat implementasi yang ada lebih cepat. itu jauh lebih mudah dan jauh lebih mudah dalam banyak kasus. banyak program di alam tidak pernah dioptimalkan; beberapa orang hanya memiliki kesan bahwa versi yang tidak dioptimalkan akan dikalahkan oleh perangkat keras suatu hari nanti. meningkatkan desain atau algos dari program yang ada juga merupakan keterampilan penting jika kinerjanya penting - melempar lebih banyak inti pada masalah belum tentu merupakan solusi terbaik atau paling sederhana.
saat menargetkan PC modern, kebanyakan dari kita yang perlu menerapkan sistem paralel yang baik tidak perlu melampaui multithreading, mengunci, perpustakaan paralel, membaca buku, dan banyak pengalaman menulis dan menguji program (pada dasarnya, secara signifikan merestrukturisasi cara Anda pendekatan program penulisan).