Cuda Clang y OS X Mavericks

Actualmente estoy intentando construir un proyecto Cuda con Cmake en MacOS 10.9. Mi comstackdor C y C ++ son gcc, pero parece que desde Mavericks gcc y g ++ se vinculan a clang, que no es compatible con CUDA.

¿Alguien ha encontrado una buena solución para usar el gcc real, o para hacer clang sin “dumpspecs”?

El problema con 10.9 es que gcc es realmente clang. Pruebe el último kit de herramientas CUDA y señale explícitamente NVCC para usar / usr / bin / clang (nvcc-cbin / usr / bin / clang). De esta forma NVCC sabrá que está lidiando con clang.

Esta es una extensión de la respuesta proporcionada por Eugene:

La descarga del juego de herramientas CUDA para Mac OSX 10.9 ha sido publicada en la página de descarga de CUDA

Es compatible con XCode 5 en 10.9, y automáticamente usará clang en lugar de gcc, FYI.

SI está utilizando XCode 5 en 10.8, consulte las notas de la versión :

· En Mac OS X 10.8, si instala XCode 5, incluidas las herramientas de línea de comandos, el comstackdor gcc será reemplazado por clang. Puede continuar comstackndo satisfactoriamente con nvcc desde la línea de comandos utilizando la opción –ccbin / usr / bin / clang, que indica a nvcc que use el comstackdor de clang en lugar de gcc para comstackr cualquier código de host que se le haya pasado. Sin embargo, esta solución no funcionará cuando se compile con NSight Eclipse Edition. Una solución alternativa que funcionará desde la línea de comandos y con NSight Eclipse Edition es descargar una versión anterior del paquete de herramientas de línea de comandos desde el sitio web de Apple Developer después de instalar XCode 5, que reinstalará gcc en / usr / bin . Para hacer esto, ve a

http://developer.apple.com/downloads/index.action

inicie sesión con su ID de Apple y busque herramientas de línea de comandos usando el panel de búsqueda en el lado izquierdo de la pantalla.

El problema en realidad estaba allí antes de OS X Mavericks, tuve el mismo problema con Moutain Lion y la respuesta de Eugene es 100% correcta.

Sin embargo, parece que mi tarjeta Geforce no es reconocida como un dispositivo compatible con CUDA desde la actualización a Mavericks y parece que las personas que usan software que usan CUDA tienen los mismos problemas.

Entonces mejor no actualizar ahora

Acabo de descargar CUDA 5.5, instalado en Mac OSX 10.8.5, con Xcode 5.0.2 y herramientas de línea de comandos actualizadas en Xcode. Pero no pude obtener la muestra de CUDA “nbody” para comstackr. Recibí todo tipo de mensajes de error divertidos, como

  error de clang: opción no compatible '-dumpspecs' 

Pensé que lo había resuelto con la ayuda de algunas otras páginas web, pero luego siguieron apareciendo otros problemas (p. Ej., GLEW no encontrado, ruta de muestras CUDA indefinida, …). (Y los archivos make y los cmake provistos parecían demasiado artificiales, por lo que no pude encontrar el error).

