如何在 Visual Studio 2010 中启动 CUDA 应用程序?

How do I start a CUDA app in Visual Studio 2010?(如何在 Visual Studio 2010 中启动 CUDA 应用程序?)
本文介绍了如何在 Visual Studio 2010 中启动 CUDA 应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

直接问题:如何在 Visual Studio 2010 中创建一个简单的 hello world CUDA 项目?

背景:我写过 CUDA 内核.我非常熟悉 Visual Studio 2005 中的 .vcproj 文件——手动调整了几个.在 VS 2005 中,如果我想构建一个 CUDA 内核,我会添加一个自定义构建规则,然后显式定义 nvcc 调用来构建文件.

我已迁移到 Win 7 和 VS 2010,因为我真的很想试用 nSight.我安装了 nSight 1.5.但这就是我完全迷失的地方.如果我像以前一样继续,nvcc 报告它只支持 msvc 8.0 &9.0.但该网站明确表示支持VS 2010.

我在其他地方读到我需要安装 VS 2008 (msvc 9.0)——我的话.现在就这样做.

但我猜我的问题至少有一部分源于本土的定制构建工具规范.几个 网站谈添加*.rules文件到构建中,但我收集到这仅适用于 VS 2008.在构建自定义"下,我看到 CUDA 3.1 和 3.2,但是当我向项目添加内核时,它们并没有构建.另一个网站宣称关键是三个文件:Cuda.props Cuda.xml Cuda.targets,但它没有说明如何或在哪里添加这些文件——或者更确切地说,我会赌我只是不明白网站上引用的注释.

所以 有谁知道如何在 VS 2010 中创建一个简单的项目来构建 CUDA 内核——使用 nSight 1.5 设置或随附的 NvCudaRuntimeApi.v3.2.rules 文件CUDA 3.2 RC?

提前致谢!我会提供赏金,但我总共只有 65 分.

解决方案

CUDA TOOLKIT 4.0 及更高版本

构建自定义文件(安装到 Program FilesMSBuildMicrosoft.Cppv4.0BuildCustomizations 目录中)教"Visual Studio 如何编译和链接您的任何 .cu 文件项目到您的应用程序.如果您选择跳过安装自定义,或者如果您在 CUDA 之后安装了 VS2010,您可以稍后按照 Program FilesNVIDIA GPU Computing ToolkitCUDAv4.0extrasvisual_studio_integration.

  • 使用标准 MS 向导创建一个新项目(例如一个空的控制台项目)
  • 在 .c 或 .cpp 文件中实现您的主机(串行)代码
  • 添加 NVIDIA 构建自定义(右键单击项目,构建自定义,勾选相关的 CUDA 框)
  • 如果使用 CUDA 4.0,请参阅注释 1
  • 在 .cu 文件中实现包装器和内核
  • 如果您在构建自定义之前添加了 .cu 文件,那么您需要将 .cu 文件的类型设置为 CUDA C/C++(右击文件,Properties,设置Item Type)
  • 添加 CUDA 运行时库(右键单击项目并选择 Properties,然后在 Linker -> Input 中添加 cudart.lib附加依赖项)
  • 然后只需构建您的项目,.cu 文件将被编译为 .obj 并自动添加到链接中

顺便说一句,如果可能的话,我会提倡避免cutil,而是自己进行检查.Cutil 不受 NVIDIA 支持,它只是用来尝试使 SDK 中的示例专注于实际程序和算法设计,并避免在每个示例中重复相同的事情(例如命令行解析).如果您自己编写,那么您将有更好的控制权,并且会知道发生了什么.例如,如果函数失败,cutilSafeCall 包装器会调用 exit() - 真正的应用程序(而不是示例)可能应该更优雅地处理失败!

<小时>

注意

  1. 仅对于 CUDA 4.0,您可能需要将此修复应用到建立自定义.此补丁修复了以下消息:

<块引用>

计算元素中AssemblyFile"属性的值$(CudaBuildTasksPath)"的结果"无效

