[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::c_plus_plus

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

3540.0. "The mystery of template instanciation" by BACHUS::SABLON (Mich�le Sablon, TP/IM Support Belgium 856-7238) Thu Apr 17 1997 15:28

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.RTitleUserPersonal
Name
DateLines
3540.1cxx on unix always generates template instantiation ?BACHUS::SABLONMich�le Sablon, TP/IM Support Belgium 856-7238Fri Apr 18 1997 09:3437
    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.2DECC::FOLTANMon Apr 21 1997 17:3312
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.3fixedDECCXX::MITCHELLTue May 20 1997 21:391
This problem was fixed in T5.6 FT2.