РЕДАКТИРОВАТЬ: я считаю, что проблема связана с тем, что nvcc вызывает компилятор C++ вместо компилятора C из-за ошибки, которую я получаю, когда не передаю вызов malloc(3) в char*. Меня привело к этому утверждению: Неверное преобразование из void* в char**
РЕДАКТИРОВАТЬ: он отлично работает, если я использую fileO = fopen(version, "w"); в обход вызовов strcpy и strcat. (ха-ха, я сказал освистывание...)
Итак, у меня есть программа CUDA, в которой я собрал файловый ввод-вывод из последовательной версии той же программы (не CUDA). Точно такой же код работает с обычными компиляциями gcc, но не через nvcc. Я знаю, что nvcc отключает C/C++ от собственного компилятора C++, но по какой-то причине он просто не открывает доступный для записи файл. Я открывал и закрывал другой файловый поток для чтения данных в приведенном выше коде, но я делаю это в своей последовательной версии, и там все работает нормально.
Вот соответствующий код:
else
{
char* version = "matrixExpCUDAx";
char* filename = (char *)malloc(strlen(version) + strlen(argv[3]));
strcpy(filename, version);
strcat(filename, argv[3]);
FILE *fileO;
fileO = fopen(filename, "w");
if(DEBUG)
{
for (i=0; i<(dim*dim); i++) fprintf(stderr, "%f\n", h_O[i]);
}
else
{
if(fileO != NULL)
{
for (i=0; i<(dim*dim); i++)
{
fprintf(fileO, "%f\n", h_O[i]);
}
fclose(fileO);
}
else fprintf(stderr, "Write file failed to create\n");
}
}
....
Каждый раз получаю сообщение "Ошибка создания файла для записи".
Есть идеи?
nvcc
не является компилятором, и он не скомпилировал этот код, а ваш стандартный хост-компилятор C++ (gcc
, судя по тегам). Несмотря на внешний вид, этот вопрос не имеет ничего общего с CUDA или цепочкой инструментов CUDA, а связан с непониманием завершения строки в C. - person talonmies   schedule 21.03.2012