Direct Question: How do I create a simple hello world CUDA project within visual studio 2010?

Background: I've written CUDA kernels. I'm intimately familiar with the .vcproj files from Visual Studio 2005 -- tweaked several by hand. In VS 2005, if I want to build a CUDA kernel, I add a custom build rule and then explicitly define the nvcc call to build the files.

I have migrated to Win 7, and VS 2010 because I really want to try out nSight. I have nSight 1.5 installed. But this is where I'm totally lost. If I proceed as before, nvcc reports that it only supports msvc 8.0 & 9.0. But the website clearly states that it supports VS 2010.

I read somewhere else that I need to have VS 2008 (msvc 9.0) also installed -- my word. Doing so now.

But I'm guessing that at least part of my problems stem from the homegrown custom build tool specifications. Several websites talk about adding a *.rules file to the build, but I've gathered that this is only applicable to VS 2008. Under "Build Customizations" I see CUDA 3.1 and 3.2, but when I add kernels to the project they aren't built. Another website proclaims that the key is three files: Cuda.props Cuda.xml Cuda.targets, but it doesn't say how or where to add these files -- or rather I'll gamble that I just don't understand the notes referenced in the website.

So does anyone know how to create a simple project in VS 2010 which builds a CUDA kernel -- using either the nSight 1.5 setup or the NvCudaRuntimeApi.v3.2.rules file which ships with the CUDA 3.2 RC?

Thanks in advance! I'd offer a bounty, but I only have 65 points total.

解决方案

CUDA TOOLKIT 4.0 and later

The build customisations file (installed into the Program FilesMSBuildMicrosoft.Cppv4.0BuildCustomizations directory) "teaches" Visual Studio how to compile and link any .cu files in your project into your application. If you chose to skip installing the customisations, or if you installed VS2010 after CUDA, you can add them later by following the instructions in Program FilesNVIDIA GPU Computing ToolkitCUDAv4.0extrasvisual_studio_integration.

  • Create a new project using the standard MS wizards (e.g. an empty console project)
  • Implement your host (serial) code in .c or .cpp files
  • Add the NVIDIA build customisation (right click on the project, Build customizations, tick the relevant CUDA box)
  • See note 1 if using CUDA 4.0
  • Implement your wrappers and kernels in .cu files
  • If you added .cu files before the build customisations, then you'll need to set the type of the .cu files to CUDA C/C++ (right-click on the file, Properties, set Item Type)
  • Add the CUDA runtime library (right click on the project and choose Properties, then in Linker -> Input add cudart.lib to the Additional Dependencies)
  • Then just build your project and the .cu files will be compiled to .obj and added to the link automatically

Incidentally I would advocate avoiding cutil if possible, instead roll your own checking. Cutil is not supported by NVIDIA, it's just used to try to keep the examples in the SDK focussed on the actual program and algorithm design and avoid repeating the same things in every example (e.g. command line parsing). If you write your own then you will have much better control and will know what is happening. For example, the cutilSafeCall wrapper calls exit() if the function fails - a real application (as opposed to a sample) should probably handle the failure more elegantly!


NOTE

  1. For CUDA 4.0 only you may need to apply this fix to the build customisations. This patch fixes the following message:

The result "" of evaluating the value "$(CudaBuildTasksPath)" of the "AssemblyFile" attribute in the element is not valid

这篇关于如何在 Visual Studio 2010 中启动 CUDA 应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do compilers treat variable length arrays(编译器如何处理变长数组)
Deduce template argument from std::function call signature(从 std::function 调用签名推导出模板参数)
check if member exists using enable_if(使用 enable_if 检查成员是否存在)
Standard Library Containers with additional optional template parameters?(具有附加可选模板参数的标准库容器?)
Uses of a C++ Arithmetic Promotion Header(C++ 算术提升标头的使用)
Parameter pack must be at the end of the parameter list... When and why?(参数包必须位于参数列表的末尾...何时以及为什么?)