Pertanyaan Menghancurkan kernel dengan anggun


Tindak lanjut ke: CUDA: Hentikan semua utas lainnya

Saya mencari cara untuk keluar dari kernel jika "kondisi buruk" terjadi. Manual prog mengatakan NVCC tidak mendukung penanganan eksepsi. Saya bertanya-tanya apakah ada pengguna mendefinisikan kode-kesalahan-kuda. Dengan kata lain jika "buruk" terjadi, maka akhiri dengan kode kesalahan pengguna ini. Saya ragu ada satu, jadi ide saya yang lain adalah menyebabkannya.

Sesuatu seperti, jika "buruk" terjadi, bagi dengan nol. Tapi saya tidak yakin apakah satu thread melakukan pembagian-oleh-nol, apakah itu cukup untuk membuat crash seluruh kernel, atau hanya thread itu?

Apakah ada pendekatan yang lebih baik untuk menghentikan kernel?


4
2017-09-20 22:17


asal


Jawaban:


Anda harus membaca terlebih dahulu pertanyaan ini dan jawaban oleh harrisme dan tera (ditanyakan / dijawab kemarin).

Anda mungkin tergoda untuk menggunakan sesuatu seperti itu

if (there_is_an_error) {
  *status = MY_ERROR_CODE; // store to device pointer
  __threadfence();         // ensure store issued before trap
  asm("trap;");            // kill kernel with error
}

Ini tidak benar-benar memuaskan kondisi Anda "anggun", menurut saya. Trap menyebabkan kernel untuk keluar dan runtime untuk dilaporkan cudaErrorUnknown. Tetapi karena eksekusi kernel tidak sinkron, Anda perlu menyinkronkan aliran / perangkat Anda untuk menangkap kesalahan ini, yang berarti sinkronisasi setelah setiap panggilan kernel, kecuali Anda baik-baik saja dengan kesalahan yang tidak tepat (yaitu Anda mungkin tidak menangkap kode kesalahan sampai setelah panggilan ke panggilan CUDA API berikutnya).

Tapi ini hanya cara penanganan kesalahan kernel di CUDA, dan kode yang ditulis dengan baik harus disinkronkan dalam membangun debug untuk memeriksa kesalahan kernel, dan menyelesaikan pesan kesalahan yang tidak tepat dalam rilis rilis. Sayangnya, saya tidak berpikir ada cara yang lebih anggun dari itu.

edit: pada Compute 2.0 dan kemudian Anda dapat menggunakan assert () untuk keluar dengan kesalahan dalam membangun debug. Tidak jelas apakah ini yang Anda inginkan.


6
2017-09-21 02:39



Pernyataan tersebut dapat membantu Anda. Anda dapat menemukannya di B.15 dari Panduan Program CUDA C.


1
2017-09-21 07:53