Gcc Cuda Clang和OS X小牛队

Gcc Cuda Clang和OS X小牛队,gcc,cuda,clang,osx-mavericks,Gcc,Cuda,Clang,Osx Mavericks,我目前正试图在MacOS 10.9上与Cmake一起构建一个Cuda项目。我的C和C++编译器是GCC,但似乎是因为小牛GCC和G+链接链接到CLAN,这是CUDA不支持的。p> 有没有人找到一个好的解决方案来使用真正的gcc,或者在没有“转储规范”的情况下让clang工作?10.9的问题是,gcc实际上是clang。请尝试最新的CUDA工具包,并明确指出NVCC使用/usr/bin/clang(NVCC-ccbin/usr/bin/clang)。这样NVCC就会知道它在处理叮当声。这个问题实际

我目前正试图在MacOS 10.9上与Cmake一起构建一个Cuda项目。我的C和C++编译器是GCC,但似乎是因为小牛GCC和G+链接链接到CLAN,这是CUDA不支持的。p>
有没有人找到一个好的解决方案来使用真正的gcc,或者在没有“转储规范”的情况下让clang工作?

10.9的问题是,
gcc
实际上是clang。请尝试最新的CUDA工具包,并明确指出NVCC使用/usr/bin/clang(NVCC-ccbin/usr/bin/clang)。这样NVCC就会知道它在处理叮当声。

这个问题实际上在OSX小牛之前就存在了,我对Mountain Lion也有同样的问题,Eugene的回答是100%正确的

然而,自从升级到Mavericks之后,我的Geforce卡似乎没有被认为是支持CUDA的设备,而且使用CUDA软件的人似乎也有同样的问题


所以最好现在不要更新

这是Eugene提供的答案的延伸:

针对Mac OSX 10.9的CUDA工具包下载已发布到

它支持10.9版本的XCode 5,并将自动使用clang而不是gcc,仅供参考

如果您在10.8上使用的是XCode 5,请参阅:

·在MacOSX10.8上,如果安装XCode 5,包括命令行工具,gcc编译器将被clang替换。通过使用--ccbin/usr/bin/clang选项,您可以从命令行继续成功地使用nvcc编译,该选项指示nvcc使用clang编译器而不是gcc编译传递给它的任何主机代码。但是,当使用NSight Eclipse版本构建时,此解决方案将不起作用。另一个可以从命令行和NSight Eclipse版本中使用的解决方案是,在安装XCode 5之后,从Apple开发者网站下载一个较旧版本的命令行工具包,它将把gcc重新安装到/usr/bin。要执行此操作,请转至


使用您的Apple ID登录,并使用屏幕左侧的搜索窗格搜索命令行工具

我刚刚下载了CUDA 5.5,安装在Mac OSX 10.8.5下,带有Xcode 5.0.2,并在Xcode中更新了命令行工具。 但我无法编译CUDA示例“nbody”。 我收到了各种有趣的错误消息,比如叮当声错误:不受支持的选项“-dumpspecs” clang error: unsupported option '-dumpspecs' 我以为我已经通过一些其他网页的帮助解决了这个问题,但随后其他问题不断出现(例如,GLEW未找到,CUDA样本路径未定义,…)。 (而且提供的makefile和cmake文件似乎太做作了,所以我找不到bug。)

所以我推出了自己的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 $@ # --------- 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 $@ $(OBJDIR)/%.o: %.cu $(NVCC) -c $(INCFLAGS) $ $@ $(DEPDIR)/%.d : %.cpp $(DEPDIR) @echo creating dependencies for $ $@ $(DEPDIR): mkdir $@ # ------ administrative stuff ------- .PHONY: clean clean: rm -f *.o $(TARGET) rm -rf $(DEPDIR) $(OBJDIR) echo: @echo $(ALLSOURCES) @echo $(ALLFILES) @echo $(ALLOBJS) #!/usr/bin/make-R #CUDA示例程序的简单Makefile #(因为提供的不起作用!:-() # #我们假设此目录中的所有文件都生成一个可执行文件。 #在下面的变量NVCC中设置GPU版本 # #在Mac OS X 10.8.5下开发和测试; #在Linux下,您可能需要调整一些路径、编译器选项和#ifdef。 # #先决条件: #-CUDA 5.5 #-通过XCode 5安装的“命令行工具” #-DYLD_回退_库_路径或DYLD_库_路径必须包括 #/Developer/NVIDIA/CUDA-5.5/lib:/Developer/NVIDIA/CUDA-5.5/samples/common/lib/darwin # #广州2013年12月 #-----变量和设置--------- # CUDA:=/Developer/NVIDIA/CUDA-5.5 NVCC:=NVCC-ccbin/usr/bin/clang-arch=sm_30——编译器选项-Wall,-ansi,-Wno额外标记 #OSX 10.8下的XCode 5需要-ccbin/usr/bin/clang #-arch=sm_30是我的笔记本电脑所必需的(它不提供sm_35) INCFLAGS:=-I$(CUDA)/样本/通用/公司 目标:=nbody OBJDIR:=obj MAKEFLAGS:=kR .后缀:.cu.cpp.h ALLSOURCES:=$(通配符*.cu*.cpp) 所有文件:=$(basename$(所有源)) ALLOBJS:=$(addsuffix.o,$(addprefix$(OBJDIR)/,$(ALLFILES))) DEPDIR:=依赖 #------自动目标-------------- 冒牌货:全部 全部:$(OBJDIR)$(DEPDIR)$(目标) @真的 $(OBJDIR): mkdir$@ #------一般规则-------------- UNAME=$(shell UNAME) ifeq($(UNAME),达尔文)#Mac OS X #OpenGL和GLUT是框架 LDFLAGS=-Xlinker-framework,OpenGL,-framework,GLUT,-L,$(CUDA)/samples/common/lib/darwin,-lGLEW 恩迪夫 $(目标):$(ALLOBJS) $(NVCC)$^$(LDFLAGS)-o$@ $(OBJDIR)/%.o:%.cu $(NVCC)-c$(INCFLAGS)$$@ $(DEPDIR)/%.d:%.cpp$(DEPDIR) @echo正在为$创建依赖项$@ $(DEPDIR): mkdir$@ #----行政人员------- .假冒:干净 清洁: rm-f*.o$(目标) rm-rf$(DEPDIR)$(OBJDIR) 回声: @echo$(所有来源) @echo$(所有文件) @echo$(ALLOBJS)
这是我在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
$brew cat memtestG80
需要“公式”
#文件:https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook
#/usr/local/Library/Contributions/example-formula.rb
#请在提交拉取请求之前删除所有生成的评论!
#在编译时需要来自的nvcchttps://developer.nvidia.com/cuda-downloads
#在编译时需要popt
类Memtestg80<公式
主页“”
url“https://github.com/ihaque/memtestG80/archive/master.zip"
sha1“
版本“C4336A69FFF07945C322D6C7FC40B0B12341CC4C4C”
#取决于“cmake”=>:构建
取决于:x11#您的公式是否需要任何x11/XQuartz组件
def安装
#ENV.deparallelize#如果并行构建时公式失败
系统“make”、“-f”、“Makefiles/Makefile.osx”、“NVCC=/usr/local/cuda/bin/NVCC-ccbin/usr/bin/clang”、“POPT_DIR=/usr/local/cell/POPT/1.16/lib”
系统“cp”、“-a”、“memtestG80”、“/usr/local/bin”
结束
试做
#'test do'将创建、运行
$ 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++