Я не уверен, есть ли способ сделать это непосредственно в 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 Платформа доступна.