diff --git a/CMakeLists.txt b/CMakeLists.txt index b81b1910c015..505d3c260130 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,8 +37,15 @@ else(MSVC) include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-std=c++11" SUPPORT_CXX11) check_cxx_compiler_flag("-msse2" SUPPORT_MSSE2) - set(CMAKE_C_FLAGS "-O3 -Wall -msse2 -Wno-unknown-pragmas -fPIC") - set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}") + set(CMAKE_C_FLAGS "-Wall -msse2 -Wno-unknown-pragmas -fPIC") + if(NDEBUG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") + else(NDEBUG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -ggdb3") + endif(NDEBUG) + if(SUPPORT_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif() endif(MSVC) if(USE_OPENCV) @@ -72,7 +79,7 @@ if(USE_CUDNN) add_definitions(-DUSE_CUDNN) include_directories(SYSTEM ${CUDNN_INCLUDE}) list(APPEND mxnet_LINKER_LIBS ${CUDNN_LIBRARY}) - add_definitions(-DMSHADOW_USE_CUDNN=1) + add_definitions(-DMSHADOW_USE_CUDNN=1) endif() endif() @@ -135,6 +142,37 @@ if(USE_PLUGINS_WARPCTC) list(APPEND CUDA ${PLUGINS_CUSRC}) endif() +if(USE_PLUGIN_CAFFE) + if(NOT DEFINED CAFFE_PATH) + if(EXISTS ${PROJECT_SOURCE_DIR}/caffe) + # Need newer FindCUDA.cmake that correctly handles -std=c++11 + cmake_minimum_required(VERSION 3.3) + set(CAFFE_PATH ${PROJECT_SOURCE_DIR}/caffe) + endif() + endif() + list(APPEND CMAKE_MODULE_PATH ${CAFFE_PATH}/cmake) + include_directories(${CAFFE_PATH}/include) + include_directories(${CAFFE_PATH}/build/src) + include_directories(${CMAKE_BINARY_DIR}/caffe/include) + link_directories(${CAFFE_PATH}/build/lib) + if(NOT DEFINED CAFFE_PATH) + message(FATAL_ERROR "Please set CAFFE_PATH to point to the caffe source installation") + endif() + mxnet_source_group("Include\\plugin\\caffe" GLOB "plugin/caffe/*.h") + mxnet_source_group("Source\\plugin\\caffe" GLOB "plugin/caffe/*.cc") + mxnet_source_group("Cuda\\plugin\\caffe" GLOB "plugin/caffe/*.cu") + FILE(GLOB_RECURSE PLUGINS_SOURCE "plugin/caffe/*.cc" "plugin/caffe/*.h") + FILE(GLOB_RECURSE PLUGINS_CUSRC "plugin/caffe/*.cu") + list(APPEND SOURCE ${PLUGINS_SOURCE}) + list(APPEND CUDA ${PLUGINS_CUSRC}) + include_directories(${CMAKE_BINARY_DIR}/include) + list(APPEND mxnet_LINKER_LIBS + protobuf boost_system boost_thread boost_filesystem + gflags glog caffe + ${Caffe_LINKER_LIBS} +) +endif() + if (NOT (EXTRA_OPERATORS STREQUAL "")) mxnet_source_group("Extra" GLOB_RECURSE "${EXTRA_OPERATORS}/*.cc") mxnet_source_group("Extra\\Cuda" GLOB_RECURSE "${EXTRA_OPERATORS}/*.cu") @@ -163,15 +201,23 @@ if(USE_CUDA) list(APPEND mxnet_LINKER_LIBS ${CUDA_cuda_LIBRARY}) else(MSVC) list(APPEND mxnet_LINKER_LIBS nvrtc cuda) + link_directories("${CUDA_TOOLKIT_ROOT_DIR}/lib64") endif() list(APPEND SOURCE ${cuda_objs} ${CUDA}) endif() +# unsupported: if caffe is a subdirectory of mxnet, load its CMakeLists.txt as well +if(USE_PLUGIN_CAFFE) + if(EXISTS ${PROJECT_SOURCE_DIR}/caffe) + add_subdirectory(caffe) + endif() +endif() + if(NOT MSVC) # Only add c++11 flags and definitions after cuda compiling add_definitions(-DDMLC_USE_CXX11) add_definitions(-DMSHADOW_IN_CXX11) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c++0x") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") diff --git a/plugin/caffe/caffe_data_iter.cc b/plugin/caffe/caffe_data_iter.cc index c94c315ee0da..d2f20fa0f2c7 100644 --- a/plugin/caffe/caffe_data_iter.cc +++ b/plugin/caffe/caffe_data_iter.cc @@ -48,7 +48,7 @@ struct CaffeDataParam : public dmlc::Parameter { template class CaffeDataIter : public IIterator { public: - explicit CaffeDataIter(int type_flag) : batch_size_(0), channels_(0), width_(1), height_(1) + explicit CaffeDataIter(int type_flag) : batch_size_(0), channels_(1), width_(1), height_(1) , type_flag_(type_flag), loc_(0) {} virtual ~CaffeDataIter(void) {} @@ -100,7 +100,8 @@ class CaffeDataIter : public IIterator { if (top_size > DATA) { if (param_.flat) { - batch_data_ = TBlob(nullptr, mshadow::Shape2(batch_size_, width_ * height_), + batch_data_ = TBlob(nullptr, mshadow::Shape2(batch_size_, + channels_ * width_ * height_), cpu::kDevCPU, type_flag_); } else { batch_data_ = TBlob(nullptr, mxnet::TShape(top_[DATA]->shape().begin(),