Следующая простая программа никогда не завершается, если выполняется вызов cudaMalloc.Комментирование только cudaMalloc приводит к его нормальному завершению.
#include <iostream>
using std::cout;
using std::cin;
#include "cuda.h"
#include "cutil_inline.h"
void PrintCudaVersion(int version, const char *name)
{
int versionMaj = version / 1000;
int versionMin = (version - (versionMaj * 1000)) / 10;
cout << "CUDA " << name << " version: " << versionMaj << "." << versionMin << "\n";
}
void ReportCudaVersions()
{
int version = 0;
cudaDriverGetVersion(&version);
PrintCudaVersion(version, "Driver");
cudaRuntimeGetVersion(&version);
PrintCudaVersion(version, "Runtime");
}
int main(int argc, char **argv)
{
//CUresult r = cuInit(0); << These two lines were in original post
//cout << "Init result: " << r << "\n"; << but have no effect on the problem
ReportCudaVersions();
void *ptr = NULL;
cudaError_t err = cudaSuccess;
err = cudaMalloc(&ptr, 1024*1024);
cout << "cudaMalloc returned: " << err << " ptr: " << ptr << "\n";
err = cudaFree(ptr);
cout << "cudaFree returned: " << err << "\n";
return(0);
}
Это работает в Windows 7, драйвере CUDA 4.1, среде выполнения CUDA 3.2.Я проследил возврат из main через CRT в ExitProcess (), из которого он никогда не возвращается (как и ожидалось), но процесс также никогда не заканчивается.С VS2008 я могу прекратить отладку ОК.Из командной строки я должен закрыть окно консоли.
Вывод программы:
Init result: 0
CUDA Driver version: 4.1
CUDA Runtime version: 3.2
cudaMalloc returned: 0 ptr: 00210000
cudaFree returned: 0
Я попытался сделать объем выделения настолько большим, что cudaMalloc завершится ошибкой.Он сделал и сообщил об ошибке, но программа по-прежнему не будет выходить.Так что это, очевидно, связано с простым вызовом cudaMalloc, а не с наличием выделенной памяти.
Есть идеи относительно того, что здесь происходит?
РЕДАКТИРОВАТЬ: я был неправ во втором предложении -Я должен удалить и cudaMalloc, и cudaFree, чтобы заставить программу выйти.Оставление одного из них приводит к зависанию.
РЕДАКТИРОВАТЬ. Хотя существует много ссылок на тот факт, что версии драйверов CUDA имеют обратную совместимость, эта проблема исчезла, когда я вернул драйвер к V3.2.