Ошибка компиляции Thrust (библиотека CUDA), например, 'vectorize_from_shared_kernel__entry': не является членом 'thrust::detail::device::cuda'

Я создаю проект VS с помощью CUDA VS Wizard и пытаюсь собрать программу cuda с помощью Thrust, тестовая программа довольно проста:

// ignore headers
int main(void)
{
 thrust::device_vector<double> X;
 X.resize(100);
}

Я получу ошибку компиляции, например:

1> C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29): ошибка C2039: 'vectorize_from_shared_kernel__entry': не является членом 'thrust::detail: :device::cuda' 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29): ошибка C2039: 'vectorize_from_shared_kernel__entry': не является членом 'thrust::detail::device::cuda' 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29): ошибка C2065: 'vectorize_from_shared_kernel__entry' : необъявленный идентификатор 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) : ошибка C2062: тип 'int' непредвиденный 1>C:\DOCUME~ 1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29): ошибка C2039: 'vectorize_from_shared_kernel__entry': не является членом 'thrust::detail::device::cuda' 1 >C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) : ошибка C2039: 'vectorize_from_shared_kernel__entry': не является членом 'thrust::detail::device::cuda' 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub .c(29): ошибка C2065: 'vectorize_from_shared_kernel__entry': необъявленный идентификатор 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(29) : ошибка C2062: тип 'int' неожиданный 1> C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36): ошибка C2143: синтаксическая ошибка: отсутствует ';' перед '‹' 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36): ошибка C2182: '__wrapper__device_stub_vectorize_from_shared_kernel': незаконное использование типа 'void' 1> C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36): ошибка C2988: неузнаваемое объявление/определение шаблона 1>C:\DOCUME~1\ADMINI ~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(36): ошибка C2059: синтаксическая ошибка: '‹' 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38): ошибка C2143: синтаксическая ошибка: отсутствует ';' перед '}' 1>C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/tmpxft_00003cc0_00000000-3_sample.cudafe1.stub.c(38): фатальная ошибка C1506: неисправимая ошибка области видимости блока

Однако, если я закомментирую второй оператор «X.resize (100);», он может быть успешно построен. Итак, я предполагаю, что настройка тяги, настройка правила сборки и настройки CUDA верны. У вас есть идеи о том, почему появляются эти ошибки компиляции?

Я использую VS 2008, CUDA 2.3 и Thrust 1.1.


person superb    schedule 07.03.2010    source источник


Ответы (1)


Это в файле .cu (скомпилированном с помощью nvcc)? Код Thrust должен быть помещен в файлы .cu.

Кстати, лично я избегаю мастера CUDA VS Wizard (отчасти потому, что он не предоставляется/не поддерживается NVIDIA) и использую стратегию, описанную в этот другой пост.

person Tom    schedule 07.03.2010