Isu Perkaitan Teras Berbilang pemprosesan
Dalam senario tertentu, apabila mengimport perpustakaan NumPy dan cuba menyelaraskan gelung intensif CPU menggunakan modul joblib , mungkin diperhatikan bahawa proses pekerja yang diberikan kepada gelung semuanya terhad kepada satu teras, menghalang peningkatan prestasi.
Isu ini timbul disebabkan oleh interaksi antara NumPy dan perpustakaan OpenBLAS asas, yang sering digunakan untuk operasi berbilang benang. Secara lalai, perpustakaan ini mungkin mengganggu tetapan perkaitan teras, yang membawa kepada semua proses pekerja diperuntukkan kepada teras yang sama.
Penyelesaian: Tetapkan Semula Perkaitan Tugas
Sebuah cara yang mudah penyelesaian adalah untuk menetapkan semula pertalian tugas menggunakan fungsi os.system() selepas mengimport modul yang terjejas. Dengan melaksanakan perintah os.system("taskset -p 0xff %d" % os.getpid()), pertalian teras ditetapkan semula, membenarkan proses pekerja merebak ke semua teras yang tersedia.
Lumpuhkan Tetapan Semula Perkaitan CPU OpenBLAS
Sebagai alternatif, gelagat menetapkan semula pertalian CPU OpenBLAS boleh dilumpuhkan sama ada pada masa jalan atau pada masa bina. Pada masa jalanan, menetapkan pembolehubah persekitaran OPENBLAS_MAIN_FREE kepada 1 menghalang perpustakaan daripada melaraskan pertalian teras. Sebagai alternatif, semasa proses penyusunan OpenBLAS, menambahkan NO_AFFINITY=1 pada Makefile.rule menyahdayakan tingkah laku ini secara kekal.
Atas ialah kandungan terperinci Mengapa Pekerja Joblib Saya Terperangkap pada Satu Teras Selepas Mengimport NumPy?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!