次の単純なプログラムでは、ブーストスレッドのオーバーヘッドに3桁のタイミングオーバーヘッドがあることがわかりました。このオーバーヘッドを減らしてfooThread()
通話をスピードアップする方法はありますか?
#include <iostream>
#include <time.h>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
typedef uint64_t tick_t;
#define rdtscll(val) do { \
unsigned int __a,__d; \
__asm__ __volatile__("rdtsc" : "=a" (__a), "=d" (__d)); \
(val) = ((unsigned long long)__a) | (((unsigned long long)__d)<<32); \
} while(0)
class baseClass {
public:
void foo(){
//Do nothing
}
void threadFoo(){
threadObjOne = boost::thread(&baseClass::foo, this);
threadObjOne.join();
}
private:
boost::thread threadObjOne;
};
int main(){
std::cout<< "main startup"<<std::endl;
baseClass baseObj;
tick_t startTime,endTime;
rdtscll(startTime);
baseObj.foo();
rdtscll(endTime);
std::cout<<"native foo() call takes "<< endTime-startTime <<" clock cycles"<<std::endl;
rdtscll(startTime);
baseObj.threadFoo();
rdtscll(endTime);
std::cout<<"Thread foo() call takes "<< endTime-startTime <<" clock cycles"<<std::endl;
}
あなたはそれをコンパイルすることができます、g++ -lboost_thread-mt main.cpp
そしてここに私のマシンのサンプル出力があります:
main startup
native foo() call takes 2187 clock cycles
Thread foo() call takes 29630434 clock cycles