账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    LongAdder快的原因?
    58
    0
    [累加器](https://www.freesion.com/arti...)的速度快我用AtomicLong子类模仿累加器,但是速度不行,请问我的代码比累加器差距在哪?我先定义一个子类,用于生成超过缓存行长度的大对象。(其实我也不清楚2个这种对象是否会发生伪共享?就算不子类化,速度也还是差不多)@sun.misc.Contendedpublic class MyAtomicLong extends AtomicLong { private static final long serialVersionUID = 1L; public MyAtomicLong(int initialValue) { super(initialValue); }}然后采用4个线程,每个线程对一个AtomicInteger对象累加public static void main(String[] args) { long start = System.nanoTime(); MyAtomicLong a = new MyAtomicLong(0); MyAtomicLong b = new MyAtomicLong(0); MyAtomicLong c = new MyAtomicLong(0); MyAtomicLong d = new MyAtomicLong(0); ArrayList<Thread> list = new ArrayList<Thread>(); for (int i = 0; i < 4; i++) { int index = i; list.add(new Thread(new Runnable() { @Override public void run() { for (int j = 0; j < 50_0000; j++) { switch (index) { case 0: a.incrementAndGet(); break; case 1: b.incrementAndGet(); break; case 2: c.incrementAndGet(); break; case 3: d.incrementAndGet(); break; default: break; } } } })); } list.forEach(Thread::start); list.forEach(t -> { try { t.join(); } catch (InterruptedException e) { System.out.println(e); } }); Long result = a.get() + b.get() + c.get() + d.get(); System.out.println( (System.nanoTime()-start)/1000_000 + " -- " + result); }为啥这代码需要100+毫秒,而累加器只要个位数?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 本仙女不需要爱情 普通会员 1楼

      LongAdder(长加器)是一种计算机硬件,通常用于数据加法运算。以下是可能导致LongAdder快的原因:

      1. 内存:LongAdder运算通常涉及到多个加法操作和输入/输出(I/O)操作,因此需要大量的内存。如果LongAdder内部的缓存(如堆栈或寄存器)大小不足,可能会导致频繁的I/O操作,这将消耗大量的内存资源,影响运算速度。

      2. 时钟频率:LongAdder的运算速度受到其时钟频率的影响。时钟频率越高,运算器的运行速度越快,因此如果LongAdder的时钟频率较低,可能需要更大的内存和更高的时钟频率以保持运算速度。

      3. 算法优化:优化算法是提高LongAdder运算速度的重要手段。常见的优化算法包括并行计算、动态规划、分治算法等。通过优化算法,可以减少计算的重复性,提高运算效率。例如,对于多线程的并行计算,可以使用多核CPU或分布式系统来实现。对于动态规划,可以通过使用递归或迭代来避免重复计算,从而提高运算速度。

      4. 电路设计:LongAdder的电路设计也是影响其运算速度的重要因素。设计时需要考虑到运算器的精度、并行性、同步性和寄存器布局等因素,以确保在高精度和低时钟频率下仍能高效运行。

      5. 信号完整性:信号完整性是保证数据传输正确性和稳定性的关键。如果LongAdder在传输过程中受到干扰,可能会导致数据失真或丢失,从而影响运算结果。因此,需要通过设计和优化电路,确保信号的完整性。

      6. 硬件功耗:长Adder的功耗也是一个影响其运算速度的因素。如果长Adder在运算过程中消耗大量的电力,可能会影响其运行时间。因此,需要选择合适的电源设计和散热方案,以确保长Adder在高效运行的同时,能有效降低功耗。

      综上所述,LongAdder快的原因包括内存不足、时钟频率低、算法优化、电路设计、信号完整性和硬件功耗等多个方面。通过合理的硬件设计和软件优化,可以有效地提高LongAdder的运算速度和效率。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部