Visual Studio: не удается найти & ldquo; файл ресурсов & rdquo; в списке предметов для добавления в проект

Поведение не определено в случае ошибки CUDA, которая искажает контекст CUDA.

Этот тип ошибки является очевидным, потому что он «липкий», что означает, что когда это происходит, каждый вызов API CUDA будет возвращать эту ошибку до тех пор, пока контекст не будет уничтожен.

Нелипкие ошибки очищаются автоматически после того, как они возвращаются вызовом API cuda (за исключением cudaPeekAtLastError). Любая ошибка типа «сбой ядра» (недопустимый доступ, неуказанный сбой запуска и т. Д.) Будет липкой ошибкой. В вашем примере шаг 3 (всегда) возвращает ошибку API в результате вызова cudaMemcpy для переноса переменной A с устройства на хост, поэтому результаты операции cudaMemcpy не определены и ненадежны - это как если бы операция cudaMemcpy также потерпела неудачу некоторым неуказанным способом.

Поскольку поведение поврежденного контекста CUDA не определено, нет определения для содержимого любых распределений или вообще состояния машины после такая ошибка.

Примером нелипкой ошибки может быть попытка cudaMalloc получить больше данных, чем доступно в памяти устройства. Такая операция вернет ошибку из памяти, но эта ошибка будет удалена после ее возвращения, а последующие (действительные) вызовы API cuda могут завершиться успешно, без возврата ошибки. Нелипкая ошибка не искажает контекст CUDA, а поведение контекста cuda точно такое же, как если бы недопустимая операция никогда не запрашивалась.

Это различие между липкой и нелипкой ошибкой вызывается во многих документах с документированным кодом ошибки , например:

нелипкий, не-cuda-context-corrupting:

cudaErrorMemoryAllocation = 2 Ошибка API, потому что не удалось выделить достаточное количество памяти для выполнения запрошенной операции.

blockquote>

sticky, cuda-context-corrupting:

cudaErrorMisalignedAddress = 74 Устройство обнаружило инструкцию загрузки или хранения на адрес памяти, который не выровнен. Контекст нельзя использовать, поэтому он должен быть уничтожен (и должен быть создан новый). Все существующие выделения памяти устройства из этого контекста являются недопустимыми и должны быть восстановлены, если программа продолжит использовать CUDA.

blockquote>

30
задан bob 26 February 2017 в 20:12
поделиться