Как обновить обычный проект C ++ для проекта CUDA Runtime в VS? - PullRequest
2 голосов
/ 04 ноября 2019

Как я могу обновить обычный проект VC ++ в проект среды выполнения cuda в Visual Studio 2019?

Я попытался добавить разметки cuda в файл проекта vcxproj, но безуспешно.

Iожидаю увидеть дерево CUDA / C ++ в свойствах проекта.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

В <Project DefaultTargets="Build" должно быть:

<PropertyGroup>
  <CUDAPropsPath Condition="'$(CUDAPropsPath)'==''">
     $(VCTargetsPath)\BuildCustomizations</CUDAPropsPath>
</PropertyGroup>

добавляет переменную CUDAPropsPath, используемую далее. В том же <Project:

 <ImportGroup Label="ExtensionSettings">
   <Import Project="$(CUDAPropsPath)\CUDA 10.1.props" />
 </ImportGroup>

добавляет параметры по умолчанию CUDA / C ++ и CUDA / linker в свойствах проекта.

Для всех файлов .cu нам нужно в <ItemGroup> с другими файлами cpp:

<CudaCompile Include="Kernel0.cu"/>

А в <ImportGroup Label="ExtensionTargets"> должно быть:

<Import Project="$(CUDAPropsPath)\CUDA 10.1.targets" />

, который добавляет CUDA / C ++ и CUDA / компоновщик в свойствах проекта.

0 голосов
/ 04 ноября 2019

Я не уверен, есть ли способ сделать это непосредственно в Visual Studio 2019, но вы можете начать новый проект и выбрать CUDA 10.1 Runtime. После этого скопируйте и вставьте свой обычный проект в новый файл kernel.cu , но не забудьте оставить первые две строки такими, как они есть.

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

Альтернативный вариант:

Сравнивая проект CUDA 10.1 Runtime и обычный проект C ++, я обнаружил, что вы можете выполнить следующие шаги, чтобы выполнить преобразование:

1- Изменить ваш проект .cpp расширение файла до .cu .

2- Удалить .vcxproj.filters файл.

3- Открыть .vcxpjoj файл с программой текстового редактора, например Notepad ++ , и измените эти строки:

  • Во второй строке:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

добавьте ToolsVersion="15.0" к нему, чтобы он стал:

<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  • Есть четыре строки, подобные этой:
    <CharacterSet>Unicode</CharacterSet>

, в которой вынужно изменить Unicode на MultiByte, чтобы они стали:

    <CharacterSet>MultiByte</CharacterSet>

особенно две строки под x64, причина скоро появится.

  • В пределахэта часть:
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>

добавьте эту строку:

    <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.1.props" />

, чтобы она стала такой:

  <ImportGroup Label="ExtensionSettings">
    <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.1.props" />
  </ImportGroup>
  • Внутри этих двух разделов
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    ...
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    ...
  </ItemDefinitionGroup>

добавить WIN32;WIN64; к этим двум строкам:

      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions>_NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

, чтобы они стали:

      <PreprocessorDefinitions>WIN32;WIN64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <PreprocessorDefinitions>WIN32;WIN64;_NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

и после

    <Link>

добавить

      <AdditionalDependencies>cudart_static.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>

и после

    </Link>

добавить

    <CudaCompile>
      <TargetMachinePlatform>64</TargetMachinePlatform>
    </CudaCompile>
  • В пределах
  <ItemGroup>
    <ClCompile Include="myprojectname.cpp" />
  </ItemGroup>

изменить ClCompile на CudaCompile и расширение с cpp на cu, чтобы оно стало:

  <ItemGroup>
    <CudaCompile Include="myprojectname.cu" />
  </ItemGroup>
  • Внутри этой части:
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>

добавьте эту строку:

    <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.1.targets" />

, чтобы оно выглядело следующим образом:

  <ImportGroup Label="ExtensionTargets">
    <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.1.targets" />
  </ImportGroup>

4 - Откройте свое решение и измените его Платформу с x86 на x64 , поэтому изменение чего-либо внутри Win32 деталей не имеет значения.

5- Создайте свой проект CUDA Runtime и наслаждайтесь!

Это минимальные необходимые изменения.

Для более совершенного решения:

Есть некоторые неиспользуемые детали, мбольшинство из них для x86 и Win32 , которые можно удалить, чтобы сделать файлы проекта похожими на исходные файлы среды выполнения CUDA, вот они:

1- Открыть .sln файл с помощью Notepad ++ и удалите эти строки:

Debug|x86 = Debug|x86
Release|x86 = Release|x86
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.Debug|x86.ActiveCfg = Debug|Win32
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.Debug|x86.Build.0 = Debug|Win32
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.Release|x86.ActiveCfg = Release|Win32
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}.Release|x86.Build.0 = Release|Win32

2- Откройте .vcxpjoj файл с помощью Notepad ++ и удалите следующие строки:

  • В пределах
  <ItemGroup Label="ProjectConfigurations">
    ...
  </ItemGroup>

удалить

    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="Release|Win32">
      <Configuration>Release</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  • В пределах
  <PropertyGroup Label="Globals">
    ...
  </PropertyGroup>

удалить

    <VCProjectVersion>16.0</VCProjectVersion>
    <Keyword>Win32Proj</Keyword>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
  • После
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

удалить

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  • После этой измененной детали
  <ImportGroup Label="ExtensionSettings">
    <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.1.props" />
  </ImportGroup>

удалить

  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  • После
  <PropertyGroup Label="UserMacros" />

удалить

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>

и

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <LinkIncremental>false</LinkIncremental>
  </PropertyGroup>

и

  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>
  • В этих двух разделах:
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    ...
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    ...
  </ItemDefinitionGroup>

удалить

      <PrecompiledHeader>
      </PrecompiledHeader>

и

      <SDLCheck>true</SDLCheck>
      <ConformanceMode>true</ConformanceMode>
  • Удалитьэтот раздел:
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
    <ClCompile>
      <PrecompiledHeader>
      </PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>

Если вы сделали эти необязательные изменения, то откройте свой проект, вы обнаружите, что только x64 Платформа доступна.

...