Así que rodé mi propio archivo MAKE. Lo estoy publicando aquí, con la esperanza de que pueda ayudar a otros a ahorrar algunas horas.

     #! / usr / bin / make -R

     # Simple Makefile para un progtwig de ejemplo CUDA
     # (porque los provistos no funcionan! :-()
     #
     # Suponemos que todos los archivos en este directorio producen un ejecutable.
     # Configure su versión de GPU en NVCC variable a continuación
     #
     # Desarrollado y probado bajo Mac OS X 10.8.5;
     # en Linux, probablemente necesite ajustar algunas rutas, opciones de comstackción y # ifdef.
     #
     # Prerrequisitos:
     # - CUDA 5.5
     # - Las "Herramientas de línea de comando" instaladas a través del XCode 5
     # - DYLD_FALLBACK_LIBRARY_PATH o DYLD_LIBRARY_PATH deben incluir
     # /Developer/NVIDIA/CUDA-5.5/lib:/Developer/NVIDIA/CUDA-5.5/samples/common/lib/darwin
     #
     # GZ Dic 2013


     # -------- variables y configuraciones ---------
     #

     CUDA: = /Developer/NVIDIA/CUDA-5.5

     NVCC: = nvcc-cbin / usr / bin / clang -arch = sm_30 --compiler-options -Wall, -ansi, -Wno-extra-tokens
     # -ccbin / usr / bin / clang es necesario con XCode 5 bajo OSX 10.8
     # -arch = sm_30 es necesario para mi computadora portátil (no proporciona sm_35)

     INCFLAGS: = -I $ (CUDA) / samples / common / inc

     TARGET: = nbody

     OBJDIR: = obj

     MAKEFLAGS: = kR

     .SUFFIXES: .cu .cpp .h

     ALLSOURCES: = $ (comodín * .cu * .cpp)
     ALLFILES: = $ (nombre base $ (ALLSOURCES))
     ALLOBJS: = $ (addsuffix .o, $ (addprefix $ (OBJDIR) /, $ (ALLFILES)))

     DEPDIR: = depende

     # --------- objectives automáticos --------------

     .PHONY: todo
     todo: $ (OBJDIR) $ (DEPDIR) $ (TARGET) 
         @cierto

     $ (OBJDIR):
         mkdir $ @


     # --------- reglas genéricas --------------

     UNAME = $ (shell uname)
     ifeq ($ (UNAME), Darwin) # Mac OS X
     # OpenGL y GLUT son marcos
     LDFLAGS = -Xlinker -framework, OpenGL, -framework, GLUT, -L, $ (CUDA) / samples / common / lib / darwin, -lGLEW
     terminara si

     $ (TARGET): $ (ALLOBJS)
         $ (NVCC) $ ^ $ (LDFLAGS) -o $ @

     $ (OBJDIR) /%. O:% .cu
         $ (NVCC) -c $ (INCFLAGS) $ $ @

     $ (DEPDIR) /%. D:% .cpp $ (DEPDIR)
         @echo creando dependencias por $ $ @

     $ (DEPDIR):
         mkdir $ @


     # ------ cosas administrativas -------

     .PHONY: limpio

     limpiar:
         rm -f * .o $ (TARGET)
         rm -rf $ (DEPDIR) $ (OBJDIR)


     eco:
         @echo $ (ALLSOURCES)
         @echo $ (ALLFILES)
         @echo $ (ALLOBJS)

Clang se convierte en el comstackdor predeterminado con el lanzamiento de OsX Maverick, los comandos gcc y g ++ se redirigen al comstackdor clang. Puede descargar el comstackdor gcc a través de homebrew y vincular los comandos gcc y g ++ al comstackdor gcc siguiendo los pasos a continuación.

 $ brew install gcc48 [...] $ sudo mkdir /usr/bin/backup && sudo mv /usr/bin/gcc /usr/bin/g++ /usr/bin/backup $ sudo ln -s /usr/local/bin/gcc-4.8 /usr/bin/gcc $ sudo ln -s /usr/local/bin/g++-4.8 /usr/bin/g++ 

Encontré la solución en este artículo: http://gvsmirnov.ru/blog/tech/2014/02/07/building-openjdk-8-on-osx-maverick.html#all-you-had-to-do -was-follow-the-damn-train-cj

Aquí hay una receta de Homebrew que funciona para mí en Lion.

 $ brew cat memtestG80 require "formula" # Documentation: https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook # /usr/local/Library/Contributions/example-formula.rb # PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST! # Requires at compile time nvcc from https://developer.nvidia.com/cuda-downloads # Requires popt at compile time class Memtestg80 < Formula homepage "" url "https://github.com/ihaque/memtestG80/archive/master.zip" sha1 "" version "c4336a69fff07945c322d6c7fc40b0b12341cc4c" # depends_on "cmake" => :build depends_on :x11 # if your formula requires any X11/XQuartz components def install # ENV.deparallelize # if your formula fails when building in parallel system "make", "-f", "Makefiles/Makefile.osx", "NVCC=/usr/local/cuda/bin/nvcc -ccbin /usr/bin/clang", "POPT_DIR=/usr/local/Cellar/popt/1.16/lib" system "cp", "-a", "memtestG80", "/usr/local/bin" end test do # `test do` will create, run in and delete a temporary directory. # # This test will fail and we won't accept that! It's enough to just replace # "false" with the main program this formula installs, but it'd be nice if you # were more thorough. Run the test with `brew test memtestG80`. # # The installed folder is not in the path, so use the entire path to any # executables being tested: `system "#{bin}/program", "do", "something"`. system "false" end end