2017-05-12 25 views
1

性能我具有大的字符数组(614400)和HIGHT性能视频流应用(100FPS,10ms的1帧)。 在1帧我必须修改我的框架,并用于这8个线程。C++在大阵列

什么是更快: 1.访问线程1中的每个元素1, e。 G。线程1(1,2,3,... N) 线程2(N + 1,N + 2,...,N * 2) ...在下一顺序 2.接入元件: 线程1(1,9 ,17 ...) 线程2(2,10,18) ... 什么方式可以更快?现在我有第二个方法:

workers = new std::thread*[workersCount]; 
for (int j = 0; j < workersCount; j++){ 
    workers[j] = new std::thread(&parameterController::extractPart, this, j*2, workersCount*2); 
} 
for (int j = 0; j < workersCount; j++){ 
     workers[j]->join(); 
     delete workers[j]; 
    } 
delete workers; 
+0

我怀疑*测量*会回答你的如果有的话,是什么,更快的问题。 – WhozCraig

+2

你是否为每一帧创建和销毁线程? o.O – nakiya

+0

我知道,这是错误的方式,但现在不知道如何实现这一点。现在我在构造函数中寻找init 8无穷大线程,等待新框架。任何想法,如何捕捉,线程等待新的框架?因为在这之后,我必须用这些数据做更多。 – Nick

回答

1

档案都,看到了差距,这是可以肯定的唯一途径。我倒是猜测具有每个线程产生连续的块将更快,因为预取和缓存友好,但只能测量可以让你一定。

+0

是的,每个线程必须创建一次,同意。你能推荐一些线程吗?这个值与CPU内核相关吗? – Nick

+0

@Nick我说你应该使用GPU为,CPU与许多线程..以及任何超过核心数量会对性能只有负面影响,非服务器CPU都具有形式4到16个核心的GPU ..入手数十个并以数千结束。但在你的情况下,主要的性能影响在创建和销毁线程时完成,而不是在访问指针数组。 – Swift