| Title: | C++ | 
| Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) | 
| Moderator: | DECCXX::AMARTIN | 
| Created: | Fri Nov 06 1987 | 
| Last Modified: | Thu Jun 05 1997 | 
| Last Successful Update: | Fri Jun 06 1997 | 
| Number of topics: | 3604 | 
| Total number of notes: | 18242 | 
CXX 5.5
OSF 3.2-d
    This is about a performance problem of CXX on the OSF database, some of
    you have already been made aware by mail: the customer is complaining
    about the time needed to build programs, specially while rebuilding.
    Knowing that this is an enormous development (the sample they send me is
    about 1GB !), you can image the importance this become.
    As recommended, now that I have some more precise information, I can open
    a case. 
    The customer do not complain so much about the time needed to compile its 
    environment, but the fact that when they REBUILD something, much more 
    more pieces that needed seems to be rebuilt ?! I'm still trying the obtain
    some information as I doesn't understand a lot of this, but the idea
    passed to them that instanciation being regenerated because of the use of
    other compilation options, lead them to look at the template's .cmd files.
    There, they found some difference between the option given to the
    compilation and the one found in the .cmd file. They wonder why and about
    the impact of this. For example:
	       cxx -O1 -noinline -pthreads
       becomes
               -O2 -inline none -thread_safe -ansi_alias -weak_volatile
    And they wonder why ? Any idea ?
    Lost in the mystery of C++,
    Mich�le.
       Example of command:
       -------------------
    -signed -member_alignment -g0 -O2 -inline none -cpp -nocurrent_include
    -show header -show source -readonly_strings -ansi_alias -weak_volatile
    -thread_safe -ptr./cxx_repository -ptsuf.cxx.CXX.C.cc.CC.cpp.c
    -D_REENTRANT -DALPHA -DOSF1 -DSTL_DEC -DCTIV_TRACE -D__ODMG_93__ -DO250
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest/ImpOutput
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest/tagged_files
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest
    -I/ctiv/integration/application/../tools/coverage/include
    -I/ctiv/integration/application/../tools/coverage/src
    -I/ctiv/integration/application/common/definitions/base_types/include
    -I/ctiv/integration/application/common/definitions/base_types/src
    -I/ctiv/integration/application/common/utilities/exceptions/include
    -I/ctiv/integration/application/common/utilities/exceptions/src
    -I/ctiv/integration/application/common/utilities/logging/include
    -I/ctiv/integration/application/common/utilities/logging/src
    -I/ctiv/integration/application/common/utilities/translation/include
    -I/ctiv/integration/application/common/utilities/translation/src
    -I/ctiv/integration/application/common/utilities/trace/include
    -I/ctiv/integration/application/common/utilities/trace/src
    -I/ctiv/integration/application/../tools/unit_test/include
    -I/ctiv/integration/application/../tools/unit_test/src
    -I/ctiv/dvlpt/application/common/utilities/base_objects/include
    -I/ctiv/dvlpt/application/common/utilities/base_objects/src
    -I/ctiv/integration/application/all_includes -I/o2/o250/include
    -I/usr/include/cxx -I/usr/include -I/usr/sys/include
    -I//usr/ilog/views22/include -I/cantata32/inc
    -Xsd/ctiv/dvlpt/application/common/utilities/base_objects/unitest/
       Example of the .cmd:
       --------------------
    cxx -ptv -c -o
   
