Di bidang komputasi performa tinggi (HPC), pengembang hampir fanatik dengan "portabilitas performa". Fenomena ini berasal dari kebutuhan program dan aplikasi komputer untuk berjalan secara efisien di berbagai platform. Seiring dengan terus berkembangnya teknologi dan perubahan arsitektur perangkat keras, daya tahan dan relevansi aplikasi komputasi performa tinggi terancam, yang memaksa pengembang untuk fokus pada peningkatan portabilitas performa.
Portabilitas performa mengacu pada kemampuan program dan aplikasi komputer untuk berjalan secara efektif di berbagai platform. Ketika pengembang mengembangkan aplikasi untuk portabilitas performa, mereka berharap untuk mendukung berbagai platform tanpa memengaruhi performa dan meminimalkan kode khusus platform.
Seiring dengan meningkatnya keragaman perangkat keras, pengembangan perangkat lunak yang dapat berjalan di berbagai mesin telah menjadi suatu keharusan untuk menjaga aplikasi tetap layak. Menurut Konferensi Portabilitas Kinerja Departemen Energi AS (DOE) tahun 2016, industri secara umum sepakat bahwa portabilitas kinerja dapat diartikan sebagai "kemampuan untuk menjalankan aplikasi yang sama pada beberapa platform perangkat keras dan mencapai kinerja yang sama pada platform tersebut." Beberapa tingkat kinerja."
Misalnya, John Penicuik dari Intel mengatakan pada konferensi yang sama bahwa "suatu aplikasi dianggap portabel kinerja jika dapat mencapai tingkat kinerja yang konsisten di seluruh platform." Ini berarti bahwa apa yang disebut portabilitas tidak hanya tentang aplikasi itu sendiri, tetapi juga tentang portabilitas kode sumber.
Saat ini tidak ada cara yang diterima secara universal untuk mengukur portabilitas kinerja, dan masing-masing tim dapat mendefinisikan konsep tersebut berdasarkan kriteria mereka sendiri.
Cara mengukur portabilitas kinerja secara akurat merupakan masalah yang menantang yang terutama bergantung pada dua faktor. Yang pertama adalah portabilitas, yang dapat diukur dengan membandingkan jumlah total baris kode yang digunakan pada beberapa arsitektur dengan jumlah total baris kode yang ditulis khusus untuk satu arsitektur. Yang kedua adalah kinerja, biasanya membandingkan kinerja antara versi yang dioptimalkan untuk platform tertentu dan versi portabel.
Saat ini, tidak ada standar universal untuk apa yang dianggap sebagai kode atau aplikasi portabel. Ketidakjelasan dalam definisi ini menyebabkan kriteria evaluasi yang berbeda untuk tim yang berbeda. Menurut seorang pembicara di konferensi tahun 2016, apakah suatu proyek dianggap portabel atau tidak sepenuhnya bergantung pada tim pengembangan.
Untuk membantu programmer mencapai portabilitas kinerja, saat ini ada berbagai aplikasi dan sistem pemrograman yang dapat mencapai tujuan ini. Kerangka kerja pemrograman seperti OpenCL, SYCL, dan Kokkos mengklaim mendukung portabilitas fungsional dan memfasilitasi pemrograman paralel pada berbagai platform. Selain itu, ada beberapa solusi non-kerangka kerja, seperti teknologi penyetelan mandiri dan bahasa khusus, yang juga dapat meningkatkan portabilitas kinerja.
Pengembang harus mengeksplorasi cara untuk mencapai portabilitas kinerja dalam arsitektur komputasi yang terus berubah, yang tidak hanya terkait dengan kebutuhan saat ini, tetapi juga dengan kelangsungan hidup di masa mendatang.
Dengan pesatnya perkembangan teknologi komputasi, portabilitas kinerja di masa mendatang mungkin menghadapi tantangan baru. Pakar industri percaya bahwa evolusi model pemrograman paralel akan menjadi faktor utama yang memengaruhi portabilitas kinerja. Penelitian menunjukkan bahwa model pemrograman paralel di masa mendatang akan mampu memberikan portabilitas kinerja yang lebih tinggi daripada aplikasi itu sendiri dalam banyak situasi.
Perubahan ini berarti bahwa tanggung jawab yang harus dipikul programmer saat mengembangkan aplikasi secara bertahap akan beralih ke implementasi model pemrograman dan kompiler yang mendasarinya, yang akan secara signifikan mengubah gaya teknis pengembangan program. Eksplorasi dan diskusi ini akan terus mendorong kemajuan dan pengembangan komputasi kinerja tinggi.
Jadi, dalam konteks teknologi yang terus berubah ini, bagaimana pengembang harus secara efektif menyeimbangkan kontradiksi antara karakteristik platform dan portabilitas kinerja?