如何为巨大的for循环

时间:2017-01-03 20:21:23

标签: c++ multithreading gpu

我的源代码如下:

int func_1(int a)
{
    /*
        do something
    */
}
int func_2(int b)
{
    /*
        do something
    */
}
int main(){
    N=1000000000000;
    std::vector<int> v;
    for (int i = 0; i< N; i++)
    {
        int value_1;
        value_1 = func_1(i);
        value_2 = func_2(value_1);
        v.push_back(value_2);
    }
}

由于巨大的N,这很慢,所以我使用多线程方法将它们加速到下面,只需将它们分成几个部分并同时运行它们。

void func_3(int s,int e)
{

    for (int i = s; i< e; i++)
    {
        int value_1;
        value_1 = func_1(i);
        value_2 = func_2(value_1);
        v.push_back(value_2);
    }

}
int main()
{
    int Thread_num=12;
    int firstone=0;
    int N = 1000000000000;
    int chunk = (N-firstone+(Thread_num-1))/Thread_num;
    std::thread t[Thread_num];         
    for(int i=0;i<Thread_num;i++)
    {
      int s =firstone+i*chunk;
      int e = (s+chunk) < N ? (s+chunk) : N;

      t[i]=std::thread(func_3,s,e);          
    }
    for (int i = 0; i < Thread_num; ++i)
    {
      t[i].join();
    }
}

它们可以加速5次,但仍然不够快。 所以我想知道我可以使用GPU加速来加速它们,openCL,CUDA或其他更适合这种情况的东西吗?我是关于GPU的新手,并没有太多的C ++示例。有没有人有这种经历?就像如何将相同的任务分配给GPU的核心一样。 感谢任何帮助。

0 个答案:

没有答案