CFinder: Application Concurrency Audit Tool

CFinder: Application Concurrency Audit Tool

Intel has just released a free Application Concurrency Audit Tool called CFinder. I'm setting up this discussion thread to provide support to CFinder users and discuss the tool. Please take a moment to download and run it on the application you are developing. We want to hear your feedback and incorporate your ideas into future versions of the tool.

17 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Hi Aaron,

I got an error box when applying CFinder for quicksort. It says "Get max thread error" and "Can't queue data" a while after I pressed start button. It seems that CFinder can't get the thread information in the first run but can I solve it? Thanks.


I'll see if we can get the same error and work on a solution this coming week.
Thank you for the feedback. Please check back in a few days and I hope to have a recommendation/update/fix by then.


Hi Aaron,

That's fine. The PC I use is DELL latitude D620 laptop with Intel Core Duo 2.0G with 2048KB cache, 2G DDR667 SDRAM, running Windows XP. The compiler is Visual C++ 2005 Express free version. Thanks.

Greetings, Sunwei


We couldnt recreate the error and would like to get to the bottom of the issue.

Could you please:

1) To Send us his quicksort binary (.exe) file.

2) All the necessary info like: duration, sampling rate and so on.

3) How he ran CFinder. For example, did he just entered the info and let CFinder? Did he do anything else like running other programs when CFinder is running?

4) Did his program quicksort still run after CFinder completed the first run or terminated?

I'm not a big fan of posting my work email on forums, but will share my hotmail account for you to You might need to change the exe to xex to get by the spam filters. Let me know when the email has been sent and I'll go check it.



In looking briefly at CFinder, the biggest problems using it for Java would be

  • The thread number in the concurrency tool is not particularly meaningful for Java developers. This is because the JVM creates some threads that the Java developer is typically unaware of.

    • There are Java interfaces for querying the "name" and threadgroup of assorted threads. These may be of value if one wanted to extend this tool to be more meaningful for Java developers.
  • The CFinder tool runs the application twice. There is no guarantee that threads will be created in the same order on subsequent executions. This is the same problem with native applications however.
  • Intel's threadchecker and threadprofiler tools do not support Java (that I am aware of). While this is unfortunate, there are some other options for subsequent analysis.
    • Other tools, such as VTune help identify the most time consuming Java code to help pinpoint pieces of the code where parallel constructs should be used.
    • Other tools, such as the Eclipse TPTP profiler provide threading views customized for Java that help identify the most critical locks and interactions between threads.
    • These together should be used to identify opportunities for additional thread parallelism. In addition, if the tools identify some core hotspots in your applications hashmaps, queues, etc, one should consider porting their java application to usejava/util/concurrent parallelized versions. These are an approximateJavaanalogue to the ThreadBuildingBlocks for native Applications.

Other than this, it seems like CFinder would be as helpful for Java developers as for native developers who want to know if their application threads are efficient and whether their applications are written to achieve best performance on multicore and multiprocessorplatforms.

