代码之家  ›  专栏  ›  技术社区  ›  Danijel

将Python/Matlab移植到C和定点DSP处理器上-C也应该是定点的吗?

  •  0
  • Danijel  · 技术社区  · 5 年前

    我有一个Python/Matlab代码,可以进行密集的神经网络计算。这个Python/Matlab代码将最终移植到几个目标(定点)DSP处理器平台(ARM、Tensillica等)。作为中间步骤,Python/Matlab代码应该首先移植到x86平台上的C中,从而成为“引用”代码的sorf。

    问题是,这个C代码应该用普通浮点写,还是, 它是否为将来的DSP端口带来了任何好处,可以在x86上以定点方式立即编写它 ?

    0 回复  |  直到 5 年前
        1
  •  1
  •   fstop_22    5 年前

    我绝对建议你现在用定点实现算法。我使用了一个工具来测试针对Python浮点引用实现的定点实现 ctypes 从Python代码中直接调用C函数进行直接比较。

    例如,要使用ctypes,必须将定点C函数编译为共享对象

    gcc -shared -std-gnu11 -g -o $(BIN_DIR)/libfm.so src/fxpt_atan2.c
    

    然后在Python文件中

    import scipy as sp
    import ctypes as ct
    
    # Bind functions in shared object so they can be called in Python.
    fm = ct.CDLL('../build/x86/bin/libfm.so')
    
    # Create floating point reference.
    N = 1024
    n = sp.arange(N)
    x = sp.exp(2*sp.pi*1j*n/N)
    phi = sp.arctan2(sp.imag(x), sp.real(x))
    
    # Quantize input and process with fixed-point implementation.
    x_q, scale = quantize(x, normalize='pow2')
    phi_q = sp.zeros(len(x), dtype=sp.int16)
    for n in range(len(x)):
        # Call ctypes bound function from shared object.
        x_re_q = ct.c_int16(int(sp.real(x_q[n])))
        x_im_q = ct.c_int16(int(sp.imag(x_q[n])))
        phi_q[n] = fm.fxpt_atan2(x_im_q, x_re_q)
    
    # Compare floating point reference and fixed-point implementation.
    print(sp.allclose(phi, phi_q/scale*sp.pi, rtol=1e-3))
    
        2
  •  1
  •   yhyrcanus    5 年前

    如果你有时间并且你的算法允许的话,现在就在固定的时间点做。在跨平台进行比较时,您将能够得到精确性和性能方面的比较。

    我也会考虑降低你的比特率,无论你的最终平台是什么。所以如果你要使用16位ADC等,我会让你的函数接受16位整数。如果这是未知的,那么它可能是最好的坚持32。

    请注意,您可能能够将大部分C代码直接复制到最终平台。所以现在把时间放进去是有意义的(如果你的时间表允许的话)。

        3
  •  1
  •   Johned    5 年前

    我不知道你的动态范围要求,但如果32位定点不够,我同意所有的建议,直接去。 另外,fstop_22推荐的ctype也非常好。 Q Format 如果可能的话。问题8.24总是一个很好的起点,因为它给你的数字增长空间。

        4
  •  0
  •   alrevuelta Morfildur    5 年前

    我不知道您使用的是哪种类型的Matlab/Python库,但它们很可能支持某种定点配置。例如,tensorflow通过 quantize fixed point training 这是一种在训练阶段考虑到的技术,稍后您将使用定点表示。有一些关于那的文件。

    stochastic rounding 可能也是一个有用的概念。