Apa yang dimaksud dengan menghubungkan Statis, Dinamis, dan Dinamis Tunggal?

9

Saya menggunakan Intel MKL untuk BLAS dan menggunakan Intel MKL Link Line Advisor untuk bantuan dengan opsi baris perintah.

Penasihat menyediakan opsi untuk Static, Dynamic, dan Single Dynamic Library. Apa arti dari istilah-istilah ini?

Ada banyak posting di SO mengenai hal ini tetapi semuanya telah difokuskan pada pengembangan perangkat lunak daripada kode ilmiah / matematika. ( Yang ini sangat berguna)

  • Bagaimana istilah-istilah ini relevan dengan Komputasi Paralel?
  • Apakah yang satu "lebih baik" dari yang lain? (Saya tahu bahwa lebih baik perlu didefinisikan lebih tepat tetapi saya tidak tahu bagaimana sampai sekarang)
  • Apa yang digunakan lebih umum dan mengapa?
  • Apa yang perlu dipertimbangkan oleh programmer saat menautkan?
Pemeriksaan resmi
sumber
Sama seperti catatan, jika Anda belum melihatnya, kompiler Intel yang lebih baru (saya pikir versi 11 dan yang lebih baru) memberikan -mkltanda yang harus menghapus kebutuhan untuk menggunakan penasihat jalur tautan untuk sebagian besar kasus.
Aesin
@ Aesin, saya bertanya-tanya. Apakah ini cara tautan yang paling optimal?
Pemeriksaan
Sayangnya, saya tidak tahu - Saya belum benar-benar melakukan pengujian apa pun, dan manual ini tidak membahas secara terperinci tentang apa yang dilakukannya atau bagaimana menggabungkannya dengan opsi lain. Itu menghubungkan MKL secara statis jika Anda menentukan -staticdan secara dinamis menghubungkannya jika Anda tidak. Ini jelas jauh lebih baik dari sudut pandang kemudahan penggunaan, dalam hal apa pun.
Aesin

Jawaban:

14

Istilah tautan statis dan tautan dinamis tidak secara langsung terkait dengan komputasi paralel, meskipun telah diketahui selama beberapa waktu bahwa pemuatan dinamis (tidak seperti pemuatan yang dapat dieksekusi secara statis) tidak berskala baik pada sistem file jaringan karena beratnya metadata load disebabkan oleh loader dinamis yang mencari jalur pemuatan untuk pustaka target.

Sulit untuk membuat pernyataan umum tentang apakah perpustakaan statis atau dinamis lebih baik dalam komputasi kinerja tinggi. Tentu saja untuk sebagian besar aplikasi superkomputer, ini lebih sederhana dan lebih disukai daripada tautan statis. Kenapa ini? Pada generasi superkomputer saat ini, biasanya hanya ada satu pekerjaan yang berjalan per node, yang sangat mengurangi manfaat dari pengurangan konsumsi memori karena shared library. Selain itu, kode komputasi ilmiah cenderung tidak terlalu canggih dalam hal fitur bahasa atau desain program, dan mereka jarang menggunakan fitur bahasa yang memerlukan pemuatan dinamis (seperti modul plugin). Perpustakaan dinamis memiliki kesulitan tambahan menjadi jauh lebih portabel di seluruh sistem operasi daripada perpustakaan statis.

Sebagai konsekuensi dari semua ini, sebagian besar sistem HPC menggunakan kompilasi statis ketika tersedia. Perpustakaan statis dipandang lebih cepat, lebih mudah untuk menginstal dan memelihara, dan umumnya lebih kuat. Kode HPC berdasarkan Python adalah salah satu pengecualian untuk ini, tetapi mereka masih mengalami masalah kinerja yang terkait dengan pemuatan dinamis (beberapa pengguna di scicomp sebenarnya sedang mengerjakan masalah ini sekarang!).

Ketika Anda memilih tautan statis vs dinamis, Anda perlu mempertimbangkan bagaimana dan di mana kode Anda akan digunakan, apakah pustaka yang mendasarinya cenderung berubah atau dipindahkan, dan karakteristik kinerja sistem file jaringan Anda. Anda juga harus mengevaluasi apakah Anda memerlukan tautan dinamis, baik melalui ketergantungan perpustakaan atau untuk beroperasi dengan bahasa skrip dinamis seperti Python.

Single Dynamic Library adalah istilah khusus Intel. Ini merujuk pada pengemasan perpustakaan dinamis mereka menjadi satu meta-library untuk menyederhanakan proses penautan. Jika Anda akan menggunakan tautan dinamis dengan perpustakaan Intel, formulir ini mungkin lebih disukai kecuali jika Anda melakukan sesuatu yang rumit.

Aron Ahmadia
sumber
Jawaban yang sangat bagus! Hanya satu hal lagi: Saya menyadari tautan dinamis tidak perlu dan pilihannya adalah antara statis dan dinamis tunggal. Anda mengatakan bahwa saya harus memilih yang terakhir kecuali saya melakukan sesuatu yang rumit (yang bukan saya). Jadi, haruskah saya menautkan menggunakan Single Dynamic? [FWiW, saya sedang mengerjakan Metode Ruang Bagian Krylov]
Pemeriksaan
Maaf! Maksud saya Anda harus menggunakan statis secara default tetapi lebih memilih dinamika tunggal daripada dinamis.
Aron Ahmadia
Saya melakukan benchmarking dan saya menemukan: Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97rata-rata lebih dari 1000 nilai.
Pemeriksaan
1
Perlu dicatat bahwa pada beberapa sistem HPC Anda harus menautkan secara statis - pada sistem BlueGene / L hal ini terjadi, misalnya, karena berkurangnya OS pada node komputasi tidak mendukung tautan dinamis.
Aesin
1
Saya agak bingung dengan pernyataan Anda: "Pada generasi superkomputer saat ini, biasanya hanya ada satu pekerjaan yang berjalan per node, yang sangat mengurangi manfaat dari pengurangan konsumsi memori karena perpustakaan bersama." Apakah Anda bermaksud mengatakan bahwa hanya ada satu proses per node? Saya tidak yakin bagaimana satu pekerjaan per node mempengaruhi situasi. Ketika menghubungkan secara statis setiap proses akan menyimpan salinan penuh dari file yang dapat dieksekusi yang dapat menjadi signifikan ketika inti per prosesor tumbuh. Tautan dinamis hanya membutuhkan satu salinan perpustakaan dinamis per ruang memori bersama.
andybauer