visual studio installing instalar compiler compile gcc c++11 cuda nvidia nvcc

gcc - studio - install cuda ubuntu 18.04 nvidia



¿Puedo usar C++ 11 en los archivos.cu(CUDA5.5) en Windows7x64(MSVC) y Linux64(GCC4.8.2)? (2)

Es probable que tengas que dividir main.cpp de tus otros usuarios de esta manera:

otros.hpp:

void others();

otros.cu:

#include "others.hpp" #include <boost/typeof/std/utility.hpp> #include <thrust/device_vector.h> void others() { thrust::device_vector<int> dv(10); BOOST_AUTO(iter, dv.begin()); // regular C++ }

main.cpp:

#include "others.hpp" int main() { others(); return 0; }

Esta respuesta en particular muestra que la compilación con una versión de gcc con soporte oficial (como Robert Crovella declaró correctamente) debería funcionar al menos para el código c ++ 11 en el archivo main.cpp :

g++ -std=c++0x -c main.cpp nvcc -arch=sm_20 -c others.cu nvcc -lcudart -o test main.o others.o

(probado en Debian 8 con nvcc 5.5 y gcc 4.7.3).

Para responder a su pregunta subyacente: No tengo conocimiento de que se pueda usar C ++ 11 en archivos .cu con CUDA 5.5 en Linux (y no tenía conocimiento de que el ejemplo mostrado con C ++ 11 del lado del host se elimine de forma adecuada debajo de MSVC). Incluso presenté una solicitud de función para el soporte de constexpr que todavía está abierta.

La guía de programación CUDA para CUDA 5.5 dice:

Para el código de host, nvcc admite cualquier parte de la especificación C ++ ISO / IEC 14882: 2003 que admite el compilador c ++ de host.

Para el código del dispositivo, nvcc admite las funciones ilustradas en Ejemplos de código con algunas restricciones descritas en Restricciones; no admite la información de tipo de tiempo de ejecución (RTTI), el manejo de excepciones y la biblioteca estándar de C ++.

De todos modos, es posible usar algunas de las funciones de C ++ 11 como auto en los kernels, por ejemplo con boost :: auto. Como perspectiva, es probable que otras características de C ++ 11 como hilos no terminen en CUDA y aún no escuché ningún plan oficial sobre ellos (a partir de la supercomputación de 2013 ).

Enchufe desvergonzado: si está interesado en más de estos ajustes, siéntase libre de echar un vistazo en nuestra biblioteca libPMacc que proporciona libPMacc múltiples GPU y abstracciones de partículas para simulaciones. Implementamos lambda , un concepto de acceso tipo STL para matrices 1-3D y otras cosas útiles allí.

Todo lo mejor, Axel.

Actualización : Desde CUDA 7.0 C ++ 11 se ha agregado oficialmente el soporte en kernels . Como BenC señaló correctamente, partes de esta función ya se agregaron silenciosamente en CUDA 6.5.

Cuando compilo el siguiente código que contiene el diseño C ++ 11, en Windows7x64 (MSVS2012 + Nsight 2.0 + CUDA5.5), no obtengo errores y todo se compila y funciona bien:

#include <thrust/device_vector.h> int main() { thrust::device_vector<int> dv(10); auto iter = dv.begin(); return 0; }

Pero cuando intento compilarlo bajo Linux64 (Debian 7 Wheezey + Nsight Eclipse de CUDA5.5), aparece un error:

../src/CudaCpp11.cu(5): error: falta el tipo explícito (se supone "int")

../src/CudaCpp11.cu(5): error: no hay una función de conversión adecuada de

"thrust :: detail :: normal_iterator>" to "int" existe

2 errores detectados en la compilación de "/tmp/tmpxft_00001520_00000000-6_CudaCpp11.cpp1.ii". make: * [src / CudaCpp11.o] Error 2

Cuando agregué la línea: -stdc ++ 11

en Propiedades-> Crear-> Configuración-> Configuración de herramientas-> Crear etapas-> Opciones de preprocesador (-Xcompilador)

Me salen más errores:

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h(432): error: el identificador "nullptr" no está definido

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/stddef.h(432): error: se esperaba un ";"

...

/usr/include/c++/4.8/bits/cpp_type_traits.h(314): error: namespace "std :: __ gnu_cxx" no tiene ningún miembro

"__normal_iterator"

/usr/include/c++/4.8/bits/cpp_type_traits.h(314): error: se esperaba un ">"

Error nvcc: ''cudafe'' murió debido a la señal 11 (referencia de memoria no válida) marca: * [src / CudaCpp11.o] Error 11

Solo cuando uso thrust::device_vector<int>::iterator iter = dv.begin(); en Linux-GCC entonces no recibo un error. ¡Pero en Windows MSVS2012 todas las características de c ++ 11 funcionan bien!

¿Puedo usar C ++ 11 en los archivos .cu (CUDA5.5) en Windows7x64 (MSVC) y Linux64 (GCC4.8.2)?


Según Jared Hoberock (desarrollador de Thrust ), parece que el soporte de C ++ 11 se ha agregado a CUDA 6.5 (aunque todavía es experimental y no está documentado). Esto puede facilitar las cosas al comenzar a usar C ++ 11 en proyectos muy grandes de C ++ / CUDA, ya que dividir todo puede ser bastante engorroso para proyectos grandes cuando utiliza CMake, por ejemplo.