2013-10-13 4 views
8

Я сейчас пытаюсь построить проект Cuda с Cmake на MacOS 10.9. Мой компилятор C и C++ - gcc, но кажется, что поскольку ссылки Mavericks gcc и g ++ связаны с clang, что не поддерживается CUDA.Cuda Clang и OS X Mavericks

Кто-нибудь нашел хорошее решение, чтобы использовать настоящий gcc, или сделать работу clang без «dumpspecs»?

ответ

7

Вопрос с 10.9 заключается в том, что gcc на самом деле звонит. Пожалуйста, попробуйте последний инструментарий CUDA и прямо укажите NVCC для использования/usr/bin/clang (nvcc -ccbin/usr/bin/clang). Таким образом, NVCC будет знать, что это касается clang.

+1

Это делает это, но мне кажется, что новая проблема возникает на 10,9 и Xcode 5: по умолчанию STDLIB теперь LibC++, который, кажется, производит новые ошибки с nvcc. Поэтому вам также нужно добавить флаг '-stdlib = libstdC++ '(через -Xcompiler, если он указан непосредственно в nvcc) – kamjagin

2

Проблема на самом деле была там до OS X Mavericks, у меня была такая же проблема с Moutain Lion, и ответ от Eugene на 100% правильный.

Однако, похоже, что моя карта Geforce не распознается как устройство с поддержкой CUDA с момента обновления до Mavericks, и кажется, что люди, использующие программное обеспечение, использующие CUDA, имеют одинаковые проблемы.

Так лучше не обновлять прямо сейчас

4

Это является продолжением ответа, предоставленной Eugene:

Загрузка CUDA Toolkit для Mac OSX 10.9 была размещена на CUDA download page

Он поддерживает XCode 5 на 10.9, и автоматически будет использовать clang вместо gcc, FYI.

Если вы используете XCode 5 на 10,8, пожалуйста, см release notes:

· В Mac OS X 10.8, если вы установите XCode 5, в том числе инструменты командной строки, то GCC компилятор будет замещаться лязгом , Вы можете продолжить компиляцию с nvcc из командной строки с помощью опции -ccbin/usr/bin/clang, которая инструктирует nvcc использовать компилятор clang вместо gcc для компиляции любого переданного на него кода хоста. Однако это решение не будет работать при создании с помощью NSight Eclipse Edition. Альтернативным решением, которое будет работать из командной строки и с помощью NSight Eclipse Edition, является загрузка старой версии пакета инструментов командной строки с веб-сайта Apple Developer после установки XCode 5, который будет переустанавливать gcc в/usr/bin , Для того чтобы сделать это, перейдите к

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

знаком с идентификатором Apple, и искать инструменты командной строки, используя панель поиска на левой стороне экрана.

1

Я только что скачал CUDA 5.5, установленный под Mac OSX 10.8.5, с Xcode 5.0.2 и обновил инструменты командной строки в Xcode. Но я не смог получить образец CUDA «nbody» для компиляции. Я получал всевозможные смешные сообщения об ошибках, например

 clang error: unsupported option '-dumpspecs'
Я думал, что решил этот вопрос с помощью некоторых других веб-страниц, но затем другие проблемы продолжали ползти (например, GLEW не найден, CUDA sample path undefined, .. .). (И предоставленные make-файлы и файлы cmake выглядели просто слишком надуманными, так что я не мог найти ошибку.)

Итак, я перевернул собственный файл makefile. Я размещаю его здесь, в надежде, что это может помочь другим сэкономить несколько часов.

 
    #!/usr/bin/make -R 

    # Simple Makefile for a CUDA sample program 
    # (because the provided ones don't work! :-() 
    # 
    # We assume that all files in this directory produce one executable. 
    # Set your GPU version in variable NVCC below 
    # 
    # Developed and tested under Mac OS X 10.8.5; 
    # under Linux, you probably need to adjust a few paths, compiler options, and #ifdef's. 
    # 
    # Prerequisites: 
    # - CUDA 5.5 
    # - The "Command Line Tools" installed via XCode 5 
    # - DYLD_FALLBACK_LIBRARY_PATH or DYLD_LIBRARY_PATH must include 
    #  /Developer/NVIDIA/CUDA-5.5/lib:/Developer/NVIDIA/CUDA-5.5/samples/common/lib/darwin 
    # 
    # GZ Dec 2013 


    # -------- variables and settings --------- 
    # 

    CUDA := /Developer/NVIDIA/CUDA-5.5 

    NVCC := nvcc -ccbin /usr/bin/clang -arch=sm_30 --compiler-options -Wall,-ansi,-Wno-extra-tokens 
    # -ccbin /usr/bin/clang is needed with XCode 5 under OSX 10.8 
    # -arch=sm_30 is needed for my laptop (it does not provide sm_35) 

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

    TARGET := nbody 

    OBJDIR := obj 

    MAKEFLAGS := kR 

    .SUFFIXES: .cu .cpp .h 

    ALLSOURCES := $(wildcard *.cu *.cpp) 
    ALLFILES := $(basename $(ALLSOURCES)) 
    ALLOBJS := $(addsuffix .o,$(addprefix $(OBJDIR)/,$(ALLFILES))) 

    DEPDIR := depend 

    # --------- automatic targets -------------- 

    .PHONY: all 
    all: $(OBJDIR) $(DEPDIR) $(TARGET) 
     @true 

    $(OBJDIR): 
     mkdir [email protected] 


    # --------- generic rules -------------- 

    UNAME = $(shell uname) 
    ifeq ($(UNAME), Darwin) # Mac OS X 
    # OpenGL and GLUT are frameworks 
    LDFLAGS = -Xlinker -framework,OpenGL,-framework,GLUT,-L,$(CUDA)/samples/common/lib/darwin,-lGLEW 
    endif 

    $(TARGET): $(ALLOBJS) 
     $(NVCC) $^ $(LDFLAGS) -o [email protected] 

    $(OBJDIR)/%.o: %.cu 
     $(NVCC) -c $(INCFLAGS) $ [email protected] 

    $(DEPDIR)/%.d : %.cpp $(DEPDIR) 
     @echo creating dependencies for $ [email protected] 

    $(DEPDIR): 
     mkdir [email protected] 


    # ------ administrative stuff ------- 

    .PHONY: clean 

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


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

0

Вот рецепт доморощенного, который работает для меня на льве.

$ 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 
1

Clang стал компилятором по умолчанию с OSX Maverick выпуска, GCC и г ++ команды перенаправлены на лязг компилятор. Вы можете загрузить gcc-компилятор с помощью homebrew и передать команды gcc и g ++ обратно в компилятор gcc, выполнив следующие шаги.

$ 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++ 

Я нашел решение по этой статье: 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

Смежные вопросы