Why does my software run so slow and/or use so much memory when run with Intel® Thread Checker?
Intel® Thread Checker uses dynamic analysis as your threading software executes. As your software runs, Thread Checker uses instrumentation to monitor each thread, including the threading APIs used and memory accesses. Therefore Thread Checker uses more memory due to the instrumentation and significantly slows down the execution of any software.
For this reason, it is critical to reduce the workload of your software before running it under Thread Checker. Reducing the workload may speed up analysis of the software and may reduce the memory used.
About Workload Reduction: What does workload reduction mean?
This is a reduction in the amount of work your program performs. It might include reducing the amount of data your program processes and/or reducing the amount of processing your program performs on each piece of data.
Some examples of work-load reduction include:
- Processing a 32x24 pixel image instead of a 1920x1440 pixel image. If there is a threading error within the loops that process the image, it does not provide you with any more information to find the same error thousands or millions of times. Finding a threading error a few (tens or hundreds) times is sufficient and makes you more productive.
- Minimize the number of times you process each piece of data by reducing the loop iterations. Your software does not need a lot of accuracy when run under Intel® Thread Checker. After all, the goal is to find threading errors and not to get accurate results.
- Minimize the update rates and/or length. Try using only one second of video, or reduce the update rate of the display to once per second instead of thirty or more updates a second.
About Workload Reduction: What kind of workload reduction should I use?
You should use as much workload reduction as possible while still being sure that you're executing the code that you want checked. Intel® Thread Checker uses dynamic analysis when executing your software. If section of your code is not executed, Thread Checker cannot give you diagnostics about the not-executed code. Where possible, you should try using multiple short runs over different code paths.