Skip to content
  • Jonathan Peyton's avatar
    Offer API for setting number of loop dispatch buffers · 067325f9
    Jonathan Peyton authored
    The problem is the lack of dispatch buffers when thousands of loops with nowait,
    about 10 iterations each, are executed by hundreds of threads. We only have
    built-in 7 dispatch buffers, but there is a need in dozens or hundreds of
    buffers.
    
    The problem can be fixed by setting KMP_MAX_DISP_BUF to bigger value. In order
    to give users same possibility I changed build-time control into run-time one,
    adding API just in case.
    
    This change adds an environment variable KMP_DISP_NUM_BUFFERS and a new API
    function kmp_set_disp_num_buffers(int num_buffers).
    
    The KMP_DISP_NUM_BUFFERS envirable works only before serial initialization,
    because during the serial initialization we already allocate buffers for the hot
    team, so it is too late to change the number of buffers later (or we need to
    reallocate buffers for all teams which sounds too complicated). The
    kmp_set_defaults() routine does not work for this envirable, because it calls
    serial initialization before reading the parameter string. So a new routine,
    kmp_set_disp_num_buffers(), is created so that it can set our internal global
    variable before the library initialization. If both the envirable and API used
    the envirable wins.
    
    Differential Revision: http://reviews.llvm.org/D20697
    
    llvm-svn: 271318
    067325f9
Loading