Enhance recurrent layer performance
Created by: perchbird
paddle 中的 RecurrentLayer 通过调用 mkl library 里的 cblas_sgemm 对每个time state进行计算,而cblas_sgemm 这个函数内部在调用 compute 进行计算之前会先使用pack操作将数据转换为适合mkl engine的packed格式。在RNN的case下,同一次forward过程中所有time state共享同一个weight,没有必要在每次compute前对weight进行重复的pack操作。因此,intel 的优化方案是通过调用mkl library 里cblas_sgemm内部的函数,在计算前先完成一次对weight的pack操作,然后每个time state在计算时复用同一个已pack过后的weight,而无须重复进行相对耗时的pack操作。
在merge时,可以选择直接在原有的RecurrentLayer上做修改,也可以重新新建一个作为MKLDNNLayer。但由于并没有使用mkldnn library,名字上有些不合适。请问哪一种方案比较好?