我正在写共轭梯度法实现.
我使用Java多线程进行矩阵反向替换.
使用CyclicBarrier,CountDownLatch进行同步.
为什么需要这么多时间来同步线程?
还有其他方法吗?
代码段
private void syncThreads() {
// barrier.await();
try {
barrier.await();
} catch (InterruptedException e) {
} catch (BrokenBarrierException e) {
}
}
解决方法:
总共使用了多少个线程?这可能是你问题的根源.在以下情况下,使用多个线程只能提高性能:
>线程中的每个任务都会进行某种阻塞.例如,等待I / O.在这种情况下使用多个线程可以使其他线程使用阻塞时间.
>或您有多个核心.如果您有4个内核或4个CPU,则可以同时执行4个任务(或4个线程).
听起来你并没有在线程中阻塞,所以我的猜测是你使用的线程太多了.例如,如果您使用10个不同的线程同时执行工作但只有2个核心,则可能比按顺序运行所有任务要慢得多.通常启动线程数等于核心/ CPU数量.每次增加缓慢使用的线程.这将为您提供最佳的线程数.