2017-09-12 36 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

这是最好的解决方案。谢谢你的建议。我知道我的问题很不寻常。但我刚刚学习了新的程序。非常感谢你。 –