主题中讨论的其他器件:MATHLIB、 FFTLIB
工具/软件:
您好团队:
我一直在努力 在 FFTLIB、DSPLIB、MATHLIB 内核上创建包装器、用于在 AM275 EVM 上运行 C7x 优化应用。 我已经遵循了相应库中的测试驱动程序、无法看到处理缓冲区在分配/设置期间显式对齐到 128 字节/64 字节、如下所述。
FFTLIB
例如、在测试驱动程序的源 freertos_sdk_am275x_11_00_00_16/source/fftlib/test/fft7x/FFTLib_fft1d_i32f_c32fc/FFTLib_fft1d_i32f_c32fc_o32fc.c 中、我请参阅
pX = (FFTLIB_F32 *) TI_memalign(128, numPoints * 2 * sizeof(FFTLIB_F32));
还有一条注释:
/* pX is required to be 16-byte aligned for streaming engine use in kernel */
DSPLIB
void *pIn = (void *) TI_memalign(DSPLIB_L2DATA_ALIGNMENT, bufParamsIn.stride_y * bufParamsIn.dim_y);
#define DSPLIB_ALIGN_SHIFT_64BYTES 6 //!< Number of bits to shift for 64-byte memory alignment #define DSPLIB_ALIGN_SHIFT_128BYTES 7 //!< Number of bits to shift for 128-byte memory alignment #define DSPLIB_ALIGN_SHIFT_256BYTES 8 //!< Number of bits to shift for 256-byte memory alignment #define DSPLIB_ALIGN_64BYTES (1 << DSPLIB_ALIGN_SHIFT_64BYTES) //!< Align by 64-byte memory alignment #define DSPLIB_ALIGN_128BYTES (1 << DSPLIB_ALIGN_SHIFT_128BYTES) //!< Align by 128-byte memory alignment #define DSPLIB_ALIGN_256BYTES (1 << DSPLIB_ALIGN_SHIFT_256BYTES) //!< Align by 256-byte memory alignment #define DSPLIB_L2DATA_ALIGN_SHIFT DSPLIB_ALIGN_SHIFT_64BYTES //!< Set the default L2 data alignment /** @brief Macro that specifies the alignment of data buffers in L2 memory for * optimal performance */ #define DSPLIB_L2DATA_ALIGNMENT (((uint32_t) 1) << ((uint32_t) DSPLIB_L2DATA_ALIGN_SHIFT))
MATHLIB
pSrc = (T *) MATHLIB_memalign(MATHLIB_L2DATA_ALIGNMENT, length * sizeof(T));
#define MATHLIB_ALIGN_SHIFT_64BYTES 6 //!< Number of bits to shift for 64-byte memory alignment #define MATHLIB_ALIGN_SHIFT_128BYTES 7 //!< Number of bits to shift for 128-byte memory alignment #define MATHLIB_ALIGN_SHIFT_256BYTES 8 //!< Number of bits to shift for 256-byte memory alignment #define MATHLIB_ALIGN_64BYTES (1 << MATHLIB_ALIGN_SHIFT_64BYTES) //!< Align by 64-byte memory alignment #define MATHLIB_ALIGN_128BYTES (1 << MATHLIB_ALIGN_SHIFT_128BYTES) //!< Align by 128-byte memory alignment #define MATHLIB_ALIGN_256BYTES (1 << MATHLIB_ALIGN_SHIFT_256BYTES) //!< Align by 256-byte memory alignment #define MATHLIB_L2DATA_ALIGN_SHIFT MATHLIB_ALIGN_SHIFT_64BYTES //!< Set the default L2 data alignment /*! @brief Macro that specifies the alignment of data buffers in L2 memory for * optimal performance */ #define MATHLIB_L2DATA_ALIGNMENT (((uint32_t) 1) << ((uint32_t) MATHLIB_L2DATA_ALIGN_SHIFT))
- 如果在测试驱动程序中看到的上述显式对齐是为了高效运行优化内核而处理缓冲区的硬性要求吗? 您能否证实这一点? 如果是、您能否在 FFTLIB、DSPLIB 和 MATHLIB 内核中为它们指定对齐要求?
- 一般平台数据对齐要求是什么? 不是 16 字节? 如果我将常规数据对齐用于传递给 内核的处理缓冲区、是否会在效率上有所折衷?
我在提供的文档中找不到此信息。 如果上述问题得到答复、并在图书馆文件中提供了对上述内容的任何提及、我将不胜感激。
此致、
Sreekanth