我的源代码如下:
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的核心一样。 感谢任何帮助。