我有一個應用程序,其中pthread_join
是瓶頸。我需要幫助來解決這個問題。pthread_join正在成爲瓶頸
void *calc_corr(void *t) {
begin = clock();
// do work
end = clock();
duration = (double) (1000*((double)end - (double)begin)/CLOCKS_PER_SEC);
cout << "Time is "<<duration<<"\t"<<h<<endl;
pthread_exit(NULL);
}
int main() {
start_t = clock();
for (ii=0; ii<16; ii++)
pthread_create(&threads.p[ii], NULL, &calc_corr, (void *)ii);
for (i=0; i<16; i++)
pthread_join(threads.p[15-i], NULL);
stop_t = clock();
duration2 = (double) (1000*((double)stop_t - (double)start_t)/CLOCKS_PER_SEC);
cout << "\n Time is "<<duration2<<"\t"<<endl;
return 0;
}
在線程功能打印的時間爲40毫秒範圍 - 60ms的其中在主功能打印的時間是在650ms - 670ms。具有諷刺意味的是,我的串行代碼在650ms - 670ms時間內運行。我能做些什麼來減少pthread_join
所花費的時間?
在此先感謝!
16 * 40ms = 640ms。我懷疑這是巧合。你有多少個核心? – ildjarn 2012-01-31 22:30:20
打印出calc_corr中的所有開始和結束時鐘,並查看第一次開始時鐘和最後一次結束時鐘之間的區別。我敢打賭,你會發現大部分時間都花在等待至少一個或多個線程上。 – Arelius 2012-01-31 22:31:51
我有8個內核,我使用pthread_setaffinity_np爲每個內核綁定2個線程。 – akhil28288 2012-01-31 22:32:08