如何从VTune™ Amplifier XE 2011的分析结果中快速找到你关心的线程

VTune™ Amplifier XE 2011 的 Concurrency 分析报告可以给出基于时间线的线程状态图。在此报告中,线程的名字缺省以线程的入口函数来命名。本工具提供了一种方法:用户可以对线程的名字重命名 ( 在分析报告)。这是因为:

1)当一个应用含有大量的线程,寻找一个自己关心的线程,殊为不易。

2)由于缺省使用入口函数为线程名。当多个线程使用相同函数作为入口函数,不易分辨。

以下是一个使用产品中ittnotify接口的例子。

参考代码:itt_set_thread_name.cpp

#include <stdio.h>
#include <pthread.h>
#include <dlfcn.h>
#include "/opt/intel/vtune_amplifier_xe_2011/include/ittnotify.h"

#define NUMTHREADS 16
void *helloFunc(void *pArg)
{
   int curthread = *(int *)pArg;

   if (curthread==11) /* Want to monitor interest of thread */
        __itt_thread_set_name("Thread 12");

   for (unsigned long i=0; i<0x8000000; i++);
   printf("Hello Thread %d\n",curthread);

   return 0;
}

main()
{
   pthread_t hThread[NUMTHREADS];
   int i, j, threadNo[NUMTHREADS];

   for (i = 0; i < NUMTHREADS; i++)     {
       threadNo[i] = i;
       pthread_create(&hThread[i], NULL, helloFunc, &threadNo[i]);
   }

   for (j = 0; j < NUMTHREADS; j++)
       pthread_join(hThread[j], NULL);

   return 0;
}


编译行:

# g++ -g itt_set_thread_name.cpp /opt/intel/vtune_amplifier_xe_2011/lib64/libittnotify.a -o itt_set_thread_name.g++ -lpthread –ldl

使用Concurrency Analysis 分析后得到的结果。注意线程名(入口函数,“HelloFunc”)已被用户自定义的名( “Thread 12” )所代替

 

有关编译器优化的更完整信息,请参阅优化通知