I've tried to use CFinder on some simple applications and have run into a few anomolies/annoyances.

  1. All the "real" apps that I've tried to run end up w/ %time, min, avg as zero (but a valid max time) and no concurrency information
  • CFinder with app of IExplore.exe and parameter of
  • CFinder with app of notepad and pasting bunches of stuff for 20sec
    • admittedly this only has a single thread...
  • CFinder with an app ofjava and a "hello world" application parameter
  • I cannot help but think I have something installed wrong? It could be that I have an incompatible version of the PDH library installed on my system? I assume that PDH is being used to get the windows system monitor details...
  • annoyance... It would be nice to be able to type in (or paste) the application to run instead of having to browse for it.
  • annoyance... I'm still not 100% sure I understand why the application needs to run twice. For some apps (particularly short running ones), the second run is sometimesless interesting than the first run because of assorted cache behavior changes that may occur the second time around...
    • For example when running with IExplore and, the first time (today) took about 20secs while the second time only took about 10-15secs... [browsers tend to have some heuristics to decide how often they need to update their caches, etc]...

    Thx, Chris

    Thank you very much for posting. We are very glad that you are take time and trying CFinder. We are collecting feedback for future CFinder release. Here are a few thoughts on your specific comments.

    1) We value your concern about Java. Currently CFinder is not meant for Java. If we collect enough requests for Java, we will see how best to add Java support to future release of CFinder.

    2) CFinder has been tested on many applications including multimedia and gaming applications.

    3) I will take your recommendation about the ability to type in or paste in the path. We will add this to the list of future features for the next CFinder release.

    4) Cfinder needs to run the app twice. In the first run, Cfinder will obtain the maximum number of threads generated by the app since there is no way to know ahead of time how many threads are created by the app. Threads can be dynamically created and destroyed during the run. CFinder will actually collect the data in the second run.

    Again, thank you very much for providing valuable feedback. I know just like all of us, we are very busy, but you still take your valuable time from your busy schedule testing CFinder and providing feedback. Future CFinder will get better due to valuable feedbacks as yours.

    Additional feedback on CFinder has been provide by Kevin Farnham on the OReilly Media, Inc. web site.

    Here is the conclusion, check out the post for the full detail of his thoughts.

    Trial Run for the CFinder Concurrency Analysis Tool

    CFinder is a nice little free tool for quickly analyzing
    the degree to which a Windows program executes concurrently in a
    specific run (or set of runs). Its a clear step up from the simple
    timing of execution instances that I applied for years to test the
    effect of edits to my multithreaded applications. I think Ill keep it!

    I'm unable to run this tool on any application.
    I've got "-1073738824" "Add counter failed" MessageBox, then "Error" "Cannot get elapsed time!!!".

    Here is output from command-line utility:

    ======== cut ========
    CFinder 1.0

    ---- System Detection ----
    Total Sockets: 1
    Total Cores: 2
    Total Logicals: 2
    Multi-processor: No
    Multi-core: Yes
    Hyper Threading: Not capable
    Computername: HAX
    System information:
    OEM ID: 0
    Processor Architecture:Native x86 (Intel)
    Processor Level: 6
    Processor type: 586
    Page size: 4096
    Hardware Profile:
    DockInfo: 7
    Profile Guid: {4f21c240-1f78-11da-aba1-806d6172696f}
    Friendly Name: Profile 1
    CPU Frequency (MHz): 2395
    size 46

    ---- Application Detection ----
    Application Name:D:Gamescrayoncrayon.exe
    Application Parameters:
    Sampling interval (msec):100
    CPU Utilization (percentage)
    Min: Avg: Max:
    Number of Threads:
    Min: Avg: Max:
    Elapsed Time (ms):
    Number of Samples: 0

    Press Enter key to exit...
    ======== cut ========

    How can I solve this?

    1) I have downloaded version 1.1 from Intel site. Command line utility shows "CFinder 1.0", and "Product version" in executable resources is 1.0 too.

    2) archive contains files "0_WARNING.HTM" and "1_WARNING.HTM", which should not be there.

    3) there is no description for "Manual capture" option in manual.

    I'll talk to Khang about your issue and get back to you shortly.
    Thank you for posting your feedback.


    thank you for your info,thank you for your post

    I like the idea of the tool, it looks like it could participate in routine automatic testing and that's always nice to have.

    It doesn't run with my app, complaining about not being able to find a thread count, something quite similar to one of the messages above.

    You can download a version of my app at, if you want to check this out for yourself.


    I am newbie in TBB and CFinder. I was trying to test sub_string_finder_pretty (which i downloaded from TBB website, it is one of Getting Started program) but i am getting following error while executing it with CFinder

    "Get Max Thread Error"

    "Cannot get total number of threads"

    Is there any work around for this??



    I can't get it to work. After selecting the path to the executable and pressing START, I see "-1073738824" "Add counter failed" MessageBox, then "Error" "Cannot get elapsed time!!!" Even at the program, which operates at 100%, such as a notepad.

    Please help.

    I have the same problem! Do you have found the problem?

    Thank You.


    I can't get it to work. After selecting the path to the executable and pressing START, I see "-1073738824" "Add counter failed" MessageBox, then "Error" "Cannot get elapsed time!!!" Even at the program, which operates at 100%, such as a notepad.

    Please help.

    And I get the same error

    There is something resolved, some patch?


    Leave a Comment

    Please sign in to add a comment. Not a member? Join today