Rumah > pembangunan bahagian belakang > C++ > Mengapa CudaMemcpy Menyebabkan Kesalahan Segmentasi Apabila Menugaskan kepada Penunjuk Ahli Kelas?

Mengapa CudaMemcpy Menyebabkan Kesalahan Segmentasi Apabila Menugaskan kepada Penunjuk Ahli Kelas?

Susan Sarandon
Lepaskan: 2024-12-03 00:07:10
asal
702 orang telah melayarinya

Why Does cudaMemcpy Cause a Segmentation Fault When Assigning to a Class Member Pointer?

Kesalahan Segmentasi cudaMemcpy dalam Tugasan Penunjuk Ahli Kelas

Masalah

Operasi cudaMemcpy yang cuba memberikan nilai kepada penunjuk ahli kelas pada hos menyebabkan kesalahan pembahagian kerana penggunaan peranti yang salah penunjuk.

cudaMemcpy(CurrentGrid->cdata[i], Grid_dev->cdata[i], size*sizeof(float), cudaMemcpyDeviceToHost);
Salin selepas log masuk

Penyelesaian

Penyelesaian melibatkan penyediaan penuding peranti dengan betul untuk digunakan pada hos. Daripada menyalin terus nilai penuding peranti kepada hos, penuding perantaraan pada hos diperlukan.

float * A;
cudaMalloc((void**)&A, sizeof(float));
...
...
cudaMemcpy(&A, &(Grid_dev->cdata[i]), sizeof(float *), cudaMemcpyDeviceToHost);    
CurrentGrid->cdata[i] = new float[size];
cudaMemcpy(CurrentGrid->cdata[i], A, size*sizeof(float), cudaMemcpyDeviceToHost);            
Salin selepas log masuk

Penjelasan

Penunjuk peranti tidak boleh dinyahrujuk terus dalam panggilan cudaMemcpy pada hos. Sebaliknya, nilai penunjuk itu sendiri mesti disalin ke penunjuk perantaraan pada hos. Ini memastikan bahawa penuding hos menghala ke lokasi memori peranti yang sah di mana data boleh diakses.

Pencegahan

Untuk mengelakkan kebocoran memori dan memastikan penggunaan penunjuk peranti yang betul dalam operasi cudaMemcpy, ia adalah penting untuk mengikuti prosedur yang betul untuk menyediakan ahli kelas dengan penunjuk pada peranti. Ini termasuk menggunakan penunjuk perantaraan pada hos untuk menyalin nilai penuding dan menggunakan penuding hos untuk operasi cudaMemcpy berikutnya yang melibatkan memori peranti.

Atas ialah kandungan terperinci Mengapa CudaMemcpy Menyebabkan Kesalahan Segmentasi Apabila Menugaskan kepada Penunjuk Ahli Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan