【问题标题】:How to properly create an Alea GPU project? Errors on "Getting Started" code如何正确创建 Alea GPU 项目? “入门”代码错误
【发布时间】:2015-10-05 04:11:57
【问题描述】:

我在 Visual Studio 2012 Professional 中创建了一个 Alea GPU 项目:

  1. 文件 > 新建 > 项目 > F# 应用程序
  2. 将 NuGet 包管理器更新到最新版本
  3. 工具 > NuGet 包管理器 > 控制台
  4. PM> 安装包 Alea.CUDA
  5. PM> 安装包 Alea.CUDA.IL
  6. 使用这些说明安装的许可证:http://quantalea.com/static/app/tutorial%5Cgetting_started%5Cinstall_license.html
  7. 将此处的代码https://github.com/quantalea/AleaGPUTutorial/blob/master/src/fsharp/getting_started/ParallelSquare.fs 复制到我的主项目文件中。
  8. 构建解决方案。

我收到以下错误:

  1. 上面 GitHub 链接中的行号和文件相互对应。

我不熟悉使用 Alea GPU、Visual Studio 和 F#。我已经尝试利用现有资源尽我所能。尽管 Alea GPU 网站解释了要做什么(通过 NuGet 安装 Alea、安装许可证、提供代码等),但它可能面向有使用 Visual Studio 经验的用户。值得一提的是,我在这台机器上安装了 CUDA 驱动程序。

我也已按照此页面上的说明进行操作,但它似乎仍在建设中:http://quantalea.com/static/app/tutorial%5Cgetting_started%5Ccreate_new_project.html。我不会使用 Fody,因为我不会使用 C#。

【问题讨论】:

    标签: visual-studio-2012 f# aleagpu


    【解决方案1】:

    感谢您报告网站问题。是的,我们的文件正在构建中。我尝试了你的步骤,我想出了如何正确地做到这一点,我稍后会告诉你。您遇到的问题主要是因为:

    • 您使用的是VS2012,默认引用FSharp 3.0,有点过时,建议使用FSharp 3.1
    • 您忘记引用代码中使用的其他程序集,例如 NUnit 和 FSharp.Charting
    • Alea.CUDA.Fody 并不是要使用 C#,而是要在 GPU 代码上进行 AOT 编译。它使用 Fody 插件在 MSBuild 过程中编译 GPU 代码,因此您的应用程序不需要在运行时编译 GPU 代码。

    现在,步骤如下:

    • 打开 VS 2012,升级 nuget 插件,然后新建 F# 控制台应用程序项目
    • 在解决方案资源管理器中展开“引用”,并删除 FSharp.Core 引用(由于是 FSharp 3.0,我们将其替换为新的 3.1)
    • 转到“包管理器控制台”,安装一些代码中使用的 nuget 包:
      • Install-Package FSharp.Core
      • Install-Package FSharp.Charting
      • Install-Package NUnit
    • 现在我们将安装Alea.CUDA.Fody(它将通过依赖安装Alea.CUDA)。但由于 Fody 插件必须运行一些 powershell 脚本来创建 FodyWeavers.xml 文件来配置 Fody 的使用,并且该脚本不适用于 F# 项目(它适用于 C# 项目)。解决方法很简单,在运行Install-Package Alea.CUDA.Fody之前在VS2012中点击“全部保存”即可。您会在包管理器控制台中看到一些红色错误,这很好,只是 Fody 插件的脚本不适用于 F# 项目。您可以放心地忽略它。安装Alea.CUDA.Fody 后,FodyWeavers.xml 文件将添加到您的项目中,您可以在其中配置如何进行 AOT 编译。我建议你添加一个设置来显示详细信息:<Alea.CUDA Verbose="true"/>
    • 现在您需要添加一些常用引用,因为包FSharp.Charting 使用它们。为此,请在解决方案资源管理器中右键单击“引用”,然后选择“添加引用...”,在“程序集”->“框架”下,选择以下程序集:
      • System.Drawing
      • System.Windows.Forms
      • System.Windows.Forms.DataVisualization
    • 现在您的项目已设置完毕。请将构建配置更改为“发布”。
    • 现在让我们添加源文件。首先在解决方案资源管理器中右键Program.fs,选择“Add above”->“New Item...”,选择F#源文件,命名为ParallelSquare.fs
    • https://github.com/quantalea/AleaGPUTutorial/blob/master/src/fsharp/getting_started/ParallelSquare.fs 复制到新创建的文件中
    • 需要修改一个地方:https://github.com/quantalea/AleaGPUTutorial/blob/master/src/fsharp/getting_started/ParallelSquare.fs#L139,改成WorkerExtension.Launch(worker, <@ squareKernel @>) lp dOutputs.Ptr dInputs.Ptr inputs.Length,原因是Launch方法是扩展方法,VS 2012中的FSharp编译器不支持,所以我们直接调用该扩展方法(所以我建议你使用 VS 2013)。
    • 现在在您的Program.fs 文件中,调用主函数中的测试:Tutorial.Fs.quickStart.ParallelSquare.squareChart()。然后你可以按“F5”运行它。

    在此之后,我建议您阅读http://quantalea.com/static/app/manual/compilation-index.html,其中解释了安装、AOT 与 JIT 编译等。

    【讨论】:

    • Worker.Launch方法是C#风格的扩展方法,Visual Stuido 2013从F# 3.1开始支持,请参考blogs.msdn.com/b/fsharpteam/archive/2013/06/27/…,搜索“Support for C# extension members with first parameter a类型参数”。所以在VS2012中,你必须直接调用那个扩展方法。
    • 非常感谢您的帮助,非常感谢。我按照您的指示进行操作,我之前遇到的所有错误现在都消失了。但是,仍然有一个错误和一个警告阻止它构建。错误是Fody/Alea.CUDA: The method call is not supported ParallelSquare.fs Line 90 Column 4,警告是发现同一依赖程序集Microsoft.Common的不同版本之间存在冲突。针对第 1605 行第 5 列。我不会担心这个警告,但你知道什么会导致这个错误吗?
    • 更新:我实际上刚刚切换到 VS2013,它工作正常。感谢您的指导,我能够在那里运行它。谢谢。
    • 嗨@bryan,这个错误经常发生,这意味着找到了2个具有相同ID但版本不同的程序集。所以我现在可以猜测的是,当 Fody 尝试 AOT 编译时,您没有清理解决方案(简而言之,它会加载您的程序集并编译标记为 AOTCompile 属性的内核,然后将 ptx 代码插入您的程序集) 你组装,它找到两个 FSharp.Core.dll 。所以通常如果我使用 GIT repo,我会经常做 git clean 来避免这些问题。另外,您可以查看 Paket 项目,这是一个比 nuget 更稳定的包解决方案。
    • 或者,如果fody插件不起作用,您可以通过两种方式简单地禁用它:1)您删除源代码中的AOTCompile属性; 2) 在 FodyWeavers.xml 中,添加 。然后 GPU 编译将在运行时进行,即所谓的“JIT 编译”
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2014-08-09
    相关资源
    最近更新 更多