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
Susan Sarandonasal
2024-12-03 00:07:10747semak imbas

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);

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);            

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!

Kenyataan:
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