/ctiv/dvlpt/application/common/utilities/base_objects/unitest/obj/d_CTIV_Notifyi
ngList.o
    -DCTIV_DEBUG  -ptr ./cxx_repository 
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest/ImpOutput
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest/tagged_files
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest
    -I/ctiv/dvlpt/application/common/utilities/base_objects/unitest
    -I/ctiv/integration/application/common/definitions/base_types/include 
    -I/ctiv/integration/application/common/definitions/base_types/src 
    -I/ctiv/integration/application/common/utilities/exceptions/include 
    -I/ctiv/integration/application/common/utilities/exceptions/src 
    -I/ctiv/integration/application/common/utilities/logging/include 
    -I/ctiv/integration/application/common/utilities/logging/src 
    -I/ctiv/integration/application/common/utilities/translation/include 
    -I/ctiv/integration/application/common/utilities/translation/src 
    -I/ctiv/integration/application/common/utilities/trace/include 
    -I/ctiv/integration/application/common/utilities/trace/src 
    -I/ctiv/integration/application/../tools/unit_test/include 
    -I/ctiv/integration/application/../tools/unit_test/src 
    -I/ctiv/dvlpt/application/common/utilities/base_objects/include   
    -I/ctiv/dvlpt/application/common/utilities/base_objects/src 
    -I/ctiv/dvlpt/tools/coverage/include  
    -I/ctiv/integration/application/common/definitions/base_types/include
    -I/ctiv/integration/application/common/utilities/base_objects/include
    -I/ctiv/integration/application/common/utilities/exceptions/include
    -I/ctiv/integration/application/common/utilities/fsm/include
    -I/ctiv/integration/application/common/utilities/logging/include
    -I/ctiv/integration/application/common/utilities/operator_dialoging/include
    -I/ctiv/integration/application/common/utilities/tasking/include
    -I/ctiv/integration/application/common/utilities/trace/include
    -I/ctiv/integration/application/common/utilities/translation/include
    -I/ctiv/integration/application/common/utilities/ctiv_types/include
    -I/ctiv/integration/application/common/utilities/settings/include 
    -I/ctiv/integration/application/common/utilities/third_party/include
    -I/ctiv/integration/application/pk/algorithms/algo_portability/include
    -I/ctiv/integration/application/pk/algorithms/geo_modelling/include
    -I/ctiv/integration/application/pk/algorithms/radio_modelling/include
    -I/ctiv/integration/application/pk/algorithms/global_constants/include
    -I/ctiv/integration/application/pk/algorithms/coverage_calculation/include
    -I/ctiv/integration/application/pk/algorithms/projection/include
    -I/ctiv/integration/application/pk/algorithms/synthesis_calculation/include
    -I/ctiv/integration/application/pk/control/archive/include
    -I/ctiv/integration/application/pk/control/scheduling/include
    -I/ctiv/integration/application/pk/control/segment/include
    -I/ctiv/integration/application/pk/control/cqp_interface/include
    -I/ctiv/integration/application/pk/control/gcp_interface/include 
    -I/ctiv/integration/application/pk/control/orders/include
    -I/ctiv/integration/application/pk/control/coarse_products/include
    -I/ctiv/integration/application/pk/control/pk_settings/include
    -I/ctiv/integration/application/pk/control/meteo/include
    -I/ctiv/integration/application/pk/control/pci/include
    -I/ctiv/integration/application/pk/i_o/tds/include
    -I/ctiv/integration/application/pk/i_o/sriv_data
    -I/ctiv/integration/application/common/definitions/base_types/src
    -I/ctiv/integration/application/common/utilities/base_objects/src
    -I/ctiv/integration/application/common/utilities/exceptions/src
    -I/ctiv/integration/application/common/utilities/fsm/src
    -I/ctiv/integration/application/common/utilities/logging/src
    -I/ctiv/integration/application/common/utilities/operator_dialoging/src
    -I/ctiv/integration/application/common/utilities/tasking/src
    -I/ctiv/integration/application/common/utilities/trace/src 
    -I/ctiv/integration/application/common/utilities/translation/src
    -I/ctiv/integration/application/common/utilities/ctiv_types/src
    -I/ctiv/integration/application/common/utilities/settings/src
    -I/ctiv/integration/application/common/utilities/third_party/src
    -I/ctiv/integration/application/pk/algorithms/algo_portability/src
    -I/ctiv/integration/application/pk/algorithms/geo_modelling/src
    -I/ctiv/integration/application/pk/algorithms/radio_modelling/src
    -I/ctiv/integration/application/pk/algorithms/global_constants/src
    -I/ctiv/integration/application/pk/algorithms/coverage_calculation/src
    -I/ctiv/integration/application/pk/algorithms/projection/src
    -I/ctiv/integration/application/pk/algorithms/synthesis_calculation/src
    -I/ctiv/integration/application/pk/control/archive/src
    -I/ctiv/integration/application/pk/control/scheduling/src 
    -I/ctiv/integration/application/pk/control/segment/src
    -I/ctiv/integration/application/pk/control/cqp_interface/src
    -I/ctiv/integration/application/pk/control/gcp_interface/src
    -I/ctiv/integration/application/pk/control/orders/src
    -I/ctiv/integration/application/pk/control/coarse_products/src
    -I/ctiv/integration/application/pk/control/pk_settings/src
    -I/ctiv/integration/application/pk/control/meteo/src
    -I/ctiv/integration/application/pk/control/pci/src
    -I/ctiv/integration/application/pk/i_o/tds/src
    -I/ctiv/integration/application/pk/i_o/sriv_data -I/o2/o250/include
    -I/usr/include/cxx -I/usr/include -I/usr/sys/include
    -I//usr/ilog/views22/include -I/cantata32/inc   -DALPHA -DOSF1
    -DSTL_DEC -DCTIV_TRACE  -D__ODMG_93__  -DO250   -O1 -call_shared -lm
    -nocurrent_include -pthread -lpthread -noinline -ptv
   
