Estoy usando CUDA 4.1 y GCC 4.5 … (¡por fin! Soporta CUDA GCC 4.5, pero a la espera de GCC 4.6). De todos modos, es posible el uso de C++11 con el CUDA 4.1?

Traté de pasar:

--compiler-options "-std=c++0x"

a nvcc y lanza un montón de errores en mí:

/usr/include/c++/4.5/exception_ptr.h(100): error: copy constructor for class "std::__exception_ptr::exception_ptr" may not have a parameter of type "std::__exception_ptr::exception_ptr"
/usr/include/c++/4.5/exception_ptr.h(100): error: expected a ")"
/usr/include/c++/4.5/exception_ptr.h(110): error: expected a ")"
/usr/include/c++/4.5/exception_ptr.h(132): error: identifier "type_info" is undefined
/usr/include/c++/4.5/exception_ptr.h(101): error: identifier "__o" is undefined
/usr/include/c++/4.5/exception_ptr.h(112): error: expected a ">"
/usr/include/c++/4.5/exception_ptr.h(112): error: identifier "__o" is undefined
/usr/include/c++/4.5/nested_exception.h(62): error: expected a ";"
/usr/include/c++/4.5/nested_exception.h(64): error: expected a ";"
/usr/include/c++/4.5/nested_exception.h(77): error: member function "std::nested_exception::~nested_exception" may not be redeclared outside its class
/usr/include/c++/4.5/nested_exception.h(77): error: function "std::<error>" may not be initialized
/usr/include/c++/4.5/nested_exception.h(77): error: expected an expression
/usr/include/c++/4.5/nested_exception.h(82): error: expected a ")"
/usr/include/c++/4.5/nested_exception.h(110): error: expected a ")"
/usr/include/c++/4.5/nested_exception.h(115): error: expected a ")"
/usr/include/c++/4.5/nested_exception.h(122): error: expected a ")"
/usr/include/c++/4.5/nested_exception.h(127): error: expected a ")"
/usr/include/c++/4.5/nested_exception.h(127): error: function template "std::__throw_with_nested" has already been defined
/usr/include/c++/4.5/bits/cpp_type_traits.h(180): error: identifier "char16_t" is undefined
/usr/include/c++/4.5/bits/cpp_type_traits.h(187): error: identifier "char32_t" is undefined
/usr/include/c++/4.5/bits/cpp_type_traits.h(187): error: class "std::__is_integer<<error-type>>" has already been defined
21 errors detected in the compilation of "/tmp/tmpxft_00000ef2_00000000-4_test_cuda.cpp1.ii".

Ejemplo de prueba.cu

#include <cuda.h>
__host__ void test() {
//nothing in method
}

Compila bien con:

nvcc -c -o test.o test.cu

Pero no con C++0x

nvcc -c -o test.o test.cu --compiler-options "-std=c++0x"
  • Es sólo la opción de compilador que causa los problemas, o estás usando c++0x características?
  • mi test_cuda.cu no tiene ningún código. Sólo tiene una función de eso es como test_cuda() {}
  • Se utiliza extern "C"?
  • nope. no utilizar extern «C» .. compilar el código C++.
  • Usted tiene que añadir un poco de código para su respuesta. Es muy difícil saber lo que va mal con sólo mirar el registro de errores.
  • ejemplo de código editado en.
  • Comprobar mi solución con CUDA 6: stackoverflow.com/questions/25941117/c11-standard-with-cuda-6-0

InformationsquelleAutor user988098 | 2012-01-29

2 Comentarios

  1. 26

    No, ya que de esta respuesta, nvcc no tienen soporte para c++11 de construcciones, incluso si son apoyadas por el anfitrión del compilador.

    La razón por la que no es tan simple como pasar -std=c++0x para el host compilador es que nvcc tiene que analizar la totalidad del código, con el fin de dividir a su __host__y __device__ mitades. Este preproceso que sucede antes de que el host compilador se presenta con una línea de código, así que nvcc‘s analizador debe ser capaz de asimilar c++11 para que funcione.

    • gracias. ¿tiene alguna sugerencia sobre la «correcta» forma de la división de C++0x y CUDA código de entonces?
    • Lamentablemente, por ahora usted necesidad de poner en cuarentena todo lo CUDA en .cu archivos que sólo el uso de c++03 construcciones que nvcc puede entender. Todo lo demás entra en una .archivo cpp para el host de compilador.
    • no ha sido cambiado en los últimos dos años, con los nuevos CUDA versiones?
    • al parecer no, ya que exactamente este mismo error me trajo hoy aquí.
    • smart un rap, tr1::unordered_map… echo de menos las siguientes características básicas mal… ¿alguien Ha probado a compilar .cu con algunos viejos Impulso versiones?
  2. 11

    Actualización en @Jared Hoberock la respuesta basada en otro mensaje que publicó en El empuje del Grupo de Google: parece que el C++11 se ha añadido soporte para CUDA 6.5 (aunque todavía es experimental e indocumentados).

    Ficticio ejemplo: test.cu

    #include <cuda.h>
    #include <iostream>
    __host__ void test() {
    float a = 12.;
    double b = 3.;
    auto c = a * b;
    std::cout << c << std::endl;
    }
    int main()
    {
    test();
    return 0;
    }

    Compilación & ejecución

    $ nvcc -std=c++11 test.cu -o test
    $ ./test
    36

    Sin -std=c++11, me sale el siguiente (se espera) error:

    test.cu(7): error: explicit type is missing ("int" assumed)

    Nota: en este ejemplo se puede fallar para compilar con GCC 5.1.

    Actualización

    CUDA 7.0 oficialmente introducido C++11:

    CUDA 7 agrega C++11 función de apoyo a nvcc, el CUDA compilador de C++. Esto significa que usted puede utilizar C++11 características, no sólo en su host código compilado con nvcc, pero también en el código de dispositivo. Nuevo lenguaje C++ características incluyen automático, las funciones lambda, variadic plantillas, static_assert, r-value referencias de la gama base de bucles, y más. Para habilitar C++11, pasar la bandera –std=c++11 a nvcc (esta opción no es necesaria para Microsoft Visual Studio).

    • En mi caso, cuando trato de compilar este llego nvcc warning : The -c++11 flag is not supported with the configured host compiler. Flag will be ignored.. Esto sucede con la versión 4.6 de g++, no con la versión 4.8. Mi Cuda versión 7.0
    • necesita un host compilador que admite -std=c++11, y este no es el caso de g++ 4.6. Sin embargo, esta versión de g++ soporta -std=c++0x, pero en nvcc‘s ayuda, usted puede leer Allowed values for this option: 'c++11'., así que no sé si usted será capaz de utilizar C++11 características a menos que actualice su compilador.
    • Gracias. Unseful

Dejar respuesta

Please enter your comment!
Please enter your name here