void* worker(void*)
{
int clk = clock();
float val = 0;
for(int i = 0; i != 100000000; ++i)
{
val += sin(i);
}
printf("val: %f\n", val);
printf("worker: %d ms\n", clock() - clk);
return 0;
}
int main()
{
pthread_t tid;
pthread_create(&tid, NULL, worker, NULL);
int clk = clock();
float val = 0;
for(int i = 0; i != 100000000; ++i)
{
val += sin(i);
}
printf("val: %f\n", val);
printf("main: %d ms\n", clock() - clk);
pthread_join(tid, 0);
return 0;
}
이
메인 스레드와 작업자 스레드가 동일하게 빠르게 실행되어 있지만, 결과가된다 :주 스레드가 pthread-win32에서 작업자 스레드보다 느린 이유는 무엇입니까?
val: 0.782206
worker: 5017 ms
val: 0.782206
main: 8252 ms
메인 스레드가 훨씬 느린, 난 .... 왜 모르는
문제가 해결되었습니다. 이것은 컴파일러의 문제입니다. GCC (MinGW)는 Windows에서 이상하게 작동합니다. Visual Studio 2012에서 코드를 작성했는데 속도 차이가 없습니다.
더 공정한 테스트를 수행하려면 먼저 printfs를 타이밍 측정에서 제외하십시오. (이것으로 3 초 차이를 알 수 있을지는 의심 스럽지만) –
또한 코드를 복제하는 대신 공통된 기능을 사용하십시오. 그리고 컴파일러 최적화 (-O3)를 설정하는 것을 잊지 마십시오. – syam
멀티 코어 프로세서에서 * 실행되고 있습니까? –