मैं एक परियोजना पर कुछ परीक्षण कर रहा हूं जिसे मैंने हाल ही में सीएमके के साथ बनाना शुरू कर दिया है। सीएमके में जाने से पहले मैंने अपने हस्तलिखित मेकफ़ाइल के साथ make
के लिए -j
विकल्प का उपयोग करते समय निर्माण समय में महत्वपूर्ण सुधार देखा।एक सीएमके उत्पन्न मेकफ़ाइल (कोई गति सुधार) का उपयोग कर समांतर नौकरियां
अब सीएमके के साथ मैं वही काम करता हूं और गति में कोई उल्लेखनीय वृद्धि नहीं होती है। चाहे मैं -j
के साथ दौड़ूं या नहीं, मुझे make.exe
के लिए चार प्रक्रियाएं मिलती हैं, हालांकि उनमें से केवल एक ही CPU समय घड़ी कर रही है और CPU का 25% अधिक उपयोग नहीं करती है।
आम तौर पर, सीएमके ने मेकफ़ाइल उत्पन्न किया है जो मेरे हस्तलिखित मेकफ़ाइल से बहुत धीमा है। एक त्वरित परीक्षण शो के साथ और -j
ध्वज के बिना दोनों CMake और हस्तलिखित makefiles के लिए बार का निर्माण:
CMake: "make -j all" = 7min
CMake: "make all" = 7min
Handwritten: "make -j all" = 2min
Handwritten: "make all" = 4min
सामान्य तौर पर, CMake बहुत धीमी है और समानांतर नौकरियों का उपयोग करने के प्रतीत नहीं होता।
क्या कोई समझा सकता है कि मुझे कोई सुधार क्यों नहीं दिख रहा है?
(गोरफ्रान के साथ एक फोरट्रान प्रोग्राम बनाना और सीएमके की ऑटो-डिटेक्ट निर्भरता सुविधा का उपयोग करना ... हालांकि मुझे नहीं पता कि यह जो मैं देख रहा हूं उससे प्रासंगिक है)।
यहाँ मेरी CMakeLists.txt फ़ाइल है:
## CMake Version
cmake_minimum_required(VERSION 2.8)
## Project Name
project(PROJECT)
## Use FORTRAN
enable_language(Fortran)
## Release compiler options
set (CMAKE_Fortran_FLAGS_RELEASE "-O3 -cpp -ffree-line-length-none -fimplicit-none")
## Debug compiler options
set (CMAKE_Fortran_FLAGS_DEBUG "-g -cpp -ffree-line-length-none -fimplicit-none")
## Set directory for FORTRAN modules
set (CMAKE_Fortran_MODULE_DIRECTORY "${PROJECT_BINARY_DIR}/modules")
## Build Executable
add_executable(EXE
Source1.f90
Source2.f90
.
.
.
Source219.f90
Source220.f90)
और यहाँ अपने मूल Makefile है:
PROG = PROGRAM.exe
SRCS = Source1.f90 Source2.f90 ... Source219.o Source220.o
OBJS = Source1.o Source2.o ... Source219.o Source220.o
LIBS =
VPATH = src
BUILDDIR = debug
F90 = gfortran
F90FLAGS = -g -cpp -ffree-line-length-none -fimplicit-none
all: $(PROG)
$(PROG): $(OBJS)
$(F90) -o [email protected] $(OBJS) $(LIBS)
clean:
erase -f $(BUILDDIR)$(PROG) $(BUILDDIR)\$(OBJS) $(BUILDDIR)\*.mod
.SUFFIXES: $(SUFFIXES) .f90
.f90.o:
$(F90) $(F90FLAGS) -c $<
Source1.o: Dependency1.o Dependency2.o ... DependencyN.o
Source2.o: Dependency1.o Dependency2.o ... DependencyN.o
.
.
.
Source219.o: Dependency1.o Dependency2.o ... DependencyN.o
Source220.o: Dependency1.o Dependency2.o ... DependencyN.o
आप अपने 'CMakeLists.txt' दिखा सकते हैं? – arrowd
बस मेरी CMakeLists.txt फ़ाइल –
और आपकी मूल मेकफ़ाइल भी पोस्ट की गई। – Offirmo