Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/marian.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Junczys-Dowmunt <Marcin.JunczysDowmunt@microsoft.com>2018-12-13 03:51:08 +0300
committerFrank Seide <fseide@microsoft.com>2018-12-13 03:51:08 +0300
commit66f05527d980f3b6f7482341444d1bdbcf97785e (patch)
tree660b8b3799e5c297141a33eb06a55c5a103c093f
parent346d1fd9e2a8b05a1074e992dfcc907d39dc7823 (diff)
parent8115bcc172f48f6497c4ea202d5ecf4a8f8adac3 (diff)
Merged PR 5895: Update windows build for recent changes
This makes the Windows build work again after the most recent changes, also handles SentencePiece and small bugfixes. Fixes warnings in our code. Related work items: #90255
-rw-r--r--CMakeLists.txt48
-rw-r--r--src/3rd_party/pathie-cpp/src/path.cpp13
-rw-r--r--src/3rd_party/pathie-cpp/src/pathie.cpp8
-rw-r--r--src/3rd_party/zlib/CMakeLists.txt7
-rw-r--r--src/3rd_party/zlib/zutil.c13
-rw-r--r--src/3rd_party/zstr/zstr.hpp10
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/command/marian_server.cpp2
-rwxr-xr-xsrc/common/file_stream.h12
-rwxr-xr-xsrc/common/filesystem.h6
-rwxr-xr-xsrc/common/timer.h2
-rwxr-xr-xsrc/data/corpus_base.cpp6
-rwxr-xr-xsrc/data/default_vocab.cpp6
-rwxr-xr-xsrc/data/sentencepiece_vocab.cpp4
-rwxr-xr-xsrc/data/vocab.cpp8
-rwxr-xr-xsrc/data/vocab.h8
-rw-r--r--src/data/vocab_base.h6
-rwxr-xr-xsrc/models/amun.h2
-rwxr-xr-xsrc/models/nematus.h2
-rwxr-xr-xsrc/models/transformer_factory.h4
-rw-r--r--src/models/transformer_stub.cpp4
-rw-r--r--src/tensors/cpu/device.cpp10
-rw-r--r--src/tensors/cpu/sharp/avx_gemm.cpp14
-rw-r--r--src/tensors/cpu/sharp/int_gemm.cpp6
-rw-r--r--src/tensors/gpu/cudnn_wrappers.cu18
-rwxr-xr-xsrc/tensors/rand.cpp4
-rwxr-xr-xsrc/tensors/tensor.h2
-rwxr-xr-xsrc/training/graph_group_multinode.cpp10
-rw-r--r--vs/BuildRelease.bat2
-rw-r--r--vs/CheckDeps.bat112
-rw-r--r--vs/CreateVSProjects.bat13
-rwxr-xr-xvs/Marian.sln376
-rw-r--r--vs/README.md32
-rw-r--r--vs/paths_for_windows4
34 files changed, 545 insertions, 230 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e2372667..28e648aa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,6 +32,34 @@ message(STATUS "Project version: ${PROJECT_VERSION_STRING_FULL}")
execute_process(COMMAND git submodule update --init --recursive --no-fetch
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+# Set compilation flags
+if(MSVC)
+# These are used in src/CMakeLists.txt on a per-target basis
+ list(APPEND ALL_WARNINGS /WX; /W4;)
+
+ # Disabled bogus warnings for CPU intrincics:
+ # C4310: cast truncates constant value
+ # C4324: 'marian::cpu::int16::`anonymous-namespace'::ScatterPut': structure was padded due to alignment specifier
+ set(DISABLE_GLOBALLY "/wd\"4310\" /wd\"4324\"")
+
+ set(INTRINSICS "/arch:AVX")
+
+ # Or maybe use these?
+ # set(INTRINSICS "/arch:AVX2")
+ # set(INTRINSICS "/arch:AVX512")
+
+ set(CMAKE_CXX_FLAGS "/EHsc /DWIN32 /D_WINDOWS /DUNICODE /D_UNICODE /D_CRT_NONSTDC_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS ${DISABLE_GLOBALLY}")
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /MT /O2 ${INTRINSICS} /Zi /MP /GL /DNDEBUG")
+ set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} /MTd /Od /Ob0 ${INTRINSICS} /RTC1 /Zi /D_DEBUG")
+
+ # ignores warning LNK4049: locally defined symbol free imported - this comes from zlib
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /LTCG:incremental /INCREMENTAL:NO /NODEFAULTLIB:MSVCRT /ignore:4049")
+ set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /LTCG:incremental")
+
+ find_library(SHLWAPI Shlwapi.lib)
+ set(EXT_LIBS ${EXT_LIBS} SHLWAPI)
+else()
# Detect support CPU instrinsics for the current platform. This will
# only by used with BUILD_ARCH=native. For overridden BUILD_ARCH we
@@ -64,21 +92,11 @@ else()
set(INTRINSICS "-msse4.1")
endif()
-# Set compilation flags
-if(MSVC)
- set(CMAKE_CXX_FLAGS "/EHsc /DWIN32 /D_WINDOWS /DUNICODE /D_UNICODE /D_CRT_NONSTDC_NO_WARNINGS /D_CRT_SECURE_NO_WARNINGS")
- set(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /W4 /Zi /MP /GL /DNDEBUG")
- set(CMAKE_CXX_FLAGS_DEBUG "/MTd /Od /Ob0 /RTC1 /Zi /D_DEBUG")
-
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /LTCG:incremental /INCREMENTAL:NO")
-
- set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /LTCG:incremental")
-else()
- set(DISABLE_GLOBALLY "-Wno-unused-result")
+set(DISABLE_GLOBALLY "-Wno-unused-result")
- # These are used in src/CMakeLists.txt on a per-target basis
- list(APPEND ALL_WARNINGS -Wall; -Werror; -Wno-unused-result; -Wno-deprecated; -Wno-pragmas; -Wno-unused-parameter; -Wextra; -Wno-unused-function;
- -Wno-unused-value; -Wno-unknown-pragmas; -Wno-sign-compare; -Wno-missing-field-initializers;)
+# These are used in src/CMakeLists.txt on a per-target basis
+list(APPEND ALL_WARNINGS -Wall; -Werror; -Wno-unused-result; -Wno-deprecated; -Wno-pragmas; -Wno-unused-parameter; -Wextra; -Wno-unused-function;
+ -Wno-unused-value; -Wno-unknown-pragmas; -Wno-sign-compare; -Wno-missing-field-initializers;)
# This warning does not exist prior to gcc 5.0
if(CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0)
@@ -87,7 +105,7 @@ else()
set(CMAKE_CXX_FLAGS "-std=c++11 -O3 -Ofast -m64 -pthread -march=${BUILD_ARCH} ${INTRINSICS} -Wl,--no-as-needed -funroll-loops -ffinite-math-only -fPIC ${DISABLE_GLOBALLY}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -g -rdynamic")
- set(CMAKE_CXX_FLAGS_DEBUG "-std=c++11 -g -rdynamic -O0 -pthread -Wl,--no-as-needed -fPIC -Wno-unused-result -Wno-deprecated -Werror -Wno-pragmas")
+ set(CMAKE_CXX_FLAGS_DEBUG "-std=c++11 -g -rdynamic -O0 -pthread -Wl,--no-as-needed -fPIC -Wno-unused-result -Wno-deprecated -Wno-pragmas")
set(CMAKE_CXX_FLAGS_SLIM "${CMAKE_CXX_FLAGS} -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -g -rdynamic")
set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE} -pg -g -rdynamic")
diff --git a/src/3rd_party/pathie-cpp/src/path.cpp b/src/3rd_party/pathie-cpp/src/path.cpp
index 99185085..3dc1e14b 100644
--- a/src/3rd_party/pathie-cpp/src/path.cpp
+++ b/src/3rd_party/pathie-cpp/src/path.cpp
@@ -51,6 +51,9 @@
#include <shlwapi.h>
//#include <ntifs.h> // Currently not in msys2
+// @TODO: This is a hack to make it compile under Windows, check if this is save.
+#define F_OK 0
+
#elif defined(_PATHIE_UNIX)
#include <unistd.h>
#include <limits.h>
@@ -159,7 +162,7 @@ void Path::sanitize()
}
// Remove trailing slash if any (except for the filesystem root)
- long len = m_path.length();
+ long len = (long)m_path.length();
#if defined(_PATHIE_UNIX)
if (len > 1 && m_path[len - 1] == '/')
m_path = m_path.substr(0, len - 1);
@@ -2920,6 +2923,7 @@ Path Path::global_appentries_dir(localpathtype local)
#else
#error Unsupported system.
#endif
+ local; // make compiler happy
}
/**
@@ -2952,6 +2956,7 @@ Path Path::global_immutable_data_dir(localpathtype local)
#else
#error Unsupported system.
#endif
+ local; // make compiler happy
}
/**
@@ -2984,6 +2989,7 @@ Path Path::global_mutable_data_dir(localpathtype local)
#else
#error Unsupported system
#endif
+ local; // make compiler happy
}
/**
@@ -3013,6 +3019,7 @@ Path Path::global_cache_dir(localpathtype local)
#else
#error Unsupported system.
#endif
+ local; // make compiler happy
}
/**
@@ -3045,6 +3052,7 @@ Path Path::global_runtime_dir(localpathtype local)
#else
#error Unsupported system.
#endif
+ local; // make compiler happy
}
/**
@@ -3078,6 +3086,7 @@ Path Path::global_config_dir(localpathtype local)
#else
#error Unsupported system.
#endif
+ local; // make compiler happy
}
/**
@@ -3227,6 +3236,7 @@ std::vector<Path> Path::glob(const std::string& pattern, int flags /* = 0 */)
#else
#error Unsupported system.
#endif
+ flags; // make compiler happy
}
///@}
@@ -3276,6 +3286,7 @@ bool Path::fnmatch(const std::string& pattern, int flags /* = 0 */) const
#else
#error Unsupported system.
#endif
+ flags; // make compiler happy
}
/**
diff --git a/src/3rd_party/pathie-cpp/src/pathie.cpp b/src/3rd_party/pathie-cpp/src/pathie.cpp
index 9df1f733..c0abc689 100644
--- a/src/3rd_party/pathie-cpp/src/pathie.cpp
+++ b/src/3rd_party/pathie-cpp/src/pathie.cpp
@@ -39,12 +39,12 @@
*/
std::string Pathie::utf16_to_utf8(std::wstring str)
{
- int size = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0, NULL, NULL);
+ int size = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (int)str.length(), NULL, 0, NULL, NULL);
char* utf8 = (char*) malloc(size); // sizeof(char) = 1 per ANSI C standard.
memset(utf8, 0, size);
- size = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), str.length(), utf8, size, NULL, NULL);
+ size = WideCharToMultiByte(CP_UTF8, 0, str.c_str(), (int)str.length(), utf8, size, NULL, NULL);
if (size == 0)
throw(Pathie::WindowsError(GetLastError()));
@@ -61,12 +61,12 @@ std::string Pathie::utf16_to_utf8(std::wstring str)
*/
std::wstring Pathie::utf8_to_utf16(std::string str)
{
- int count = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0);
+ int count = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int)str.length(), NULL, 0);
wchar_t* utf16 = (wchar_t*) malloc(count * sizeof(wchar_t));
memset(utf16, 0, count * sizeof(wchar_t));
- count = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), utf16, count);
+ count = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int)str.length(), utf16, count);
if (count == 0)
throw(Pathie::WindowsError(GetLastError()));
diff --git a/src/3rd_party/zlib/CMakeLists.txt b/src/3rd_party/zlib/CMakeLists.txt
index c9584424..503e0f1a 100644
--- a/src/3rd_party/zlib/CMakeLists.txt
+++ b/src/3rd_party/zlib/CMakeLists.txt
@@ -4,4 +4,9 @@ file(GLOB ZLIB_INC *.h)
# add sources of the wrapper as a "SQLiteCpp" static library
add_library(zlib OBJECT ${ZLIB_SRC} ${ZLIB_INC})
-target_compile_options(zlib PUBLIC -Wno-implicit-function-declaration)
+
+if(MSVC)
+ target_compile_options(zlib PUBLIC /wd"4996" /wd"4267")
+else()
+ target_compile_options(zlib PUBLIC -Wno-implicit-function-declaration)
+endif()
diff --git a/src/3rd_party/zlib/zutil.c b/src/3rd_party/zlib/zutil.c
index a76c6b0c..8c494e94 100644
--- a/src/3rd_party/zlib/zutil.c
+++ b/src/3rd_party/zlib/zutil.c
@@ -296,11 +296,14 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr)
#ifndef MY_ZCALLOC /* Any system without a special alloc function */
-#ifndef STDC
-extern voidp malloc OF((uInt size));
-extern voidp calloc OF((uInt items, uInt size));
-extern void free OF((voidpf ptr));
-#endif
+// // Fix linker warning under MSC
+// #define STDC
+
+// #ifndef STDC
+// extern voidp malloc OF((uInt size));
+// extern voidp calloc OF((uInt items, uInt size));
+// extern void free OF((voidpf ptr));
+// #endif
voidpf ZLIB_INTERNAL zcalloc (opaque, items, size)
voidpf opaque;
diff --git a/src/3rd_party/zstr/zstr.hpp b/src/3rd_party/zstr/zstr.hpp
index b621905d..be5094c3 100644
--- a/src/3rd_party/zstr/zstr.hpp
+++ b/src/3rd_party/zstr/zstr.hpp
@@ -179,9 +179,9 @@ public:
// run inflate() on input
if (! zstrm_p) zstrm_p = new detail::z_stream_wrapper(true);
zstrm_p->next_in = reinterpret_cast< decltype(zstrm_p->next_in) >(in_buff_start);
- zstrm_p->avail_in = in_buff_end - in_buff_start;
+ zstrm_p->avail_in = (uInt)(in_buff_end - in_buff_start);
zstrm_p->next_out = reinterpret_cast< decltype(zstrm_p->next_out) >(out_buff_free_start);
- zstrm_p->avail_out = (out_buff + buff_size) - out_buff_free_start;
+ zstrm_p->avail_out = (uInt)((out_buff + buff_size) - out_buff_free_start);
int ret = inflate(zstrm_p, Z_NO_FLUSH);
// process return code
if (ret != Z_OK && ret != Z_STREAM_END) throw Exception(zstrm_p, ret);
@@ -248,7 +248,7 @@ public:
while (true)
{
zstrm_p->next_out = reinterpret_cast< decltype(zstrm_p->next_out) >(out_buff);
- zstrm_p->avail_out = buff_size;
+ zstrm_p->avail_out = (uInt)buff_size;
int ret = deflate(zstrm_p, flush);
if (ret != Z_OK && ret != Z_STREAM_END && ret != Z_BUF_ERROR) throw Exception(zstrm_p, ret);
std::streamsize sz = sbuf_p->sputn(out_buff, reinterpret_cast< decltype(out_buff) >(zstrm_p->next_out) - out_buff);
@@ -283,7 +283,7 @@ public:
virtual std::streambuf::int_type overflow(std::streambuf::int_type c = traits_type::eof())
{
zstrm_p->next_in = reinterpret_cast< decltype(zstrm_p->next_in) >(pbase());
- zstrm_p->avail_in = pptr() - pbase();
+ zstrm_p->avail_in = (uInt)(pptr() - pbase());
while (zstrm_p->avail_in > 0)
{
int r = deflate_loop(Z_NO_FLUSH);
@@ -294,7 +294,7 @@ public:
}
}
setp(in_buff, in_buff + buff_size);
- return traits_type::eq_int_type(c, traits_type::eof()) ? traits_type::eof() : sputc(c);
+ return traits_type::eq_int_type((char)c, traits_type::eof()) ? traits_type::eof() : sputc((char)c);
}
virtual int sync()
{
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6daeb08f..03524117 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -58,6 +58,7 @@ add_library(marian STATIC
models/model_factory.cpp
models/encoder_decoder.cpp
+ models/transformer_stub.cpp
rescorer/score_collector.cpp
diff --git a/src/command/marian_server.cpp b/src/command/marian_server.cpp
index fd49fc88..a9a1b0be 100644
--- a/src/command/marian_server.cpp
+++ b/src/command/marian_server.cpp
@@ -17,7 +17,7 @@ int main(int argc, char **argv) {
// Initialize web server
WSServer server;
- server.config.port = options->get<size_t>("port", 8080);
+ server.config.port = (short)options->get<size_t>("port", 8080);
auto &translate = server.endpoint["^/translate/?$"];
diff --git a/src/common/file_stream.h b/src/common/file_stream.h
index 92ae8631..9abe7e23 100755
--- a/src/common/file_stream.h
+++ b/src/common/file_stream.h
@@ -4,18 +4,14 @@
#include "common/logging.h"
#include "common/definitions.h"
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wsuggest-override"
-#include "3rd_party/zstr/zstr.hpp"
-#pragma GCC diagnostic pop
-
-#ifdef _GNUC_
+#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsuggest-override"
#endif
+#include "3rd_party/zstr/zstr.hpp"
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream_buffer.hpp>
-#ifdef _GNUC_
+#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
@@ -182,9 +178,11 @@ public:
bool empty() { return istream_->peek() == std::ifstream::traits_type::eof(); }
void setbufsize(size_t size) const {
+#ifdef 0 // this is buggy, do nothing
istream_->rdbuf()->pubsetbuf(0, 0);
readBuf_.reset(new char[size]);
istream_->rdbuf()->pubsetbuf(readBuf_.get(), 0);
+#endif
}
template <typename T>
diff --git a/src/common/filesystem.h b/src/common/filesystem.h
index 9dd0ae55..f9c06104 100755
--- a/src/common/filesystem.h
+++ b/src/common/filesystem.h
@@ -7,11 +7,17 @@
// @TODO: go back to canonical names for functions and objects
// as specified in C++17 so it becomes easy to move in the future
+#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsuggest-override"
+#endif
+
#include "3rd_party/pathie-cpp/include/path.hpp"
#include "3rd_party/pathie-cpp/include/errors.hpp"
+
+#ifdef __GNUC__
#pragma GCC diagnostic pop
+#endif
namespace marian {
namespace filesystem {
diff --git a/src/common/timer.h b/src/common/timer.h
index 264576bf..dfb91bf0 100755
--- a/src/common/timer.h
+++ b/src/common/timer.h
@@ -21,7 +21,7 @@ namespace marian {
namespace timer {
// Helper function to get the current date and time
-static std::string currentDate() {
+static inline std::string currentDate() {
std::time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
char date[100] = {0};
std::strftime(date, sizeof(date), "%F %X %z", std::localtime(&now));
diff --git a/src/data/corpus_base.cpp b/src/data/corpus_base.cpp
index c9704313..c9df1c42 100755
--- a/src/data/corpus_base.cpp
+++ b/src/data/corpus_base.cpp
@@ -82,7 +82,7 @@ CorpusBase::CorpusBase(Ptr<Options> options, bool translate)
for(size_t i = 0; i < paths_.size(); ++i) {
Ptr<Vocab> vocab = New<Vocab>(options_, i);
std::vector<std::string> trainPaths = { paths_[i] };
- int vocSize = vocab->loadOrCreate("", trainPaths, maxVocabs[i]);
+ size_t vocSize = vocab->loadOrCreate("", trainPaths, maxVocabs[i]);
// TODO: this is not nice as it modifies the option object and needs to expose the changes
// outside the corpus as models need to know about the vocabulary size; extract the vocab
// creation functionality from the class.
@@ -119,7 +119,7 @@ CorpusBase::CorpusBase(Ptr<Options> options, bool translate)
// it wild not be created again, but just correctly loaded.
auto pathsAndSize = groupVocab[vocabPaths[i]];
std::vector<std::string> groupedPaths(pathsAndSize.paths.begin(), pathsAndSize.paths.end());
- int vocSize = vocab->loadOrCreate(vocabPaths[i], groupedPaths, pathsAndSize.size);
+ size_t vocSize = vocab->loadOrCreate(vocabPaths[i], groupedPaths, pathsAndSize.size);
// TODO: this is not nice as it modifies the option object and needs to expose the changes
// outside the corpus as models need to know about the vocabulary size; extract the vocab
@@ -140,7 +140,7 @@ CorpusBase::CorpusBase(Ptr<Options> options, bool translate)
for(size_t i = 0; i + 1 < vocabPaths.size(); ++i) {
Ptr<Vocab> vocab = New<Vocab>(options_, i);
- int vocSize = vocab->load(vocabPaths[i], maxVocabs[i]);
+ size_t vocSize = vocab->load(vocabPaths[i], maxVocabs[i]);
options_->getYaml()["dim-vocabs"][i] = vocSize;
vocabs_.emplace_back(vocab);
diff --git a/src/data/default_vocab.cpp b/src/data/default_vocab.cpp
index 1ce055db..e344eadf 100755
--- a/src/data/default_vocab.cpp
+++ b/src/data/default_vocab.cpp
@@ -82,7 +82,7 @@ public:
return id2str_.size();
}
- int load(const std::string& vocabPath, int max) override {
+ size_t load(const std::string& vocabPath, size_t maxSize) override {
bool isJson = regex::regex_search(vocabPath, regex::regex("\\.(json|yaml|yml)$"));
LOG(info,
"[data] Loading vocabulary from {} file {}",
@@ -120,7 +120,7 @@ public:
auto id = pair.second;
// note: this requires ids to be sorted by frequency
- if(!max || id < (Word)max) {
+ if(!maxSize || id < (Word)maxSize) {
insertWord(id, str);
}
}
@@ -174,7 +174,7 @@ public:
requireWord(DEFAULT_EOS_ID, DEFAULT_EOS_STR);
}
- return std::max((int)id2str_.size(), max);
+ return std::max(id2str_.size(), maxSize);
}
// for fakeBatch()
diff --git a/src/data/sentencepiece_vocab.cpp b/src/data/sentencepiece_vocab.cpp
index ed476ec4..4457dc06 100755
--- a/src/data/sentencepiece_vocab.cpp
+++ b/src/data/sentencepiece_vocab.cpp
@@ -111,7 +111,7 @@ private:
public:
SentencePieceVocab(Ptr<Options> options, size_t batchIndex)
- : options_(options), batchIndex_(batchIndex), generator_(Config::seed) {
+ : options_(options), batchIndex_(batchIndex), generator_((uint32_t)Config::seed) {
if(options_->has("sentencepiece-alphas")) {
auto alphas = options_->get<std::vector<float>>("sentencepiece-alphas");
@@ -232,7 +232,7 @@ public:
return spm_->GetPieceSize();
}
- int load(const std::string& vocabPath, int /*max*/) override {
+ size_t load(const std::string& vocabPath, size_t /*maxSize*/) override {
LOG(info, "[data] Loading SentencePiece vocabulary from file {}", vocabPath);
ABORT_IF(!filesystem::exists(vocabPath),
diff --git a/src/data/vocab.cpp b/src/data/vocab.cpp
index e95ea721..62b021a3 100755
--- a/src/data/vocab.cpp
+++ b/src/data/vocab.cpp
@@ -12,7 +12,7 @@ Ptr<VocabBase> createVocab(const std::string& vocabPath, Ptr<Options> options, s
return vocab ? vocab : createDefaultVocab();
}
-int Vocab::loadOrCreate(const std::string& vocabPath,
+size_t Vocab::loadOrCreate(const std::string& vocabPath,
const std::vector<std::string>& trainPaths,
size_t maxSize) {
size_t size = 0;
@@ -49,13 +49,13 @@ int Vocab::loadOrCreate(const std::string& vocabPath,
size = load(vocabPath, maxSize);
}
LOG(info, "[data] Setting vocabulary size for input {} to {}", batchIndex_, size);
- return (int)size;
+ return size;
}
-int Vocab::load(const std::string& vocabPath, size_t maxSize) {
+size_t Vocab::load(const std::string& vocabPath, size_t maxSize) {
if(!vImpl_)
vImpl_ = createVocab(vocabPath, options_, batchIndex_);
- return vImpl_->load(vocabPath, maxSize);
+ return vImpl_->load(vocabPath, (int)maxSize);
}
void Vocab::create(const std::string& vocabPath,
diff --git a/src/data/vocab.h b/src/data/vocab.h
index 4bad1795..af4ea71f 100755
--- a/src/data/vocab.h
+++ b/src/data/vocab.h
@@ -25,11 +25,11 @@ public:
Vocab(Ptr<Options> options, size_t batchIndex)
: options_(options), batchIndex_(batchIndex) {}
- int loadOrCreate(const std::string& vocabPath,
- const std::vector<std::string>& trainPaths,
- size_t maxSize = 0);
+ size_t loadOrCreate(const std::string& vocabPath,
+ const std::vector<std::string>& trainPaths,
+ size_t maxSize = 0);
- int load(const std::string& vocabPath, size_t maxSize = 0);
+ size_t load(const std::string& vocabPath, size_t maxSize = 0);
void create(const std::string& vocabPath,
const std::vector<std::string>& trainPaths,
diff --git a/src/data/vocab_base.h b/src/data/vocab_base.h
index d3078d9a..2050792f 100644
--- a/src/data/vocab_base.h
+++ b/src/data/vocab_base.h
@@ -9,7 +9,7 @@ namespace marian {
class VocabBase {
public:
- virtual int load(const std::string& vocabPath, int max = 0) = 0;
+ virtual size_t load(const std::string& vocabPath, size_t maxSize = 0) = 0;
virtual void create(const std::string& vocabPath,
const std::vector<std::string>& trainPaths,
@@ -19,10 +19,10 @@ public:
virtual const std::string& canonicalExtension() const = 0;
virtual const std::vector<std::string>& suffixes() const = 0;
- int findAndLoad(const std::string& path, int max) {
+ size_t findAndLoad(const std::string& path, size_t maxSize) {
for(auto suffix : suffixes())
if(filesystem::exists(path + suffix))
- return load(path + suffix, max);
+ return load(path + suffix, maxSize);
return 0;
}
diff --git a/src/models/amun.h b/src/models/amun.h
index 7e453a83..35b65206 100755
--- a/src/models/amun.h
+++ b/src/models/amun.h
@@ -170,7 +170,7 @@ public:
ioItems.emplace_back();
ioItems.back().name = "decoder_c_tt";
ioItems.back().shape = Shape({1, 0});
- ioItems.back().bytes.emplace_back(0);
+ ioItems.back().bytes.emplace_back((char)0);
io::addMetaToItems(getModelParametersAsString(), "special:model.yml", ioItems);
io::saveItems(name, ioItems);
diff --git a/src/models/nematus.h b/src/models/nematus.h
index c43a90e9..88e9854b 100755
--- a/src/models/nematus.h
+++ b/src/models/nematus.h
@@ -69,7 +69,7 @@ public:
ioItems.emplace_back();
ioItems.back().name = "decoder_c_tt";
ioItems.back().shape = Shape({1, 0});
- ioItems.back().bytes.emplace_back(0);
+ ioItems.back().bytes.emplace_back((char)0);
io::addMetaToItems(getModelParametersAsString(), "special:model.yml", ioItems);
io::saveItems(name, ioItems);
diff --git a/src/models/transformer_factory.h b/src/models/transformer_factory.h
index dea53a90..aa31e4d1 100755
--- a/src/models/transformer_factory.h
+++ b/src/models/transformer_factory.h
@@ -12,7 +12,3 @@ namespace marian {
Ptr<EncoderBase> NewEncoderTransformer(Ptr<Options> options);
Ptr<DecoderBase> NewDecoderTransformer(Ptr<Options> options);
} // namespace marian
-
-#ifndef _MSC_VER
-#include "models/transformer.h"
-#endif
diff --git a/src/models/transformer_stub.cpp b/src/models/transformer_stub.cpp
new file mode 100644
index 00000000..420b7781
--- /dev/null
+++ b/src/models/transformer_stub.cpp
@@ -0,0 +1,4 @@
+// TODO: This is a wrapper around transformer.h. We kept the .H name to minimize confusing git, until this is code-reviewed.
+// This is meant to speed-up builds, and to support Ctrl-F7 to rebuild.
+
+#include "models/transformer.h"
diff --git a/src/tensors/cpu/device.cpp b/src/tensors/cpu/device.cpp
index b0fdae92..04a79ae6 100644
--- a/src/tensors/cpu/device.cpp
+++ b/src/tensors/cpu/device.cpp
@@ -22,13 +22,19 @@ Device::~Device() {
// Should generate a runtime error otherwise as we have a check in the AVX512
// functions which tests for alignment.
#ifdef _WIN32
-#define MALLOC(size) _aligned_alloc(size, alignment_)
+#define MALLOC(size) _aligned_malloc(size, alignment_)
#elif __GNUC__
#define MALLOC(size) aligned_alloc(alignment_, size)
#else
#define MALLOC(size) malloc(size)
#endif
+#ifdef _WIN32
+#define FREE(ptr) _aligned_free(ptr)
+#else
+#define FREE(ptr) free(ptr)
+#endif
+
void Device::reserve(size_t size) {
size = align(size);
ABORT_IF(size < size_ || size == 0,
@@ -37,7 +43,7 @@ void Device::reserve(size_t size) {
if(data_) {
uint8_t *temp = static_cast<uint8_t*>(MALLOC(size));
std::copy(data_, data_ + size_, temp);
- free(data_);
+ FREE(data_);
data_ = temp;
} else {
data_ = static_cast<uint8_t*>(MALLOC(size));
diff --git a/src/tensors/cpu/sharp/avx_gemm.cpp b/src/tensors/cpu/sharp/avx_gemm.cpp
index c65f91ce..c41b73eb 100644
--- a/src/tensors/cpu/sharp/avx_gemm.cpp
+++ b/src/tensors/cpu/sharp/avx_gemm.cpp
@@ -99,7 +99,8 @@ union IntAccess {
* _mm512_sra_epi32(sum, shift16));
*/
inline void Convert32Sum(__m512i &sum) {
- sum = _mm512_madd_epi16(sum, _mm512_set1_epi16(1));
+ short one = 1;
+ sum = _mm512_madd_epi16(sum, _mm512_set1_epi16(one));
}
// Two sum version.
@@ -114,7 +115,7 @@ inline ReducedPair Reduce16to32(__m512i sum1, __m512i sum2) {
_mm512_unpacklo_epi32(sum1, sum2));
// 1 2 1 2 1 2 1 2
__m256i halves = _mm256_add_epi32(_mm512_castsi512_si256(pack12),
- _mm512_extracti64x4_epi64(pack12, 1));
+ _mm512_extracti64x4_epi64(pack12, (short)1));
// 1 2 1 2
IntAccess a;
a.as_n = _mm_add_epi32(_mm256_castsi256_si128(halves),
@@ -144,7 +145,7 @@ inline __m128i Reduce32(__m512i sum1,
_mm512_unpacklo_epi64(pack12, pack34));
// Cut the register into halves and sum those. 1 2 3 4 1 2 3 4
__m256i halves = _mm256_add_epi32(_mm512_castsi512_si256(pack1234),
- _mm512_extracti64x4_epi64(pack1234, 1));
+ _mm512_extracti64x4_epi64(pack1234, (short)1));
// Again: cut the register into halves and sum those. 1 2 3 4
return _mm_add_epi32(_mm256_castsi256_si128(halves),
_mm256_extracti128_si256(halves, 1));
@@ -175,14 +176,14 @@ inline int32_t Reduce32(__m256i halves) {
inline int32_t Reduce32(__m512i sum1) {
// Fold register over itself.
return Reduce32(_mm256_add_epi32(_mm512_castsi512_si256(sum1),
- _mm512_extracti64x4_epi64(sum1, 1)));
+ _mm512_extracti64x4_epi64(sum1, (short)1)));
}
inline int32_t Reduce16to32(__m512i sum1) {
Convert32Sum(sum1);
// Fold register over itself.
return Reduce32(_mm256_add_epi32(_mm512_castsi512_si256(sum1),
- _mm512_extracti64x4_epi64(sum1, 1)));
+ _mm512_extracti64x4_epi64(sum1, (short)1)));
}
class ScatterPut {
@@ -204,7 +205,7 @@ public:
float_sums = _mm_mul_ps(float_sums, unquant_mult_sse_);
#ifdef __AVX512VL__
// The scatter instruction requires avx512vl
- _mm_i32scatter_ps(base, num_b_rows_scatter_, float_sums, 1);
+ _mm_i32scatter_ps(base, num_b_rows_scatter_, float_sums, (short)1);
#else
FloatAccess a;
// Get floats for each of the sums to write.
@@ -398,6 +399,7 @@ inline void Accum(const __m512i zeros,
// Choosing to approximate and do adds.
// Perhaps every so often we could accumulate by Convert32Sum
sum = _mm512_adds_epi16(sum, multiplied);
+ b; // make compiler happy
}
} // namespace
diff --git a/src/tensors/cpu/sharp/int_gemm.cpp b/src/tensors/cpu/sharp/int_gemm.cpp
index f85ae9a9..e04446bc 100644
--- a/src/tensors/cpu/sharp/int_gemm.cpp
+++ b/src/tensors/cpu/sharp/int_gemm.cpp
@@ -73,7 +73,7 @@ void Quantize8(marian::Tensor out,
const marian::Tensor in,
float clipValue) {
#ifdef __AVX512F__
- float quant_mult = 127.0 / clipValue;
+ float quant_mult = 127.0f / clipValue;
AVX_Quantize8(
in->data(), out->data<int8_t>(), quant_mult, in->shape().elements());
#else
@@ -165,8 +165,8 @@ void ProdInt8(marian::Tensor C,
#ifdef __AVX512F__
// This would be easy...
ABORT_IF(scale != 1, "Scale other than 1 not supported");
- float quant_mult = 127.0 / clipValue;
- float unquant_mult = 1.0 / (quant_mult * quant_mult);
+ float quant_mult = 127.0f / clipValue;
+ float unquant_mult = 1.0f / (quant_mult * quant_mult);
float* fC = C->data();
int num_A_rows = A->shape().elements() / A->shape()[-1];
diff --git a/src/tensors/gpu/cudnn_wrappers.cu b/src/tensors/gpu/cudnn_wrappers.cu
index affc6662..669513b9 100644
--- a/src/tensors/gpu/cudnn_wrappers.cu
+++ b/src/tensors/gpu/cudnn_wrappers.cu
@@ -327,11 +327,7 @@ CUDNNWrapper::CUDNNWrapper() {
"-DUSE_CUDNN=on)");
}
-CUDNNWrapper::~CUDNNWrapper() {
- ABORT(
- "To use convolution and pooling, recompile with CUDNN (cmake flag "
- "-DUSE_CUDNN=on)");
-}
+CUDNNWrapper::~CUDNNWrapper() {}
ConvolutionWrapper::ConvolutionWrapper(const Shape&,
const Shape&,
@@ -367,11 +363,7 @@ void ConvolutionWrapper::backward(Tensor,
"-DUSE_CUDNN=on)");
}
-ConvolutionWrapper::~ConvolutionWrapper() {
- ABORT(
- "To use convolution and pooling, recompile with CUDNN (cmake flag "
- "-DUSE_CUDNN=on)");
-}
+ConvolutionWrapper::~ConvolutionWrapper() {}
PoolingWrapper::PoolingWrapper(int, int, int, int, int, int, std::string) {
ABORT(
@@ -397,11 +389,7 @@ void PoolingWrapper::backward(Tensor, Tensor, Tensor, Tensor) {
"-DUSE_CUDNN=on)");
}
-PoolingWrapper::~PoolingWrapper() {
- ABORT(
- "To use convolution and pooling, recompile with CUDNN (cmake flag "
- "-DUSE_CUDNN=on)");
-}
+PoolingWrapper::~PoolingWrapper() {}
#endif
} // namespace marian
diff --git a/src/tensors/rand.cpp b/src/tensors/rand.cpp
index e6225c2e..3c7a519b 100755
--- a/src/tensors/rand.cpp
+++ b/src/tensors/rand.cpp
@@ -71,7 +71,7 @@ void StdlibRandomGenerator::normal(Tensor tensor, float mean, float stddev) {
CurandRandomGenerator::CurandRandomGenerator(size_t seed, DeviceId deviceId)
: RandomGenerator(seed), deviceId_(deviceId) {
if(deviceId_.type == DeviceType::gpu) {
- cudaSetDevice(deviceId_.no);
+ cudaSetDevice((int)deviceId_.no);
CURAND_CHECK(curandCreateGenerator(&generator_, CURAND_RNG_PSEUDO_DEFAULT));
}
else {
@@ -82,7 +82,7 @@ CurandRandomGenerator::CurandRandomGenerator(size_t seed, DeviceId deviceId)
CurandRandomGenerator::~CurandRandomGenerator() {
if(deviceId_.type == DeviceType::gpu)
- cudaSetDevice(deviceId_.no);
+ cudaSetDevice((int)deviceId_.no);
CURAND_CHECK(curandDestroyGenerator(generator_));
}
diff --git a/src/tensors/tensor.h b/src/tensors/tensor.h
index 9721670b..acc7e54c 100755
--- a/src/tensors/tensor.h
+++ b/src/tensors/tensor.h
@@ -87,7 +87,7 @@ public:
request<T>(),
type_);
- T temp;
+ T temp = 0;
if(backend_->getDeviceId().type == DeviceType::cpu) {
std::copy(data<T>() + i, data<T>() + i + 1, &temp);
}
diff --git a/src/training/graph_group_multinode.cpp b/src/training/graph_group_multinode.cpp
index 1164a843..f5cbafd3 100755
--- a/src/training/graph_group_multinode.cpp
+++ b/src/training/graph_group_multinode.cpp
@@ -240,7 +240,7 @@ void MultiNodeGraphGroup::launchServerThread() {
#if CUDA_FOUND
serverShardThread_ = new std::thread([this] {
// keep track of number of nodes still communicating with this shard
- int nCommunicatingNodes = mpi_->numMPIProcesses();
+ int nCommunicatingNodes = (int)mpi_->numMPIProcesses();
MPI_Status status;
do {
// Receive grads from any client
@@ -401,7 +401,7 @@ void MultiNodeGraphGroup::synchronizeWithServerShards(Tensor newGrads,
using namespace functional;
Element(_1 += _2, accGradients[node], accGradientBuffer[node]);
// Accumulate total batch word
- totalBatchWords[node] += batchWords;
+ totalBatchWords[node] += (int)batchWords;
delay_count[node]++;
if(delay_count[node] < tau_)
@@ -461,8 +461,8 @@ void MultiNodeGraphGroup::synchronizeWithServerShards(Tensor newGrads,
size_t localOffset = offset;
std::vector<std::thread> threads;
- for(int gpu = 0; gpu < devices_.size(); gpu++) {
- size_t gpuSize = shardSizes_[gpu];
+ for(int gpui = 0; gpui < devices_.size(); gpui++) {
+ size_t gpuSize = shardSizes_[gpui];
threads.emplace_back(std::thread(
[=](int gpu, size_t offset, size_t size) {
@@ -477,7 +477,7 @@ void MultiNodeGraphGroup::synchronizeWithServerShards(Tensor newGrads,
// Copy params back to current GPU
oldParams->subtensor(offset, size)->copyFrom(shardParams_[gpu]);
},
- gpu,
+ gpui,
localOffset,
gpuSize));
diff --git a/vs/BuildRelease.bat b/vs/BuildRelease.bat
index 8c3185e3..31215a15 100644
--- a/vs/BuildRelease.bat
+++ b/vs/BuildRelease.bat
@@ -17,6 +17,6 @@ if "%BUILD_ROOT%"=="" set BUILD_ROOT=%ROOT%build
call CreateVSProjects.bat %BUILD_ROOT%
if errorlevel 1 exit /b 1
-cmake --build %BUILD_ROOT% --config Release
+cmake --build %BUILD_ROOT% --config Release
exit /b 0 \ No newline at end of file
diff --git a/vs/CheckDeps.bat b/vs/CheckDeps.bat
index 7a3d2c8d..e36a5eff 100644
--- a/vs/CheckDeps.bat
+++ b/vs/CheckDeps.bat
@@ -2,8 +2,8 @@
:: Usage: CheckDeps.bat
::
:: This script is used to verify that all the dependencies required to build Marian are available.
-:: The Cuda SDK, the CuDNN library and the Intel MKL must be installed beforehand by the user.
-:: The Boost, zlib and OpenSSH libraries, if not found, will be installed by this script using vcpkg
+:: The Cuda SDK and the Intel MKL must be installed beforehand by the user.
+:: The Boost and OpenSSH libraries, if not found, will be installed by this script using vcpkg
::
::
@echo off
@@ -27,7 +27,6 @@ set ROOT=%~dp0
::----------------------------------------------------------------------------------------------
::set BOOST_INCLUDEDIR=
::set BOOST_LIBRARYDIR=
-::set ZLIB_ROOT=
::set OPENSSL_ROOT_DIR=
@@ -44,7 +43,6 @@ set ROOT=%~dp0
if "%BOOST_INCLUDEDIR%" == "" goto :needVcPkg
-if "%ZLIB_ROOT%" == "" goto :needVcPkg
if "%OPENSSL_ROOT_DIR%" == "" goto :needVcPkg
goto :checkDeps
@@ -111,43 +109,12 @@ set CMAKE_OPT=
echo.
echo ... CUDA
if "%CUDA_PATH%"=="" (
- echo The CUDA_PATH environment variable is not defined: please make sure CUDA 8.0+ is installed.
- exit /b 1
-)
-if not exist "%CUDA_PATH%" (
- echo CUDA_PATH is set to a non existing path:
- echo %CUDA_PATH%
- echo Please make sure CUDA 8.0+ is properly installed.
- exit /b 1
-)
-if not exist "%CUDA_PATH%\include\cuda.h" (
- echo CUDA header files were not found in this folder:
- echo "%CUDA_PATH%"
- echo Please make sure CUDA 8.0+ is properly installed.
- exit /b 1
+ echo The CUDA_PATH environment variable is not defined: this will compile only the CPU version.
)
-if not exist "%CUDA_PATH%\lib\x64\cuda.lib" (
- echo CUDA library files were not found in this folder:
- echo "%CUDA_PATH%"
- echo Please make sure CUDA 8.0+ is properly installed.
- exit /b 1
-)
-
-echo Found Cuda SDK in %CUDA_PATH%
-
-
-:: -------------------------
-:: CuDNN is installed manually into CUDA directories.
-echo.
-echo ... CUDNN
-if not exist "%CUDA_PATH%\lib\x64\cudnn.lib" (
- echo The CuDNN library was not found. Please make sure it is installed correctly in your CUDA setup.
- exit /b 1
+else (
+ echo Found Cuda SDK in %CUDA_PATH%
)
-echo Found CuDNN library in %CUDA_PATH%\lib\x64
-
-
:: -------------------------
:: The MKL setup does not set any environment variable to the installation path.
:: The script look into the standard default installation dir
@@ -179,7 +146,6 @@ if not exist "%MKLROOT%\lib\intel64\mkl_core.lib" (
echo Found Intel MKL library in %MKLROOT%
-
:: -------------------------
:: BOOST_INCLUDEDIR and BOOST_LIBRARYDIR can be both set to an existing Boost installation.
:: If not, we use vcpkg to install the required Boost packages
@@ -220,41 +186,6 @@ if not exist "%BOOST_LIBRARYDIR%\boost_*.lib" (
echo Found Boost headers in "%BOOST_INCLUDEDIR%" and libs in "%BOOST_LIBRARYDIR%"
-
-:: -------------------------
-:: ZLIB_ROOT can be set to an existing zlib installation.
-:: If not, we use vcpkg to install the library
-::
-echo.
-echo ... zlib
-if "%ZLIB_ROOT%"=="" (
- %VCPKG% install zlib
- set ZLIB_ROOT=%VCPKG_INSTALL%
-)
-
-if not exist "%ZLIB_ROOT%" (
- echo ZLIB_ROOT is set to a non existing path:
- echo "%ZLIB_ROOT%"
- echo Please set ZLIB_ROOT to the installation path of the zlib library.
- exit /b 1
-)
-if not exist "%ZLIB_ROOT%\include\zlib.h" (
- echo zlib header files were not found in this folder:
- echo "%ZLIB_ROOT%"
- echo Please make sure zlib is correctly installed.
- exit /b 1
-)
-if not exist "%ZLIB_ROOT%\lib\zlib.lib" (
- echo zlib library file were not found in this folder:
- echo "%ZLIB_ROOT%"
- echo Please make sure zlib is correctly installed.
- exit /b 1
-)
-
-echo Found zlib library in "%ZLIB_ROOT%"
-
-
-
:: -------------------------
:: OPENSSL_ROOT_DIR can be set to an existing OpenSSL installation.
:: If not, we use vcpkg to install the library
@@ -266,27 +197,20 @@ if "%OPENSSL_ROOT_DIR%"=="" (
set OPENSSL_ROOT_DIR=%VCPKG_INSTALL%
)
-if not exist "%OPENSSL_ROOT_DIR%" (
- echo OPENSSL_ROOT_DIR is set to a non existing path:
- echo "%OPENSSL_ROOT_DIR%"
- echo Please set OPENSSL_ROOT_DIR to the installation path of the OpenSLL library.
- exit /b 1
-)
-if not exist "%OPENSSL_ROOT_DIR%\include\openssl\opensslv.h" (
- echo OpenSSL header files were not found in this folder:
- echo "%OPENSSL_ROOT_DIR%"
- echo Please make sure OpenSSL is correctly installed.
- exit /b 1
-)
-if not exist "%OPENSSL_ROOT_DIR%\lib\ssleay32.lib" (
- echo OpenSSL library file were not found in this folder:
- echo "%OPENSSL_ROOT_DIR%"
- echo Please make sure OpenSSL is correctly installed.
- exit /b 1
-)
+if not exist "%VCPKG_INSTALL%/bin/protoc.exe" (
+mkdir build
+cd build
+git clone https://github.com/protocolbuffers/protobuf
+cd protobuf
+git checkout v3.6.1
+cd cmake
+cmake . -A x64 -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=%VCPKG_INSTALL%
+cmake --build . --config Release --target install
+cd ..\..\..
-echo Found OpenSSL library in "%OPENSSL_ROOT_DIR%"
+)
+set CMAKE_PREFIX_PATH=%VCPKG_INSTALL%
echo.
echo.
@@ -296,8 +220,8 @@ echo MKLROOT ^| %MKLROOT%
echo VCPKG_ROOT ^| %VCPKG_ROOT%
echo BOOST_INCLUDEDIR ^| %BOOST_INCLUDEDIR%
echo BOOST_LIBRARYDIR ^| %BOOST_LIBRARYDIR%
-echo ZLIB_ROOT ^| %ZLIB_ROOT%
echo OPENSSL_ROOT_DIR ^| %OPENSSL_ROOT_DIR%
+echo CMAKE_PREFIX_PATH ^| %CMAKE_PREFIX_PATH%
echo --------------------------------------------------
echo.
echo.
diff --git a/vs/CreateVSProjects.bat b/vs/CreateVSProjects.bat
index ffc4aee8..fa67a451 100644
--- a/vs/CreateVSProjects.bat
+++ b/vs/CreateVSProjects.bat
@@ -45,15 +45,20 @@ set CMAKE_OPT=%CMAKE_OPT% -G %GENERATOR_TARGET%
set CMAKE_OPT=%CMAKE_OPT% -D CMAKE_POLICY_DEFAULT_CMP0074=NEW
:: ----- Disable some tool build -----
-set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_SERVER:BOOL=TRUE
set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_EXAMPLES:BOOL=FALSE
set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_TESTS:BOOL=FALSE
+set CMAKE_OPT=%CMAKE_OPT% -D USE_MPI:BOOL=FALSE
+set CMAKE_OPT=%CMAKE_OPT% -D USE_CUDNN:BOOL=FALSE
+:: ----- Enable certain options -----
+set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_SERVER:BOOL=TRUE
set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_CPU:BOOL=TRUE
-set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_CUDA:BOOL=TRUE
+set CMAKE_OPT=%CMAKE_OPT% -D COMPILE_CUDA:BOOL=TRUE
+set CMAKE_OPT=%CMAKE_OPT% -D USE_SENTENCEPIECE:BOOL=ON
+
+:: ----- Not supported on Windows yet -----
+set CMAKE_OPT=%CMAKE_OPT% -D USE_NCCL:BOOL=FALSE
-set CMAKE_OPT=%CMAKE_OPT% -D USE_CUDNN:BOOL=TRUE
-set CMAKE_OPT=%CMAKE_OPT% -D USE_MPI:BOOL=FALSE
echo.
echo.
diff --git a/vs/Marian.sln b/vs/Marian.sln
index 9cbbcefb..c2eb49c9 100755
--- a/vs/Marian.sln
+++ b/vs/Marian.sln
@@ -1,25 +1,377 @@
-
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.27703.2047
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Marian", "Marian.vcxproj", "{E2F320FE-0C01-4C80-810C-3A92205A29DC}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{5216F769-E887-369E-AD1E-D6A1F69E834E}"
+ ProjectSection(ProjectDependencies) = postProject
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33} = {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA} = {5AF43E07-5917-3D8F-9BF0-B41F698242EA}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033} = {3CD61EAE-244E-33AB-8C7D-F5182481E033}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151} = {25A05D30-AFC2-3F0E-B475-0B2B81530151}
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7} = {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34} = {3784D69C-33A9-33A7-A557-F809EF2F4D34}
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC} = {EA3973A2-F92E-3124-9817-81B2458EC8DC}
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D} = {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162} = {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ {5857EF98-C87F-3197-A399-F0F9A20913FC} = {5857EF98-C87F-3197-A399-F0F9A20913FC}
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F} = {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}
+ {FBB107B9-523B-3094-95CF-A103E2388006} = {FBB107B9-523B-3094-95CF-A103E2388006}
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC} = {5B4A6D26-C638-3350-9E1A-0F987C448DEC}
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F} = {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3} = {1134F859-3DE4-34B1-924F-82CA38D4D4F3}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INSTALL", "INSTALL.vcxproj", "{9DAF8CA3-052E-3480-A332-34676CAE852B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {5216F769-E887-369E-AD1E-D6A1F69E834E} = {5216F769-E887-369E-AD1E-D6A1F69E834E}
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PACKAGE", "PACKAGE.vcxproj", "{3A3C6EA5-65CD-324E-90F4-6B4D70DD5A37}"
+ ProjectSection(ProjectDependencies) = postProject
+ {5216F769-E887-369E-AD1E-D6A1F69E834E} = {5216F769-E887-369E-AD1E-D6A1F69E834E}
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SQLiteCpp", "src\3rd_party\SQLiteCpp\SQLiteCpp.vcxproj", "{17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{806A44E1-15D4-3368-B0B9-2A6CC352D505}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libyaml-cpp", "src\3rd_party\yaml-cpp\libyaml-cpp.vcxproj", "{5AF43E07-5917-3D8F-9BF0-B41F698242EA}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian", "src\marian.vcxproj", "{885D3D2B-7278-30EF-BB1B-50E83D1635C4}"
+ ProjectSection(ProjectDependencies) = postProject
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33} = {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA} = {5AF43E07-5917-3D8F-9BF0-B41F698242EA}
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C} = {55A27783-64A4-3AA7-A4B1-49C4B628F18C}
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162} = {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3} = {1134F859-3DE4-34B1-924F-82CA38D4D4F3}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_conv", "src\marian_conv.vcxproj", "{3CD61EAE-244E-33AB-8C7D-F5182481E033}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_cuda", "src\marian_cuda.vcxproj", "{97131187-E592-3981-886F-222EE20FB669}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_decoder", "src\marian_decoder.vcxproj", "{25A05D30-AFC2-3F0E-B475-0B2B81530151}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_scorer", "src\marian_scorer.vcxproj", "{8A6B1F60-8E2D-3171-828B-07E732C8E7D7}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_server", "src\marian_server.vcxproj", "{3784D69C-33A9-33A7-A557-F809EF2F4D34}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_train", "src\marian_train.vcxproj", "{EA3973A2-F92E-3124-9817-81B2458EC8DC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_version", "src\marian_version.vcxproj", "{55A27783-64A4-3AA7-A4B1-49C4B628F18C}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "marian_vocab", "src\marian_vocab.vcxproj", "{36953645-6D01-37E4-ACF7-D3F9BFFCA49D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4} = {885D3D2B-7278-30EF-BB1B-50E83D1635C4}
+ {97131187-E592-3981-886F-222EE20FB669} = {97131187-E592-3981-886F-222EE20FB669}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pathie-cpp", "src\3rd_party\pathie-cpp\pathie-cpp.vcxproj", "{F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sentencepiece-static", "src\3rd_party\sentencepiece\src\sentencepiece-static.vcxproj", "{D9D20410-4011-370C-8E15-A6F5C311F337}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sentencepiece_train-static", "src\3rd_party\sentencepiece\src\sentencepiece_train-static.vcxproj", "{4A20AD5F-7334-31D3-B31D-9AAF53CC6678}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spm_decode", "src\3rd_party\sentencepiece\src\spm_decode.vcxproj", "{5857EF98-C87F-3197-A399-F0F9A20913FC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spm_encode", "src\3rd_party\sentencepiece\src\spm_encode.vcxproj", "{F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spm_export_vocab", "src\3rd_party\sentencepiece\src\spm_export_vocab.vcxproj", "{FBB107B9-523B-3094-95CF-A103E2388006}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spm_normalize", "src\3rd_party\sentencepiece\src\spm_normalize.vcxproj", "{5B4A6D26-C638-3350-9E1A-0F987C448DEC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spm_train", "src\3rd_party\sentencepiece\src\spm_train.vcxproj", "{11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ {D9D20410-4011-370C-8E15-A6F5C311F337} = {D9D20410-4011-370C-8E15-A6F5C311F337}
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678} = {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib", "src\3rd_party\zlib\zlib.vcxproj", "{1134F859-3DE4-34B1-924F-82CA38D4D4F3}"
+ ProjectSection(ProjectDependencies) = postProject
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505} = {806A44E1-15D4-3368-B0B9-2A6CC352D505}
+ EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Release|x64 = Release|x64
+ MinSizeRel|x64 = MinSizeRel|x64
+ RelWithDebInfo|x64 = RelWithDebInfo|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {E2F320FE-0C01-4C80-810C-3A92205A29DC}.Debug|x64.ActiveCfg = Debug|x64
- {E2F320FE-0C01-4C80-810C-3A92205A29DC}.Debug|x64.Build.0 = Debug|x64
- {E2F320FE-0C01-4C80-810C-3A92205A29DC}.Release|x64.ActiveCfg = Release|x64
- {E2F320FE-0C01-4C80-810C-3A92205A29DC}.Release|x64.Build.0 = Release|x64
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.Debug|x64.ActiveCfg = Debug|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.Debug|x64.Build.0 = Debug|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.Release|x64.ActiveCfg = Release|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.Release|x64.Build.0 = Release|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {5216F769-E887-369E-AD1E-D6A1F69E834E}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {9DAF8CA3-052E-3480-A332-34676CAE852B}.Debug|x64.ActiveCfg = Debug|x64
+ {9DAF8CA3-052E-3480-A332-34676CAE852B}.Release|x64.ActiveCfg = Release|x64
+ {9DAF8CA3-052E-3480-A332-34676CAE852B}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {9DAF8CA3-052E-3480-A332-34676CAE852B}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {3A3C6EA5-65CD-324E-90F4-6B4D70DD5A37}.Debug|x64.ActiveCfg = Debug|x64
+ {3A3C6EA5-65CD-324E-90F4-6B4D70DD5A37}.Release|x64.ActiveCfg = Release|x64
+ {3A3C6EA5-65CD-324E-90F4-6B4D70DD5A37}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {3A3C6EA5-65CD-324E-90F4-6B4D70DD5A37}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.Debug|x64.ActiveCfg = Debug|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.Debug|x64.Build.0 = Debug|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.Release|x64.ActiveCfg = Release|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.Release|x64.Build.0 = Release|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {17E8F84B-76CD-326B-B50A-C4F3C3A8CE33}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.Debug|x64.ActiveCfg = Debug|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.Debug|x64.Build.0 = Debug|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.Release|x64.ActiveCfg = Release|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.Release|x64.Build.0 = Release|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {806A44E1-15D4-3368-B0B9-2A6CC352D505}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.Debug|x64.ActiveCfg = Debug|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.Debug|x64.Build.0 = Debug|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.Release|x64.ActiveCfg = Release|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.Release|x64.Build.0 = Release|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {5AF43E07-5917-3D8F-9BF0-B41F698242EA}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.Debug|x64.ActiveCfg = Debug|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.Debug|x64.Build.0 = Debug|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.Release|x64.ActiveCfg = Release|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.Release|x64.Build.0 = Release|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {885D3D2B-7278-30EF-BB1B-50E83D1635C4}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.Debug|x64.ActiveCfg = Debug|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.Debug|x64.Build.0 = Debug|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.Release|x64.ActiveCfg = Release|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.Release|x64.Build.0 = Release|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {3CD61EAE-244E-33AB-8C7D-F5182481E033}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {97131187-E592-3981-886F-222EE20FB669}.Debug|x64.ActiveCfg = Debug|x64
+ {97131187-E592-3981-886F-222EE20FB669}.Debug|x64.Build.0 = Debug|x64
+ {97131187-E592-3981-886F-222EE20FB669}.Release|x64.ActiveCfg = Release|x64
+ {97131187-E592-3981-886F-222EE20FB669}.Release|x64.Build.0 = Release|x64
+ {97131187-E592-3981-886F-222EE20FB669}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {97131187-E592-3981-886F-222EE20FB669}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {97131187-E592-3981-886F-222EE20FB669}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {97131187-E592-3981-886F-222EE20FB669}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.Debug|x64.ActiveCfg = Debug|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.Debug|x64.Build.0 = Debug|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.Release|x64.ActiveCfg = Release|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.Release|x64.Build.0 = Release|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {25A05D30-AFC2-3F0E-B475-0B2B81530151}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.Debug|x64.ActiveCfg = Debug|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.Debug|x64.Build.0 = Debug|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.Release|x64.ActiveCfg = Release|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.Release|x64.Build.0 = Release|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {8A6B1F60-8E2D-3171-828B-07E732C8E7D7}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.Debug|x64.ActiveCfg = Debug|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.Debug|x64.Build.0 = Debug|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.Release|x64.ActiveCfg = Release|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.Release|x64.Build.0 = Release|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {3784D69C-33A9-33A7-A557-F809EF2F4D34}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.Debug|x64.ActiveCfg = Debug|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.Debug|x64.Build.0 = Debug|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.Release|x64.ActiveCfg = Release|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.Release|x64.Build.0 = Release|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {EA3973A2-F92E-3124-9817-81B2458EC8DC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.Debug|x64.ActiveCfg = Debug|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.Debug|x64.Build.0 = Debug|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.Release|x64.ActiveCfg = Release|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.Release|x64.Build.0 = Release|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {55A27783-64A4-3AA7-A4B1-49C4B628F18C}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.Debug|x64.ActiveCfg = Debug|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.Debug|x64.Build.0 = Debug|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.Release|x64.ActiveCfg = Release|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.Release|x64.Build.0 = Release|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {36953645-6D01-37E4-ACF7-D3F9BFFCA49D}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.Debug|x64.ActiveCfg = Debug|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.Debug|x64.Build.0 = Debug|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.Release|x64.ActiveCfg = Release|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.Release|x64.Build.0 = Release|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {F4AD2C38-E6B9-3C4A-A281-4AB7440D6162}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.Debug|x64.ActiveCfg = Debug|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.Debug|x64.Build.0 = Debug|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.Release|x64.ActiveCfg = Release|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.Release|x64.Build.0 = Release|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {D9D20410-4011-370C-8E15-A6F5C311F337}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.Debug|x64.ActiveCfg = Debug|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.Debug|x64.Build.0 = Debug|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.Release|x64.ActiveCfg = Release|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.Release|x64.Build.0 = Release|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {4A20AD5F-7334-31D3-B31D-9AAF53CC6678}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.Debug|x64.ActiveCfg = Debug|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.Debug|x64.Build.0 = Debug|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.Release|x64.ActiveCfg = Release|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.Release|x64.Build.0 = Release|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {5857EF98-C87F-3197-A399-F0F9A20913FC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.Debug|x64.ActiveCfg = Debug|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.Debug|x64.Build.0 = Debug|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.Release|x64.ActiveCfg = Release|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.Release|x64.Build.0 = Release|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {F6E7B14E-D9E6-343C-B58D-CA0381A3BB8F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.Debug|x64.ActiveCfg = Debug|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.Debug|x64.Build.0 = Debug|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.Release|x64.ActiveCfg = Release|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.Release|x64.Build.0 = Release|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {FBB107B9-523B-3094-95CF-A103E2388006}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.Debug|x64.ActiveCfg = Debug|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.Debug|x64.Build.0 = Debug|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.Release|x64.ActiveCfg = Release|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.Release|x64.Build.0 = Release|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {5B4A6D26-C638-3350-9E1A-0F987C448DEC}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.Debug|x64.ActiveCfg = Debug|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.Debug|x64.Build.0 = Debug|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.Release|x64.ActiveCfg = Release|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.Release|x64.Build.0 = Release|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {11AB9AE9-CF65-341B-B425-9EDFC4E2F22F}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.Debug|x64.ActiveCfg = Debug|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.Debug|x64.Build.0 = Debug|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.Release|x64.ActiveCfg = Release|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.Release|x64.Build.0 = Release|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
+ {1134F859-3DE4-34B1-924F-82CA38D4D4F3}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {8CA1BE8F-87A9-4094-B549-E8C790F79D8C}
+ SolutionGuid = {A73289FB-DB51-3D6F-802E-B474CC102EDA}
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
diff --git a/vs/README.md b/vs/README.md
index 7f363152..75fd0425 100644
--- a/vs/README.md
+++ b/vs/README.md
@@ -3,21 +3,21 @@
## Install prerequisites
-The following SDK are required to build Marian with GPU support
+The following SDK are required to build Marian with GPU support. At least one of them needs to be installed. If only CUDA is installed but not MKL,
+a GPU-only version will be build. If only MKL is installed and not CUDA, only the CPU version will be built. So if you are interested in only one
+functionality, you can ommit one of them. Install both for full functionality.
- - [Cuda 9.2+](https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal)
+ - [Cuda 10](https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal)
- Base installer
- - Patches
-
- - [CuDNN 7.1+](https://developer.nvidia.com/rdp/cudnn-download)
- - Requires nVidia Developper account
- [MKL](https://software.intel.com/en-us/mkl)
-__Note: Patch for CUDA error: Unsupported Visual Studio Version Error__
+__Note: Patch for CUDA 9.2 error: Unsupported Visual Studio Version Error__
+
+This seems to work fine with CUDA 10.0.
-The latest versions of Visual Studio 2017 are not officially supported by CUDA. Two fixes are proposed:
+When using CUDA 9.2, the latest versions of Visual Studio 2017 are not officially supported by CUDA. Two fixes are proposed:
- Downgrade Visual Studio to a supported version
@@ -31,15 +31,13 @@ The latest versions of Visual Studio 2017 are not officially supported by CUDA.
For more information, read this [nVidia forum](https://devtalk.nvidia.com/default/topic/1022648/cuda-setup-and-installation/cuda-9-unsupported-visual-studio-version-error/4)
-
---
## Check dependencies : `CheckDeps.bat`
-In addition to the 3 previous prerequisites, Marian needs 3 libraries that you may already have on your system:
+In addition to the 2 previous prerequisites, Marian needs 2 libraries that you may already have on your system:
- Boost (1.58+)
- - zlib
- - OpenSSL
+ - OpenSSL (optional for server)
The script `CheckDeps.bat` can be used to verify that all dependencies are found on your system. If not, it will use the `vcpkg` library manager to download and manage your dependencies for CMake.
@@ -50,7 +48,6 @@ If you already have a working `vcpkg` installation, this script can use it:
If you prefer to manage yourself the dependencies, you can edit the script file to set the following variables to the respective installation paths. These variable can also be already set in your environment.
- `BOOST_INCLUDE_PATH` and `BOOST_LIB_PATH`
-- `ZLIB_ROOT`
- `OPENSSL_PATH`
---
@@ -136,13 +133,16 @@ If you have a previous version of Visual Studio, you will need to use CMake to g
The provided script `CreateVSProjects.bat` runs the dependency checks then invokes CMake with the right parameters to create the solutions for Visual Studio.
-### 3. Use MSBuild : `Build.bat`
+### 3. Use MSBuild : `BuildRelease.bat`
-The last alternative is to use the script `Build.bat` that will:
+The last alternative is to use the script `BuildRelease.bat` that will:
- Check the dependencies
- Create the VS project files
- Invoke MSBuild on these projects to build the targets in Release.
+<!--
+This is interesting for developers, hiding away from users.
+
---
## Changes from the master branch
This part gives more information on all changes done in this PR. Refer to [this page](https://github.com/cedrou/marian-dev/commits/build_on_win) for commits.
@@ -195,6 +195,6 @@ This part gives more information on all changes done in this PR. Refer to [this
I also handled the case of the default value for the `base` parameter: the path `\tmp` doesnot exist on Windows, so it is replaced by the value of the `%TMP%` environment variable in `NormalizeTempPrefix`.
11. __Revert commit #2f8b093 + Fix copy/paste error while fixing #301 + restrict fix to MSVC compiler.__
- cf [Issue #301](https://github.com/marian-nmt/marian-dev/issues/301)
+ cf [Issue #301](https://github.com/marian-nmt/marian-dev/issues/301) -->
\ No newline at end of file
diff --git a/vs/paths_for_windows b/vs/paths_for_windows
deleted file mode 100644
index 64360e11..00000000
--- a/vs/paths_for_windows
+++ /dev/null
@@ -1,4 +0,0 @@
-setx ZLIB_PATH d:\marian-windows\zlib-vs15
-setx BOOST_INCLUDE_PATH d:\marian-windows\boost_1_66_0
-setx BOOST_LIB_PATH d:\marian-windows\boost_1_66_0\lib64-msvc-14.1
-setx MKL_PATH D:\marian-windows\mkl\compilers_and_libraries\windows\mkl