https://github.com/Microsoft/CNTK
Revision 8c0b71b69b0150a8045636a21cb27d821263edf0 authored by Yang Chen on 26 July 2018, 16:58:57 UTC, committed by Yang Chen on 26 July 2018, 16:58:57 UTC
Variable:Owner() returns a NULL pointer if the variable is not of
Output kind. Some ops such as combine may have output variables
of Constant kind. We would get segfaults if we don't check the kind
of the output variable.
1 parent 372aea5
Raw File
Tip revision: 8c0b71b69b0150a8045636a21cb27d821263edf0 authored by Yang Chen on 26 July 2018, 16:58:57 UTC
Check IsOutput() before invoking Owner()->IsBlock()
Tip revision: 8c0b71b
CNTK.Cpp.props
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(SolutionDir)\CNTK.Common.props" />
  <PropertyGroup>
    <CudaVersion />
    <CudaVersion Condition="Exists('$(CUDA_PATH_V9_0)') And '$(CudaVersion)' == ''">9.0</CudaVersion>

    <NvmlDll>%ProgramW6432%\NVIDIA Corporation\NVSMI\nvml.dll</NvmlDll>
    <NvmlDll Condition="Exists('c:\local\nvsmi9\NVSMI\nvml.dll')">c:\local\nvsmi9\NVSMI\nvml.dll</NvmlDll>

    <HasOpenCv>false</HasOpenCv>
    <HasOpenCv Condition="Exists('$(OPENCV_PATH)') Or Exists('$(OPENCV_PATH_V31)')">true</HasOpenCv>
    
    <HasProtobuf>false</HasProtobuf>
    <HasProtobuf Condition="Exists('$(PROTOBUF_PATH)')">true</HasProtobuf>

    <HasBoost>false</HasBoost>
    <HasBoost Condition="Exists('$(BOOST_INCLUDE_PATH)') And Exists('$(BOOST_LIB_PATH)')">true</HasBoost>

    <UseZip>false</UseZip>
    <UseZip Condition="Exists('$(ZLIB_PATH)')">true</UseZip>

    <HasMultiverso>false</HasMultiverso>
    <HasMultiverso Condition="Exists('$(SolutionDir)\Source\Multiverso\include\multiverso')">true</HasMultiverso>

    <IsUWP>false</IsUWP>
    <IsUWP Condition="'$(Configuration)'=='Debug_UWP' Or '$(Configuration)'=='Release_UWP'">true</IsUWP>
  </PropertyGroup>

  <PropertyGroup Condition="!$(IsUWP)">
    <OutputSuffix />
  </PropertyGroup>
  
  <PropertyGroup Condition="$(IsUWP)">
    <MathLibrary>OpenBLAS</MathLibrary>
    <CNTKCustomOpenBLASVersion>2</CNTKCustomOpenBLASVersion>
    <MathLibraryName>OpenBLAS library (Version: $(CNTKCustomOpenBLASVersion))</MathLibraryName>
    <CNTKCustomOpenBLASPath>$(CNTK_OPENBLAS_PATH)\$(CNTKCustomOpenBLASVersion)</CNTKCustomOpenBLASPath>    
    <MathIncludePath>$(CNTKCustomOpenBLASPath)</MathIncludePath>
    <MathLibraryPath>$(CNTKCustomOpenBLASPath)\lib\x64\RELEASE</MathLibraryPath>
    <MathDefine>USE_OPENBLAS;OS_WINNT;ARCH_X86_64;C_MSVC</MathDefine>
    <MathLinkLibrary>libopenblas.lib</MathLinkLibrary>
    <MathDelayLoad>libopenblas.dll</MathDelayLoad>
    <MathPostBuildCopyPattern>$(MathLibraryPath)\*.dll</MathPostBuildCopyPattern>
    <OutputSuffix>_app</OutputSuffix>
    <AppContainerApplication>true</AppContainerApplication>
    <ApplicationType>Windows Store</ApplicationType>
    <WindowsTargetPlatformVersion>$(UCRTVersion)</WindowsTargetPlatformVersion>
    <TargetPlatformMinVersion>10.0.10586.0</TargetPlatformMinVersion> <!-- Windows 10, November 2015 -->
    <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
    <DefaultLanguage>en-US</DefaultLanguage>
  </PropertyGroup>

  <PropertyGroup>
    <!-- If an executable links Cntk.Reader-$(CntkComponentVersion).lib, it has dependency on Cntk.Common.dll, Cntk.Math.dll and Cntk.PerformanceProfiler.dll -->
    <ReaderLibs>Cntk.Reader$(OutputSuffix)-$(CntkComponentVersion).lib;Cntk.Common$(OutputSuffix)-$(CntkComponentVersion).lib;Cntk.Math$(OutputSuffix)-$(CntkComponentVersion).lib;</ReaderLibs>
  </PropertyGroup>

  <PropertyGroup Condition="!$(IsUWP)">
    <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
    <MathLibrary>MKL</MathLibrary>
    <MathIncludePath>$(MKL_PATH)\include</MathIncludePath>
    <MathDefine>USE_MKL</MathDefine>
    <!-- Only non-UWP configurations consume PerformanceProfiler -->
    <ReaderLibs>Cntk.PerformanceProfiler-$(CntkComponentVersion).lib;$(ReaderLibs)</ReaderLibs>
    <MathLibraryName>MKL Library</MathLibraryName>
    <MathLibraryPath>$(MKL_PATH)\lib</MathLibraryPath>
    <MathLinkLibrary>mklml.lib</MathLinkLibrary>
    <MathDelayLoad>mklml.dll</MathDelayLoad>
    <MathPostBuildCopyPattern>$(MathLibraryPath)\*.dll</MathPostBuildCopyPattern>
    <HasMklDnn>false</HasMklDnn>
    <!-- disable MKL-DNN until we pick up the fix for AMD cache size https://github.com/intel/mkl-dnn/commit/ccfbf83ab489b42f7452b6701498b07c28cdb502
    <HasMklDnn Condition="Exists('$(MKL_PATH)\include\mkldnn.h')">true</HasMklDnn>
    <MathDefine Condition="$(HasMklDnn)">$(MathDefine);USE_MKLDNN</MathDefine>
    -->
    <MathLinkLibrary Condition="$(HasMklDnn)">$(MathLinkLibrary);mkldnn.lib</MathLinkLibrary>
    <MathDelayLoad Condition="$(HasMklDnn)">$(MathDelayLoad);mkldnn.dll</MathDelayLoad>
  </PropertyGroup>
  
  <PropertyGroup Condition="$(UseZip)">
    <ZipInclude>$(ZLIB_PATH)\include;$(ZLIB_PATH)\lib\libzip\include;</ZipInclude>
    <ZipDefine>USE_ZIP</ZipDefine>
    <ZipLibPath>$(ZLIB_PATH)\lib;</ZipLibPath>
    <ZipLibs>zlib.lib;zip.lib;</ZipLibs>
  </PropertyGroup>

  <PropertyGroup Condition="Exists('$(OPENCV_PATH)')">
    <OpenCvPath>$(OPENCV_PATH)</OpenCvPath>
    <OpenCvVersion>300</OpenCvVersion>
  </PropertyGroup>

  <PropertyGroup Condition="Exists('$(OPENCV_PATH_V31)')">
    <OpenCvPath>$(OPENCV_PATH_V31)</OpenCvPath>
    <OpenCvVersion>310</OpenCvVersion>
  </PropertyGroup>

  <PropertyGroup Condition="$(HasOpenCv)">
    <OpenCvInclude>$(OpenCvPath)\include;</OpenCvInclude>
    <OpenCvWorld Condition="$(ReleaseBuild)">opencv_world$(OpenCvVersion)</OpenCvWorld>
    <OpenCvWorld Condition="$(DebugBuild)">opencv_world$(OpenCvVersion)d</OpenCvWorld>
    <OpenCvLib>$(OpenCvWorld).lib</OpenCvLib>
    <OpenCvLibPath>$(OpenCvPath)\x64\vc14\lib</OpenCvLibPath>
    <OpenCvBinPath>$(OpenCvPath)\x64\vc14\bin</OpenCvBinPath>
  </PropertyGroup>

  <PropertyGroup Condition="$(HasProtobuf)">
    <ProtobufInclude>$(PROTOBUF_PATH)\include;</ProtobufInclude>
    <ProtobufLibPath>$(PROTOBUF_PATH)\lib;</ProtobufLibPath>
    <ProtobufLib Condition="$(ReleaseBuild)">libprotobuf.lib</ProtobufLib>
    <ProtobufLib Condition="$(DebugBuild)">libprotobufd.lib</ProtobufLib>
  </PropertyGroup>

  <PropertyGroup Condition="'$(CudaVersion)' == '9.0'">
    <CudaPath>$(CUDA_PATH_V9_0)</CudaPath>
    <CudaRuntimeDll>cudart64_90.dll</CudaRuntimeDll>
    <CudaDlls>cublas64_90.dll;cusparse64_90.dll;curand64_90.dll;$(CudaRuntimeDll)</CudaDlls>

    <!-- Use NvidiaCompute to define nvcc target architectures (will generate code to support them all, i.e. fat-binary, in release mode)
    In debug mode we only include cubin/PTX for 30 and rely on PTX / JIT to generate the required native cubin format
    http://docs.nvidia.com/cuda/pascal-compatibility-guide/index.html#building-applications-with-pascal-support -->
    <NvidiaCompute Condition="$(DebugBuild)">$(CNTK_CUDA_CODEGEN_DEBUG)</NvidiaCompute>
    <NvidiaCompute Condition="$(DebugBuild) And '$(NvidiaCompute)'==''">compute_30,sm_30</NvidiaCompute>

    <NvidiaCompute Condition="$(ReleaseBuild)">$(CNTK_CUDA_CODEGEN_RELEASE)</NvidiaCompute>
    <NvidiaCompute Condition="$(ReleaseBuild) And '$(NvidiaCompute)'==''">compute_30,sm_30;compute_35,sm_35;compute_50,sm_50;compute_60,sm_60;compute_61,sm_61;compute_70,sm_70</NvidiaCompute>
  </PropertyGroup>

  <PropertyGroup>
    <CudaLibs>cudart.lib;cublas.lib;cusparse.lib;curand.lib</CudaLibs>
    <CudaInclude>$(CudaPath)\include</CudaInclude>
    <CudaLibPath>$(CudaPath)\lib\$(Platform)</CudaLibPath>

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

  <PropertyGroup>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>

  <PropertyGroup Condition="Exists('$(HALIDE_PATH)')">
    <HalidePath>$(HALIDE_PATH)</HalidePath>
    <HalideInclude>$(HALIDE_PATH)\include;</HalideInclude>
    <HalideLibPath>$(HALIDE_PATH)\Release;</HalideLibPath>
    <HalideLib>halide.lib</HalideLib>
  </PropertyGroup>
 
  <!-- TODO warn if ConfigurationType not (yet) defined -->

  <PropertyGroup Condition="'$(ConfigurationType)' == 'StaticLibrary'">
    <UseDebugLibraries>$(DebugBuild)</UseDebugLibraries>
    <CharacterSet>Unicode</CharacterSet>
    <WholeProgramOptimization>$(ReleaseBuild)</WholeProgramOptimization>
    <LinkIncremental>$(DebugBuild)</LinkIncremental>
  </PropertyGroup>

  <ItemDefinitionGroup>
    <ClCompile>
      <PreprocessorDefinitions>CNTK_VERSION="$(CntkVersion)";CNTK_VERSION_BANNER="$(CntkVersionBanner)";CNTK_COMPONENT_VERSION="$(CntkComponentVersion)"</PreprocessorDefinitions>
      <!-- UWP does not use MPI -->
      <PreprocessorDefinitions Condition="!$(IsUWP)">%(PreprocessorDefinitions);HAS_MPI=1</PreprocessorDefinitions>
      <PreprocessorDefinitions Condition="'$(CudaVersion)' == '9.0'">%(PreprocessorDefinitions);CUDA_NO_HALF;__CUDA_NO_HALF_OPERATORS__</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>

  <ItemDefinitionGroup Condition="$(IsUWP)">
    <ClCompile>
      <CompileAsWinRT>false</CompileAsWinRT>
      <PreprocessorDefinitions>CNTK_UWP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <Link Condition="$(ReleaseBuild)">
      <AdditionalOptions>/nodefaultlib:vccorlib /nodefaultlib:msvcrt vccorlib.lib msvcrt.lib %(AdditionalOptions)</AdditionalOptions>
    </Link>
    <Link Condition="$(DebugBuild)">
      <AdditionalOptions>/nodefaultlib:vccorlibd /nodefaultlib:msvcrtd vccorlibd.lib msvcrtd.lib %(AdditionalOptions)</AdditionalOptions>
    </Link>
  </ItemDefinitionGroup>

  <ItemDefinitionGroup Condition="'$(ConfigurationType)' == 'StaticLibrary'">
    <ClCompile>
      <WarningLevel>Level4</WarningLevel>
      <TreatWarningAsError>true</TreatWarningAsError>
      <SDLCheck>true</SDLCheck>
      <OpenMPSupport>true</OpenMPSupport>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
    </Link>
  </ItemDefinitionGroup>

  <ItemDefinitionGroup Condition="'$(ConfigurationType)' == 'StaticLibrary' And $(DebugBuild)">
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <Link>
      <StackReserveSize>100000000</StackReserveSize>
    </Link>
  </ItemDefinitionGroup>

  <ItemDefinitionGroup Condition="$(ReleaseBuild) And !$(NoOptBuild)">
    <ClCompile>
      <Optimization>MaxSpeed</Optimization>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
    <Link>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <Profile>true</Profile>
    </Link>
  </ItemDefinitionGroup>

  <ItemDefinitionGroup Condition="$(NoOptBuild)">
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <FunctionLevelLinking>false</FunctionLevelLinking>
      <IntrinsicFunctions>false</IntrinsicFunctions>
    </ClCompile>
    <Link>
      <EnableCOMDATFolding>false</EnableCOMDATFolding>
      <OptimizeReferences>false</OptimizeReferences>
      <Profile>false</Profile>
    </Link>
  </ItemDefinitionGroup>

  <PropertyGroup Condition="$(NoOptBuild)" Label="Configuration">
    <UseDebugLibraries>false</UseDebugLibraries>
    <WholeProgramOptimization>false</WholeProgramOptimization>
    <LinkIncremental>true</LinkIncremental>
  </PropertyGroup>

</Project>
back to top