[Insight-developers] Re: patch and some questions [Re: use
environment variable to limit number of parallel threads]
Luis Ibanez
luis.ibanez at kitware.com
Thu Sep 20 19:12:14 EDT 2007
Hi Torsten,
Since we are so close to cutting ITK 3.4, and this is not a bug fix
but rather a feature request, would you mind reporting this in the
MANTIS bug tracker as a feature request ?
In this way we can take care of it after we reopen the repository
next week.
Thanks
Luis
------------------------
Torsten Rohlfing wrote:
>
> Okay, how's this for a patch:
>
> Index: Code/Common/itkMultiThreader.cxx
> ===================================================================
> RCS file: /cvsroot/Insight/Insight/Code/Common/itkMultiThreader.cxx,v
> retrieving revision 1.40
> diff -r1.40 itkMultiThreader.cxx
> 45a46,47
> > #include <itksys/SystemTools.hxx>
> >
> 81c83,90
> < if (m_GlobalDefaultNumberOfThreads == 0)
> ---
> > // Check for global setting of thread number from environment variable
> > itksys_stl::string itkGlobalDefaultNumberOfThreadsEnv = "0";
> > if ( itksys::SystemTools::GetEnv(
> "ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS",
> itkGlobalDefaultNumberOfThreadsEnv ) )
> > {
> > m_GlobalDefaultNumberOfThreads = atoi(
> itkGlobalDefaultNumberOfThreadsEnv.c_str() );
> > }
> >
> > if (m_GlobalDefaultNumberOfThreads <= 0)
>
> By changing the range check following the GetEnv from "==0" to "<=0",
> this should safeguard against negative numbers that may be resulting
> from "atoi" on the environment variable.
>
> By the way: I noticed that the documentation for
> GetGlobalDefaultNumberOfThreads() states
>
> /** Set/Get the value which is used to initialize the NumberOfThreads
> * in the constructor. Initially this default is set to the number of
> * processors or 8 (which ever is less). */
>
> but it doesn't seem the default limit of 8 is actually implemented. Is
> the documentation out of date maybe?
>
> Also, the value returned by GetGlobalMaximumNumberOfThreads() is
> supposed to override any other setting, according to the documentation,
> but I can't find that implemented anywhere either.
>
> Cheers!
> TR
>
> Bill Lorensen wrote:
>
>> If we do add this functionality, we should use the kwsys GetEnv() even
>> though it just calls getenv().
>>
>> Bill
>>
>>
>> On 9/20/07, *Torsten Rohlfing* <torsten at synapse.sri.com
>> <mailto:torsten at synapse.sri.com>> wrote:
>>
>> Luis:
>>
>> Sounds pretty much like what I was envisioning.
>>
>> Item 2) in my opinion only serves to allow people who distribute
>> pre-compiled ITK-based software to conscientiously ignore
>> user-specified
>> CPU limitations. I am not sure that's a good thing, 'cos I believe I
>> know better how many CPUs a tool on my system should be using than
>> does
>> the guy who compiled it elsewhere. Also, it's probably not necessary,
>> because if, as a developer, you are THAT determined to force the
>> maximum
>> number of parallel threads, you probably don't mind hacking the
>> code a
>> bit to disable the getenv().
>>
>> The bottom line is -- if you add option 1) alone, no one will ever
>> notice any changes unless they define the environment variable. In
>> that
>> case, they probably know what they are doing. And you're not further
>> cluttering the Cmake configuration options.
>>
>> But anyway, a combination of 1/2 would certainly work for me; I
>> personally don't use any pre-compiled ITK apps, so having 1) gives me
>> what I need, and 2) remains under my control.
>>
>> By the way -- does anyone know whether any of ITK's supported
>> platforms
>> would have trouble with the getenv() call?
>>
>> Thanks everyone!
>> Torsten
>>
>> Luis Ibanez wrote:
>> >
>> > Hi Torsten,
>> >
>> > Here is one option that come to mind:
>> >
>> > 1) In itkMultiThreader.cxx lines 80-145 method
>> > GetGlobalDefaultNumberOfThreads()
>> >
>> > insert one option where the number of Threads
>> > is taken from the environment variable, like:
>> >
>> > std::string numberOfThreadsString =
>> > getenv("ITK_DEFAULT_NUMBER_OF_THREADS");
>> > m_GlobalDefaultNumberOfThreads =
>> > atoi( numberOfThreadsString.c_str() )
>> >
>> > 2) Surrond that option with a CMake enabled define
>> > such as ITK_USE_NUMBER_OF_THREADS_FROM_ENVIRONMENT,
>> > this define will be set in the itkConfigure.h.in
>> <http://itkConfigure.h.in>
>> > and will be controlled by an advanced option in
>> > CMake.
>> >
>> >
>> > Note that the same can be done for the "Maximum"
>> > number of Threads.
>> >
>> >
>> > In this way, you can get ITK to choose the number of
>> > threads from the environment variable, but *only* if
>> > ITK was configured with that CMake variable enabled.
>> >
>> >
>> >
>> > Regards,
>> >
>> >
>> > Luis
>> >
>> >
>>
>> _______________________________________________
>> Insight-developers mailing list
>> Insight-developers at itk.org <mailto:Insight-developers at itk.org>
>> http://www.itk.org/mailman/listinfo/insight-developers
>>
>>
>
>
More information about the Insight-developers
mailing list