Sokongan untuk pecutan berbilang proses dan berbilang bebenang
Halaman ini mendokumenkan setakat mana qiskit-addon-sqd menyokong pecutan berbilang bebenang dan berbilang proses, serta andaian yang boleh dipegang oleh pembangun pengkomputeran berprestasi tinggi (HPC) apabila mengintegrasikan pakej ini ke dalam beban kerja yang dipecutkan.
Andaian satu bebenang
Melainkan dinyatakan sebaliknya, API dalam pakej ini bertujuan untuk dipanggil daripada satu bebenang. API peringkat tinggi yang didedahkan oleh pakej ini tidak dijamin boleh masuk semula (re-entrant), dan pengguna akhir tidak seharusnya memanggilnya daripada sebarang bebenang selain bebenang utama.
Pelaksanaan kolektif berbilang proses
Pakej ini menyokong pecutan kolektif berbilang proses dalam gaya satu atur cara, pelbagai data (SPMD), di mana keseluruhan atur cara dilancarkan sebagai beberapa proses terpencil yang berjalan dengan penyegerakan global dan komunikasi yang jelas antara satu sama lain (contohnya, mpirun -n 128 python my_program.py). Oleh sebab gaya SPMD sesuai digabungkan dengan penjadual kerja dan perisian selari yang lain serta berskala kepada bilangan proses yang besar, ia merupakan model yang disyorkan untuk beban kerja berprestasi tinggi dan berskala besar, dan ia menjadi tajuk halaman ini.
Walaupun pakej ini direka untuk menampung pelbagai hujung belakang pelaksanaan kolektif, pelaksanaannya pada masa ini menyasarkan MPI, iaitu API pemesejan piawai untuk sistem HPC. Tanpa mengira pelaksanaan, pakej ini mengandaikan bahawa satu bebenang mengawal setiap proses. Dalam kes MPI, ini sepadan dengan MPI_THREAD_FUNNELED atau lebih rendah.
Jika sesuatu fungsi menyokong pelaksanaan kolektif, dokumentasinya mesti menyatakannya. Jika dokumentasi tidak menyebut pelaksanaan kolektif, fungsi tersebut tidak mempunyai semantik kolektif dan mesti dipanggil daripada proses kawalan sahaja.
Semantik nilai pulangan dan penyegerakan khusus bagi fungsi kolektif didokumenkan bersama fungsi itu sendiri. Secara amnya, dokumentasi tersebut hendaklah menjelaskan:
-
Sama ada fungsi itu bertujuan dipanggil secara bebas oleh setiap proses pada data tempatannya sendiri, atau secara kolektif oleh semua proses.
-
Bagaimana argumennya mesti selaras merentas proses.
-
Bagaimana nilai pulangannya disampaikan—sama ada hasilnya wujud pada proses kawalan sahaja, sama ada semua proses menerima nilai yang sama, atau sama ada setiap proses menerima pemegang kepada bahagian tempatan struktur data teragih.
Pada masa ini hanya satu fungsi yang menyokong pemanggilan secara kolektif daripada semua proses: diagonalize_fermionic_hamiltonian(). Apabila ia dipanggil secara kolektif, langkah penyelesai eigen ialah tempat semua proses mengambil bahagian dan menyumbang kerja, supaya pelaksanaan penyelesai eigen boleh menggunakan setiap proses. Bahagian lain dalam gelung pemulihan konfigurasi tidak mempunyai pelaksanaan teragih dan hanya berjalan pada proses kawalan (pangkat 0).
Setiap subruang bagi satu lelaran dihantar kepada penyelesai eigen dalam satu panggilan, jadi pelaksanaan bebas membahagikan proses kepada kumpulan dan mempepenjurukan beberapa subruang secara selari. Bagaimana penyelesai menggunakan proses yang tersedia kepadanya ialah sifat penyelesai eigen itu.
Sesetengah pelaksanaan penyelesai eigen sedia ada memerlukan atur cara pemanggil berjalan di luar persekitaran MPI/SPMD, kerana ia melancarkan dan mengurus proses selari mereka sendiri secara dalaman, contohnya dengan memanggil mpirun bbagi pihak pengguna. Mod itu mudah untuk kerja interaktif dan berasaskan buku nota dan terus disokong; keperluannya ke atas atur cara pemanggil diterangkan dalam rujukan API bagi fungsi diagonalize_fermionic_hamiltonian().
Pengendalian ralat dalam konteks berbilang proses
Fungsi yang dipanggil secara kolektif daripada semua proses tidak boleh membangkitkan pengecualian atau menggugurkan satu proses sahaja, kerana itu akan menyebabkan proses yang selebihnya buntu atau berada dalam keadaan tidak konsisten. Sebaliknya, pengendalian ralat mengikut semantik henti-gagal bagi konteks pelaksanaan secara keseluruhan: apabila berlaku ralat, pelaksanaan mesti bersedia untuk menggugurkan keseluruhan konteks pelaksanaan secara kolektif (contohnya, dengan menggunakan MPI_Abort).
API tidak dapat menjamin pelaporan ralat yang diselaraskan atau penyampaian pengecualian secara kolektif merentas proses, kerana pelaksanaan MPI tidak memberikan jaminan sedemikian. Sesebuah pelaksanaan mungkin turut cuba menjadikan ralat kelihatan kepada semua proses yang mengambil bahagian—contohnya, dengan meminta setiap proses membangkitkan pengecualian—tetapi ini hanya boleh disediakan secara usaha terbaik dan tidak boleh diharapkan untuk ketepatan atau pemulihan.
Ini ialah sifat yang dibenarkan bagi pelaksanaan kolektif, bukan jaminan tentang mana-mana pelaksanaan tertentu. Dalam pakej ini, satu-satunya langkah kolektif ialah penyelesai eigen (lihat bahagian sebelumnya); pelaksanaan lalainya tidak teragih, jadi pertimbangan ini terpakai kepada penyelesai eigen kolektif tersuai yang dibekalkan oleh pengguna.