程序执行几乎与CPU和GPU相同?

时间:2012-03-23 11:07:48

标签: cpu opencl gpu parallel-processing

使用OpenCL 1.1查找素数的program给出了以下基准:

设备: CPU

实时:约3秒 使用时间:约。 32秒

设备: GPU

实时 - 约。 37秒 使用时间 - 约。 32秒

为什么GPU的执行时间不小于CPU的执行时间?数据/任务并行化是否未发生?

系统规格:64位CentOS 5.3系统,配备两个ATI Radeon 5970显卡+ Intel Core i7处理器(12个核心)

1 个答案:

答案 0 :(得分:1)

你的内核效率很低,我有一个调整后的内容供你考虑。至于为什么它在cpu设备上运行得更好......

  1. 使用您的算法,工作项需要不同的时间来执行。随着测试数量的增加,它们将花费更长的时间。在完成所有项目之前,gpu上的工作组将无法完成某些硬件将在最后一项完成之前保持空闲状态。在cpu上,它的行为更像是在内核项上迭代的循环,因此计算每个项所需的周期差异不会对性能产生很大影响。
  2. 内核不使用'A'。除非使用它,否则不应复制。看起来你想测试A [i]而不是'i'本身。
  3. 我认为在基于FFT的素数计算甚至筛选算法中,gpu会好得多。

    {
        int t;
        int i = get_global_id(0);
        int end = sqrt(i);
    
        if(i%2){
            B[i] = 0;
        }else{
            B[i] = 1; //assuming only that it should be non-zero
        }
        for ( t = 3; (t<=end)&&(B[i] > 0) ; t+=2 ) {
            if ( i % t == 0 ) {
                B[ i ] = 0;
            }
        }
    }