/ctiv/dvlpt/application/common/utilities/base_objects/unitest/tagged_files/d_CTI
V_NotifyingList.cc
       
       Note I had to manipulate the file in order to include it here using
       VMS, the record being too big to be included -- 5624 byte record too
       large for user's buffer !!
       
    
| T.R | Title | User | Personal Name | Date | Lines | 
|---|---|---|---|---|---|
| 3540.1 | cxx on unix always generates template instantiation ? | BACHUS::SABLON | Mich�le Sablon, TP/IM Support Belgium 856-7238 | Fri Apr 18 1997 08:34 | 37 | 
| 
    OK, a bit more that I understand.
    I think we have now reached the real performance problem. Considering
    their environment, with the enormous amount of source files and classes
    they are using, the way the DEC CXX compiler works make the customer live
    impossible. Effectively, it appears that:
    1. Any and every cxx compilation of a CXX source containing reference to a
       class (template instantiation) generates a .cxx and a .cmd in the
       cxx_repository.
    2. Every time the module is recompiled, those files are regenerated, being
       exactly the same.
    3. If several modules refer to a give class, the compilation of each of
       them will generate these .cxx and .cmd of each class refered in each
       module.
    4. Although generally the same, the .cxx can vary slightly (include file
       list not exactly the same. In the test performed, the .cmd was exactly
       the same, but we can suspect it to vary in function of used compilation
       option.
    5. Finally, while the link is asked, all the classes used by the program
       are (re)compiled in order to be linked with the different produced
       objects.
    If this is not a problem while creating small programs, it becomes a
    nighmare in the customer environment with thousands of modules and I don't
    know how much classes.
    It appears to me that this is a modularity problem but it is maybe caused
    by the way of working. Do you know anything of any way to go around it ?
    Thanks in advance,
    Mich�le.
 | |||||
| 3540.2 | DECC::FOLTAN | Mon Apr 21 1997 16:33 | 12 | ||
| Michele, Thanks for the problem report. I just sent you mail asking for the small reproducer that the customer been able to isolate. Thanks, Lois Foltan DEC C++ Development | |||||
| 3540.3 | fixed | DECCXX::MITCHELL | Tue May 20 1997 20:39 | 1 | |
| This problem was fixed in T5.6 FT2. | |||||