Rumah > pembangunan bahagian belakang > C++ > Mengapakah `cudaMemcpy` Menyebabkan Ralat Segmentasi Apabila Menyalin dari Peranti ke Hos, dan Bagaimana Saya Boleh Membetulkannya?

Mengapakah `cudaMemcpy` Menyebabkan Ralat Segmentasi Apabila Menyalin dari Peranti ke Hos, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Lepaskan: 2024-12-03 21:47:12
asal
154 orang telah melayarinya

Why Does `cudaMemcpy` Cause a Segmentation Fault When Copying from Device to Host, and How Can I Fix It?

Kesalahan Segmentasi cudaMemcpy

Apabila memanggil cudaMemcpy untuk memindahkan data dari peranti ke hos, pengguna mungkin menghadapi masalah pembahagian. Ini selalunya berpunca daripada pengendalian penunjuk peranti yang tidak betul.

Isunya

Kod berikut menunjukkan isu tersebut:

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

Di sini, Grid_dev ialah penunjuk peranti ke objek kelas grid. Percubaan untuk menyahrujuk langsung penuding ini dalam panggilan cudaMemcpy boleh menyebabkan kesalahan pembahagian.

Penyelesaian

Untuk menyelesaikan isu ini, penunjuk perantaraan mesti dibuat pada hos untuk merujuk penunjuk peranti. Kod berikut menggariskan penyelesaian yang disemak:

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

Dalam kod yang diubah suai ini, A ialah penuding hos yang pada mulanya menghala ke penuding peranti. Dengan menyalin nilai Grid_dev->cdata[i] ke A menggunakan cudaMemcpy, kami memindahkan penuding peranti ke hos dengan berkesan. Selepas itu, CurrentGrid->cdata[i] boleh diberikan kepada tatasusunan apungan baharu pada hos dan data boleh disalin daripada penuding peranti A kepada tatasusunan ini.

Atas ialah kandungan terperinci Mengapakah `cudaMemcpy` Menyebabkan Ralat Segmentasi Apabila Menyalin dari Peranti ke Hos, dan Bagaimana Saya Boleh Membetulkannya?. 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