我有以下C ++代码,
和complexCorrelationLoop如下:
void complexMath::complexCorrelationLoop(fftw_complex *in_1, fftw_complex *in_2, fftw_complex *out, int N, int k1, int k2) {
for(int k=k1; k<k2; k++) {
complexMath::complexCorrelation(in_1, in_2, out, N, k);
}
}
with complexCorrelation:
void complexMath::complexCorrelation(fftw_complex *in_1, fftw_complex *in_2, fftw_complex *out, int N, int k) {
fftw_complex *inConj = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N);
fftw_complex *mulOut = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*N);
for(int m=0; m<N; m++){
complexMath::complexConjugate(in_1, inConj, m);
complexMath::complexScalarMultiplication(inConj, in_2, mulOut, m, m+k, m);
out[k][0] += mulOut[m][0];
out[k][1] += mulOut[m][1];
}
fftw_free(inConj); fftw_free(mulOut);
}
complexConjugate和complexScalarMultiplication正是它们的名称。现在,我在main()中有以下代码:
boost::thread thread1(boost::bind(&complexMath::complexCorrelationLoop, &cM, in_1, in_1, out_1, nfft, 0, 101));
boost::thread thread2(boost::bind(&complexMath::complexCorrelationLoop, &cM, in_1, in_1, out_1, nfft, 101, 201));
和
cM.complexCorrelationLoop(in_1, in_1, out_2, nfft, 0, 200);
我想要做的是使complexCorrelationLoop并行,以便它运行得更快。因为我需要它来使计算真的很快,在我的例子中这里是1.000.000,所以循环实际上是一种巨大的,200 * 1.000.000等。但是200循环的单循环比运行快4倍2个单独的线程,每个线程包含100个循环。这可能是因为创建和加入线程实际上是昂贵的。
所以我想做的是以某种方式,让这个过程更快。除了线程之外我没有任何其他想法,而且在我的情况下它显然不起作用。我已经阅读了有关线程池的内容,但我不确定如何将其实现到我的案例中。有没有人有任何建议或者某些链接可供我进一步阅读?
提前致谢。