CUDA: границы памяти целы, а данные проверили?
CUDA: границы памяти целы, а данные проверили?
Вы проверили свой CUDA-код: memcheck ошибок не нашёл, но результат всё ещё неверный. Прежде чем подозревать GPU, проверьте, записаны ли данные в память до чтения.
У NVIDIA Compute Sanitizer для этого есть отдельный режим initcheck. Он ищет обращения к неинициализированной памяти GPU — той, куда ещё не записали данные. По умолчанию проверяется global memory, основная память устройства. Проверка границ массива и проверка его заполнения — разные задачи.
Для небольшого воспроизводимого теста на Linux сначала запустите memcheck и исправьте найденные ошибки. Затем выполните compute-sanitizer --tool initcheck ./app, заменив ./app своей CUDA-программой. Если отчёт укажет чтение незаполненного буфера, проверьте путь записи в него, а не просто обнуляйте всё подряд.
Так вы отделите ошибку подготовки данных от подозрений на железо. Initcheck не заменяет memcheck: NVIDIA рекомендует сначала проверить ошибки доступа к памяти.
Читать внутри выделенного буфера — не значит читать подготовленные данные.

