thrust::copy не работает для device_vectors
Я скопировал этот код из документации Thrust:
#include <thrust/copy.h>
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
int main()
{
thrust::device_vector<int> vec0(100);
thrust::device_vector<int> vec1(100);
thrust::copy(vec0.begin(), vec0.end(), vec1.begin());
return 0;
}
Когда я запускаю это в режиме отладки (VS2012), моя программа падает, и я получаю сообщение об ошибке Debug Error! ... R6010 - abort() has been called.
Когда я запускаю это в режиме выпуска, он все еще падает, и я получаю сообщение .exe has stopped working
,
Однако копирование с хоста на устройство работает правильно:
thrust::host_vector<int> vec0(100);
thrust::device_vector<int> vec1(100);
thrust::copy(vec0.begin(), vec0.end(), vec1.begin());
Я использую GeForce GTX 970, версия драйвера / версия CUDA - 7.5, deviceQuery работает без проблем. Библиотека времени выполнения хоста находится в Multi-threaded (/MT)
Режим. У кого-нибудь есть идея, что может вызвать эту проблему?
1 ответ
Есть несколько похожих вопросов, например, здесь
Цитировать комментарий:
"Известно, что Thrust не компилируется и работает правильно при сборке для отладки"
И из документов:
"nvcc не поддерживает отладку устройства. Код Thrust. Функции Thrust, скомпилированные с помощью (например, nvcc -G, nvcc --device-debug 0 и т. д.), скорее всего, будут аварийно завершать работу."