PBRT
|
00001 00002 // 00003 // Copyright (c) 2005, Industrial Light & Magic, a division of Lucas 00004 // Digital Ltd. LLC 00005 // 00006 // All rights reserved. 00007 // 00008 // Redistribution and use in source and binary forms, with or without 00009 // modification, are permitted provided that the following conditions are 00010 // met: 00011 // * Redistributions of source code must retain the above copyright 00012 // notice, this list of conditions and the following disclaimer. 00013 // * Redistributions in binary form must reproduce the above 00014 // copyright notice, this list of conditions and the following disclaimer 00015 // in the documentation and/or other materials provided with the 00016 // distribution. 00017 // * Neither the name of Industrial Light & Magic nor the names of 00018 // its contributors may be used to endorse or promote products derived 00019 // from this software without specific prior written permission. 00020 // 00021 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00022 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00023 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00024 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00025 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00026 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00027 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00028 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00029 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00030 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00031 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00032 // 00034 00035 #ifndef INCLUDED_IMF_THREADING_H 00036 #define INCLUDED_IMF_THREADING_H 00037 00038 //----------------------------------------------------------------------------- 00039 // 00040 // Threading support for the IlmImf library 00041 // 00042 // The IlmImf library uses threads to perform reading and writing 00043 // of OpenEXR files in parallel. The thread that calls the library 00044 // always performs the actual file IO (this is usually the main 00045 // application thread) whereas a several worker threads perform 00046 // data compression and decompression. The number of worker 00047 // threads can be any non-negative value (a value of zero reverts 00048 // to single-threaded operation). As long as there is at least 00049 // one worker thread, file IO and compression can potentially be 00050 // done concurrently through pinelining. If there are two or more 00051 // worker threads, then pipelining as well as concurrent compression 00052 // of multiple blocks can be performed. 00053 // 00054 // Threading in the Imf library is controllable at two granularities: 00055 // 00056 // * The functions in this file query and control the total number 00057 // of worker threads, which will be created globally for the whole 00058 // library. Regardless of how many input or output files are 00059 // opened simultaneously, the library will use at most this number 00060 // of worker threads to perform all work. The default number of 00061 // global worker threads is zero (i.e. single-threaded operation; 00062 // everything happens in the thread that calls the library). 00063 // 00064 // * Furthermore, it is possible to set the number of threads that 00065 // each input or output file should keep busy. This number can 00066 // be explicitly set for each file. The default behavior is for 00067 // each file to try to occupy all worker threads in the library's 00068 // thread pool. 00069 // 00070 //----------------------------------------------------------------------------- 00071 00072 namespace Imf { 00073 00074 00075 //----------------------------------------------------------------------------- 00076 // Return the number of Imf-global worker threads used for parallel 00077 // compression and decompression of OpenEXR files. 00078 //----------------------------------------------------------------------------- 00079 00080 int globalThreadCount (); 00081 00082 00083 //----------------------------------------------------------------------------- 00084 // Change the number of Imf-global worker threads 00085 //----------------------------------------------------------------------------- 00086 00087 void setGlobalThreadCount (int count); 00088 00089 00090 } // namespace Imf 00091 00092 #endif