精华内容
下载资源
问答
  • 多核CPU,多线程CPU,多发射CPU

    千次阅读 2012-05-21 18:01:49
    1.多核处理器的分类:对称处理器SMP和非对称处理器AMP。AMP又分为异构和同构。异构处理器使 用不同的核心,比如DSP+FPGA等。异构处理器目前有标准推动:Kronos发布的OPENCL。 2. 有些事实说明,当CPU 频率超过...

    1.多核处理器的分类:对称多处理器SMP和非对称多处理器AMP。AMP又分为异构和同构。异构处理器使

    用不同的核心,比如DSP+FPGA等。异构处理器目前有标准推动:Kronos发布的OPENCL。

    2. 有些事实说明,当CPU 频率超过200MHZ时,其面积和功耗成指数增长。结论从哪里来的??

     还有种说法,随着制程工艺进入深压微米时代,增加的门电路数量的边际成本越来越小(意思是可以塞进更多的东西)。

    考虑到漏电功耗的影响,通过提升主频来提高性能不如用几个频率较低的多核来实现,这样更易实现功耗控制。---这句话有点问题??

    3. Multi-threaded core多线程。面积功耗大,只有在确实有多线程的应用场景时才有用,如果

        应用场景没法多线程,用处不大。编程难度和所需精力很大。

    4. Multi-issue core多发射。一个周期内可以执行多个指令操作。




    链接资料:

    1。消费电子多核趋势

    展开全文
  • 我的电脑是品牌的三核心,为什么MFC多线程创建了3个线程但是CPU使用率还是35%?好像只执行了一个线程?还是三个线程分割了CPU
  • c++多线程cpu占用率过高解决之道

    千次阅读 2019-02-20 14:32:13
    多线程并发在我们日常的工作中占有相当的需求比例,但是多线程程序很容易造成CPU使用率过高的问题,问题的原因在于我们一般的线程函数是用来处理一些简单的、需要循环处理的事情,例如一般情况下,在线程函数中我们...

    多线程并发在我们日常的工作中占有相当的需求比例,但是多线程程序很容易造成CPU使用率过高的问题,问题的原因在于我们一般的线程函数是用来处理一些简单的、需要循环处理的事情,例如一般情况下,在线程函数中我们常常使用下面的逻辑代码

    while( is_running )
    {
        // do work
        //......
    }

    如果 "do work" 的工作特别简单,或者有的时候我们在do work中增加了条件判断,如果条件不满足直接跳出本次循环,开始下一次循环,这种情况下就容易造成cpu使用率过高。虽然CPU将时间分成切片去处理不同进程中的任务,但是其他进程中的任务cpu可以在很短的时间内完成,又由于我们上面代码中这种方式是死循环,相当于一直有任务需要cpu去处理,所以会造成CPU的大量时间都浪费在该线程中。

    解决的办法很简单就是在循环末尾加sleep系统调用,让线程停止CPU占用,如:

    while( is_running )
    {
        //do work
        //......
    
        sleep(1);
    }

     

    展开全文
  • 使用pthread实现多线程CPU+GPU计算

    千次阅读 2016-08-05 17:33:55
    本次测试目的仅仅为了尝试能否使用pthread实现多线程CPU和GPU分别进行控制:  文件结构如下:  main.cc:控制线程的主函数  vector.cu:实现对核函数进行调用的任务函数  vector.h:任务函数声明 ...

    本次测试目的仅仅为了尝试能否使用pthread实现多线程对CPU和GPU分别进行控制:

      文件结构如下:

      main.cc:控制线程的主函数

      vector.cu:实现对核函数进行调用的任务函数

      vector.h:任务函数声明

      vector_kernel.cu:核函数

      vector_kernel.h:核函数声明

      生成文件如下:

      vector:最终生成的可执行文件

      main.o:生成的函数体obj

      vector.o:生成的任务函数obj

      vector_kernel.o:生成的核函数obj

      功能描述:

      线程1:执行GPU代码(向量加法)

      线程2:执行CPU代码(循环打印数据)

      线程3:执行CPU代码(循环打印数据)

      线程4:执行CPU代码(循环打印数据)

      文件代码:

      main.cc:

    #include <stdio.h>
    #include 
    <pthread.h>
    #include 
    <sys/time.h>
    #include 
    <stdlib.h>
    #include 
    <string.h>
    #include 
    "vector.h"


    pthread_t thread[
    4];


    void *thread1(void *)
    {
    //do GPU task
    float time, start;
    start 
    = clock();
    printf(
    "thread1:I'm thread1\n");
    int i, n = 100;
    float *a, *b, *c;
    = (float *)malloc(n * sizeof(float));
    = (float *)malloc(n * sizeof(float));
    = (float *)malloc(n * sizeof(float));
    for(i = 0; i < n; i++)
    {
    a[i] 
    = 1.0f;
    b[i] 
    = 1.0f;
    }
    for(i = 0; i < 100; i++)
    {
    vectorAdd(a, b, c, n);
    }
    printf(
    "thread1:c[%d] = %f\n"0, c[0]);
    free(a);
    free(b);
    free(c);
    time 
    = clock() - start;
    printf(
    "thread1: task was finished!\ncostTime1 : %f\n", time / CLOCKS_PER_SEC);
    pthread_exit(NULL);
    }


    void *thread2(void *)
    {
    //do CPU task
    float time, start;
    start 
    = clock();
    printf(
    "thread2:I'm thread2\n");
    int i, j, k = 1
    for(i = 0; i < 1000; i++)
    {
    for(j = 0; j < 1000; j++)
    {
    printf(
    "thread2:k = %d\n", k);
    k
    ++;
    }
    }
    time  
    = clock() - start;
    printf(
    "thread2: task was finished!\ncostTime2 : %f\n", time / CLOCKS_PER_SEC);
    pthread_exit(NULL);
    }


    void *thread3(void *)
    {
    //do CPU task
    float time, start;
    start 
    = clock();
    printf(
    "thread3:I'm thread3\n");
    int i, j, k = 1
    for(i = 0; i < 1000; i++)
    {
    for(j = 0; j < 1000; j++)
    {
    printf(
    "thread3:k = %d\n", k);
    k
    ++;
    }
    }
    time  
    = clock() - start;
    printf(
    "thread3: task was finished!\ncostTime3 : %f\n", time / CLOCKS_PER_SEC);
    pthread_exit(NULL);
    }


    void *thread4(void *)
    {
    //do CPU task
    float time, start;
    start 
    = clock();
    printf(
    "thread4:I'm thread4\n");
    int i, j, k = 1
    for(i = 0; i < 1000; i++)
    {
    for(j = 0; j < 1000; j++)
    {
    printf(
    "thread4:k = %d\n", k);
    k
    ++;
    }
    }
    time  
    = clock() - start;
    printf(
    "thread4: task was finished!\ncostTime4 : %f\n", time / CLOCKS_PER_SEC);
    pthread_exit(NULL);
    }


    void thread_create()
    {
    int temp;
    memset(
    &thread, 0sizeof(thread));
    if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)
    printf(
    "线程1创建失败!\n");
    else
    printf(
    "线程1被创建!\n");
    if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0)
    printf(
    "线程2创建失败!\n");
    else
    printf(
    "线程2被创建!\n");
    if((temp = pthread_create(&thread[2], NULL, thread3, NULL)) != 0)
    printf(
    "线程3创建失败!\n");
    else
    printf(
    "线程3被创建!\n");
    if((temp = pthread_create(&thread[3], NULL, thread4, NULL)) != 0)
    printf(
    "线程4创建失败!\n");
    else
    printf(
    "线程4被创建!\n");
    }
    void thread_wait()
    {
    if(thread[0!= 0)
    {
    pthread_join(thread[
    0], NULL);
    printf(
    "线程1已经结束\n");
    }
    if(thread[1!= 0)
    {
    pthread_join(thread[
    1], NULL);
    printf(
    "线程2已经结束\n");
    }
    if(thread[2!= 0)
    {
    pthread_join(thread[
    2], NULL);
    printf(
    "线程3已经结束\n");
    }
    if(thread[3!= 0)
    {
    pthread_join(thread[
    3], NULL);
    printf(
    "线程4已经结束\n");
    }
    }


    int main()
    {
    float time, start;
    printf(
    "我是主函数,正在创建线程\n");
    start 
    = clock();
    thread_create();
    printf(
    "我是主函数,正在等待线程完成任务\n");
    thread_wait();
    time 
    = clock() - start;
    printf(
    "costTime0 : %f\n", time / CLOCKS_PER_SEC);
    return 0;
    }

      vector.cu:

    #include <stdio.h>
    #include 
    <stdlib.h>
    #include 
    <cuda.h>
    #include 
    "vector.h"
    #include 
    "vector_kernel.h"


    void vectorAdd(float *a, float *b, float *c, int n)
    {
    float *d_a, *d_b, *d_c;
    cudaMalloc((
    void **)&d_a, n * sizeof(float));
    cudaMemcpy(d_a, a, n 
    * sizeof(float), cudaMemcpyHostToDevice);
    cudaMalloc((
    void **)&d_b, n * sizeof(float));
    cudaMemcpy(d_b, b, n 
    * sizeof(float), cudaMemcpyHostToDevice);
    cudaMalloc((
    void **)&d_c, n * sizeof(float));
    cudaMemcpy(d_b, b, n 
    * sizeof(float), cudaMemcpyHostToDevice);
    vectorAddKernel
    <<<1, n>>>(d_a, d_b, d_c, n);
    cudaMemcpy(c, d_c, n 
    * sizeof(float), cudaMemcpyDeviceToHost);
    cudaFree(d_a);
    cudaFree(d_b);
    cudaFree(d_c);
    }

      vector.h:

    #include <stdio.h>
    #include 
    <stdlib.h>

    void vectorAdd(float *a, float *b, float *c, int n);

      vector_kernel.cu:

    #include <stdio.h>
    #include 
    <stdlib.h>
    #include 
    <cuda.h>
    #include 
    "vector_kernel.h"


    __global__ 
    void vectorAddKernel(float *a, float *b, float *c, int n)
    {
    int tid;
    tid 
    = threadIdx.x;
    if(tid < n)
    c[tid] 
    = a[tid] + b[tid];
    }

      vector_kernel.h:

    #include <stdio.h>
    #include 
    <cuda.h>
    #include 
    <stdlib.h>


    __global__ 
    void vectorAddKernel(float *a, float *b, float *c, int n);

      而最主要的是makefile的内容,由于nvcc会将.cu生成obj默认为c++方式,所以,需要将主函数改为.cc文件,不然将会编译出错!

      makefile:

    vector : main.o vector.o vector_kernel.o
    nvcc 
    -o vector main.o vector.o vector_kernel.o


    vector_kernel.o : vector_kernel.cu vector_kernel.h
    nvcc 
    -c vector_kernel.cu


    vector.o : vector.cu vector.h vector_kernel.h
    nvcc 
    -c vector.cu


    main.o : main.cc vector.h
    cc 
    -lpthread -c main.cc

      通过测试时间可以知道几个线程之间的执行关系,大家自己测试啦~

      以下是一个运行结果:

            更多内容请点击:

            CUDA专区:http://cuda.it168.com/

            CUDA论坛:http://cudabbs.it168.com/


    原文链接:地址

    展开全文
  • C++多线程-多核CPU下的多线程

    千次阅读 2020-01-09 11:25:12
    多核CPU下的多线程 没有出现多核之前,我们的CPU实际上是按照某种规则对线程依次进行调度的。在某一个特定的时刻,CPU执行的还是某一个特定的线程。然而,现在有了多核CPU,一切变得不一样了,因为在某一时刻很有...
    多核CPU下的多线程

    没有出现多核之前,我们的CPU实际上是按照某种规则对线程依次进行调度的。在某一个特定的时刻,CPU执行的还是某一个特定的线程。然而,现在有了多核CPU,一切变得不一样了,因为在某一时刻很有可能确实是n个任务在n个核上运行。我们可以编写一个简单的open mp测试一下,如果还是一个核,运行的时间就应该是一样的。

    #include <omp.h>  
    #define MAX_VALUE 10000000  
      
    double _test(int value)  
    {  
        int index;  
        double result;  
      
        result = 0.0;  
        for(index = value + 1; index < MAX_VALUE; index +=2 )  
            result += 1.0 / index;  
      
        return result;  
    }  
      
    void test()  
    {  
        int index;  
        int time1;  
        int time2;  
        double value1,value2;  
        double result[2];  
      
        time1 = 0;  
        time2 = 0;  
      
        value1 = 0.0;  
        time1 = GetTickCount();  
        for(index = 1; index < MAX_VALUE; index ++)  
            value1 += 1.0 / index;  
      
        time1 = GetTickCount() - time1;  
      
        value2 = 0.0;  
        memset(result , 0, sizeof(double) * 2);  
        time2 = GetTickCount();  
      
    #pragma omp parallel for  
        for(index = 0; index < 2; index++)  
            result[index] = _test(index);  
      
        value2 = result[0] + result[1];  
        time2 = GetTickCount() - time2;  
      
        printf("time1 = %d,time2 = %d\n",time1,time2);  
        return;  
    }  
    
    多线程编程

    为什么要多线程编程呢?这其中的原因很多,我们可以举例解决
    1)有的是为了提高运行的速度,比如多核cpu下的多线程
    2)有的是为了提高资源的利用率,比如在网络环境下下载资源时,时延常常很高,我们可以通过不同的thread从不同的地方获取资源,这样可以提高效率
    3)有的为了提供更好的服务,比如说是服务器
    4)其他需要多线程编程的地方等等

    展开全文
  • 511遇见易语言多线程大漠多线程 模块源码 .子程序 线程_等待, 逻辑型, 公开, 等待一个线程,返回真表示线程运行结束,返回假表示已超时 .参数 线程句柄, 整数型 .参数 等待时间, 整数型, 可空, 单位毫秒,默认为...
  • C++多线程CPU多核多线程的关系

    千次阅读 2019-03-25 12:50:48
    https://blog.csdn.net/jomie/article/details/24878643 ...程序的多线程CPU多线程并不直接关联,底层的任务调度、线程调度都是操作系统来实现的。你只能告诉操作系统,这些工作是并行的...
  • 文章目录1 cpu架构和工作原理2 多核cpu和多cpu架构3 进程和线程4 多核、多CPU多线程、多进程的对应关系5 总结 1 cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器...
  • C++多线程,为线程绑定cpu

    千次阅读 2019-06-25 18:40:12
    文章目录1,使用2,函数 ...set_cpu("detector", {0, 1, 2}); 2,函数 void set_cpu(std::string thread_name, std::vector<short> cpu_ids) { int i, cpus = 0; cpu_set_t mask; cpu_set_t get; cpus...
  • 多线程CPU上是怎样分布的

    千次阅读 2019-07-09 16:29:02
    关于Java多线程CPU上分布的问题,首先要明白一点,它与CPU是多核还是双核并没有必然的联系。CPU有时只能执行一个线程,这是因为在多线程并行执行时,CPU可以根据一定的算法来调度和切换线程。一般而言对于多线程的...
  • 多核cpu多线程理解

    万次阅读 2019-01-04 17:00:38
    计算机cpu多线程 进程和线程: 进程包含线程,一个进程中包含多个线程. 线程是cpu调度和分配的基本单位,进程是操作系统进行资源分配(cpu,内存,硬盘io等)的最小单位. 单核cpu: 实现多进程依靠于操作系统的进程...
  • 多线程技术是我们日常工作中遇到的最常见的技术了,它的使用经常伴随着线程池,今天我们聊聊如何设计一个合理的线程池。 首先线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动...
  • 1.多线程在单核和多核CPU上的执行效率问题的讨论a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢)多个cpu的话就可以在两个cpu中同时执行了..............a2: ...
  • CPU核心数目 与 多线程

    万次阅读 2017-03-16 22:05:23
    CPU核数跟多线程的关系一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的?今天就这一问题查了一些资料,现整理如下:要说多线程就离不开进程,进程和线程的区别在这里就不详细说...
  • CPU的多核,和多线程编程有关系吗?多线程编程是以多核的CPU为基础的吗
  • 多线程cpu本质原理

    千次阅读 2019-04-07 11:48:44
    1、操作系统如何实现多进程、多线程。 2、cpu基本结构,cpu如何和其他设备(网卡、显卡、声卡、磁盘、usb)通信。 3、java虚拟机原理。 4、多线程的安全问题的本质原因。 下面一一记录,本人文学水平有限,...
  • 启动线程池运行程序 线程池很大 导致cpu过载 问题, 请问都什么可以及时回收 降低cpu利用率
  • 采用多线程充分利用CPU资源

    千次阅读 2018-12-15 21:57:46
    采用多线程充分利用CPU资源 首先说一下利用此法的需求场景: 假如你的一段业务逻辑设计到同时会有多个人点击提交,但是访问所消耗的资源有限的情况下,比如:秒杀,一个商品在有限的数量上以及有限的时间限制上需要...
  • Java:线程:CPU核心数目 与 多线程

    千次阅读 2018-10-01 00:16:29
    1.多线程的几个状态?以及何时处于这个状态?  开始(创建):在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。  就绪:当调用了线程对象的start方法之后,该线程就进入了就绪状态...
  • 单核cpu多核cpu如何执行多线程

    千次阅读 2020-03-31 11:19:00
    花了很多时间来整理这方面的相关内容 程序和进程 程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码 进程: 是程序的一次执行过程,或是...一个进程同一时间并行多个线程,多线程是程序有多...
  • CPU核数跟多线程的关系

    千次阅读 2018-09-29 14:30:03
    一直以来有这样的疑惑,单核CPU适合多线程吗?是不是几个核的CPU开几个线程是最合适的? 今天就这一问题查了一些资料,现整理如下:  要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几...
  • python里的多线程是单cpu意义上的多线程,它和多cpu上的多线程有着本质的区别。 单cpu多线程:并发 多cpu多线程:并行内部包含并发 在python当中,存在一个叫Global Interpreter Lock(GIL)的东西,直译就是全局...
  • C# 多线程造成CPU占用率高解决办法

    万次阅读 多人点赞 2018-08-19 08:26:40
    在C#开发中我们难免会用到多线程操作,而且很多时候需要开启多个线程一直监视某个状态,当线程多的时候就会造成CPU内存占用率过高。电脑配置低的根本吃不消。 private void button1_Click(object sender, ...
  • Python多进程和多线程(跑满CPU

    万次阅读 多人点赞 2019-05-07 15:06:16
    Python多进程和多线程(跑满CPU) 概念 任务可以理解为进程(process),如打开一个word就是启动一个word进程。在一个word进程之中不只是进行打字输入,还需要拼写检查、打印等子任务,我们可以把进程中的这些子...
  • 多线程导致CPU使用率百分百原因

    千次阅读 2016-04-30 15:30:39
    在编写一个控制台应用程序时,在使用多线程以及硬件厂家的dll文件时,认为dll文件里的方法自带一个超时时间,就没有再线程中进行sleep进行休息或其他中断操作,导致程序运行时CPU使用率达到百分之百,在添加上sleep...
  • 单核cpu多线程体会

    千次阅读 2020-02-02 20:52:08
    1.多线程在单核和多核CPU上的执行效率问题的讨论 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执行而已,其实并没有快(反而慢,涉及到切换线程的消耗) 多个cpu的话就可以在两个cpu中同时执行两...
  • 多线程CPU的关系

    千次阅读 2019-06-20 11:20:19
    什么是CPU (1) Central Progressing Unit 中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心和控制核心。 (2) CPU包括 运算器,高速缓冲存储器,总线。 (3) 它的工作,主要是解释计算机中的...
  • 多线程(一):创建线程和线程的常用方法

    万次阅读 多人点赞 2018-09-01 19:14:23
    一:为什么要学多线程 应付面试 :多线程几乎是面试中必问的题,所以掌握一定的基础知识是必须的。 了解并发编程:实际工作中很少写多线程的代码,这部分代码一般都被人封装起来了,在业务中使用多线程的机会也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 571,266
精华内容 228,506
关键字:

多线程cpu