Я работаю над своей первой программой CUDA и сталкиваюсь с ошибкой с использованием компилятора nvcc
, с которым я не сталкиваюсь при компиляции с g++
.
Мой код:
#include <iostream>
#include <cmath>
using namespace std;
double distance(double first, double second);
int main(){
double dis;
dis = distance(7.0, 1.0);
cout << "distance = " << dis << endl;
return 0;
}
double distance(double first, double second){
double diff;
diff = abs(first-second);
return diff;
}
Если я скомпилирую с nvcc test.cu -o test
, результат будет:
/usr/include/c++/5/bits/stl_iterator_base_types.h(168): error: name followed by "::" must be a class or namespace name
detected during instantiation of class "std::iterator_traits<_Iterator> [with _Iterator=double]"
test.cu(11): here
/usr/include/c++/5/bits/stl_iterator_base_types.h(169): error: name followed by "::" must be a class or namespace name
detected during instantiation of class "std::iterator_traits<_Iterator> [with _Iterator=double]"
test.cu(11): here
/usr/include/c++/5/bits/stl_iterator_base_types.h(170): error: name followed by "::" must be a class or namespace name
detected during instantiation of class "std::iterator_traits<_Iterator> [with _Iterator=double]"
test.cu(11): here
/usr/include/c++/5/bits/stl_iterator_base_types.h(171): error: name followed by "::" must be a class or namespace name
detected during instantiation of class "std::iterator_traits<_Iterator> [with _Iterator=double]"
test.cu(11): here
/usr/include/c++/5/bits/stl_iterator_base_types.h(172): error: name followed by "::" must be a class or namespace name
detected during instantiation of class "std::iterator_traits<_Iterator> [with _Iterator=double]"
test.cu(11): here
Когда я изменю расширение файла на .cpp и скомпилирую следующим образом, g++ test.cpp -o test
, код будет соответствовать. Если я затем выполню ./test
, я получу искомый результат:
distance = 6
Глядя на этот пост вдохновил меня рассмотреть возможность того, что я что-то вызываю из-за неправильногосторона разделения хоста / устройства, однако я пока не делаю никаких вызовов GPU.
Не уверен, что происходит, но пока компилятор CUDA выглядит очень привередливым.