2017-09-12 69 views
-3

我正在創建一個測試程序來測試CPU性能和溫度,同時CPU使用率介於70%到80%之間。我正在使用線程在循環中運行計算並不停止。但是CPU增加到100%。我不知道維持使用率不高於80%,但高於70%。我可以提供一些建議嗎?創建一個C程序來加載CPU利用率> 70%但低於80%

void *doCalculate(void *a); 

int main(void) 
{ 
    pthread_t threads[NUM_THREAD]; 
    int thread_args[NUM_THREAD]; 
    int i,s; 
    //Create Threads 
    for (i=0; i<NUM_THREAD; ++i) 
    { 
     thread_args[i] = i; 
     printf("spawning thread %d\n", i); 
     s=pthread_create(&threads[i], NULL, doCalculate, (void *) 
    &thread_args[i]); 
     if(s!=0) 
     handle_error(s,"pthread_create"); 
    } 
    //Wait for the threads to finish 
    for (i=0; i<NUM_THREAD; ++i) { 
     pthread_join(threads[i], NULL); 
    } 
    return 1; 
} 

void *doCalculate(void *a){ 
    int tid; 
    tid = *((int *) a); 
    printf("Thread %d!\n", tid); 
    float x = 1.5f; 
    while (1) 
    { 
     x *= sin(x)/atan(x) * tanh(x) ; 

    } 
} 

這是我的臨時解決方案。我在函數doCalculation中放置了printf和for循環。

void *doCalculate(void *a){ 
    int tid; 
    tid = *((int *) a); 
    printf("Thread %d!\n", tid); 
    float x = 1.5f; 
    while (1) 
    { 
     int i=0; 
     printf("\t\n\n"); 
     x *= sin(x)/atan(x) * tanh(x) ; 
     for(;i<15000;i++){} 
    } 
} 
+0

這裏沒有代碼 – Sathiya

+0

我的道歉。請看看, –

+0

ÓK。我可能會找到解決方案。我把printf和for循環放在函數doCalculate中。 –

回答

1

您可以發送SIGSTOPSIGCONT信號(見signal(7) ...)進程組。您將使用/proc/(請參閱proc(5))來測量負載。

我的half.c程序(自包含,在github上)可能是鼓舞人心的。它以半速運行命令(通過STOP-頻繁地運行,例如每十分之一秒,然後CONT-運行並再次重複)。我在2005年左右寫了一個文件來解決硬件缺陷 - 在一臺Turion MSI-270筆記本電腦上解決了RAM模塊過熱問題;使用它我能夠在Linux內核中運行half make,而普通的make因爲筆記本電腦的恐慌而崩潰,過熱)。

閱讀各地CPU親和力Advanced Linux Programming

搜索。見taskset(1),sched_setaffinity(2),

+0

這是最好的解決方案。謝謝你的建議。我知道我的問題很不尋常。但我剛剛學習了新的程序。非常感謝你。 –