关于3.14与3.0.35内核memcpy问题

cancel
Showing results for 
Search instead for 
Did you mean: 

关于3.14与3.0.35内核memcpy问题

690 Views
tukenan
Contributor II

3.14做一次720*576*1.5memcpy时间是7ms . 

3.035做同样的cpy时间是4ms.       

这是什么问题?我做ipu转换时候,需要反复memcpy几次,结果换了3.14的内核以后,同样的代码,掉帧掉的很厉害。

Labels (1)
8 Replies

102 Views
JayTu
NXP Employee
NXP Employee

You can check if it used neon memcpy on 3.0.35.

0 Kudos

102 Views
tukenan
Contributor II

3.14上有neon的支持。现在是3.14的莫名其妙的比3.0.35的慢。我还搞了一下DMA的m2m方式,发现比memcpy还慢。

0 Kudos

102 Views
JayTu
NXP Employee
NXP Employee

Is memory configuration (i.e., cacheable) the same between two kernel?

102 Views
tukenan
Contributor II

1. 应该是一样的,我同样奇怪就是imx6 dma m2m居然比memcpy还要慢很多。刚才又测试了一下,memcpy在3.14的时候是比3.035慢了很多,跟被copy的那个buff也有关系,我自己深char buf申请的,拷贝的时候就很块,用IPU转换后的那个buff 去拷贝 ,时间就很长~~~。  

2.我是这么做一个东西的, 用V4L2采集 nv12的图像,然后拷贝到 ipu模块进行RGB转换后,再把数据拷贝到一个识别库里做识别,识别后的图像,再拷贝到IPU模块做NV12转换,然后再拷贝到VPU 进行压缩传输。。。30帧的摄像头,一秒只有18帧了。。  有没有什么好的方案,这方面经验不足,谢谢你。   

0 Kudos

102 Views
JayTu
NXP Employee
NXP Employee

dma沒有一定要比較快阿,只是說搬資料時,CPU不用介入。

我覺得目前有兩個方向,一個是去追memcpy在3.14跟3.0.35有什麼差異,你可以比對一下memcpy.S

IPU用的memory應該都是dma allocate來的,那是non-cacheable的

另外一個方向就是去減少做memcpy的次數:

如果你要做辨識,你可以直接mmap一塊memory,讓IPU直接做完RGB以後就放到那塊memory裡,那一塊memory也可以直接拿去做NV12, VPU encode,這樣就可以減少memcpy的次數。

102 Views
tukenan
Contributor II

哈喽,你好,过去四天了,我的问题基本解决了,不过用的另外一种方式。据我了解,IPU的BUFF,是用的内部DMA申请到的,可能是没看高速缓存,所以用memcpy去把这个buff拷出去就很慢,我也试了不拷贝,直接去处理,我发现让我处理的时间增加了。。我用到的办法是,把IPU转换、图像识别等都放到图像识别的线程里,而且我开了2个线程去识别,这样交错起来,刚刚好,效果还不错。谢谢你给的建议。 还有个,3.14会出现  System is too hot. GPU3D will work at 1/64 clock。。温度很高。。是Imx6特有的性质吗?

0 Kudos

102 Views
frank_zhang
NXP Employee
NXP Employee

Hi 

    当芯片内部的温度传感器检测到温度超过设定的阈值(可见thermal驱动,也可在用户空间设定这个值)后,会通知到GPU驱动中,当GPU驱动定义了gcdENABLE_FSCALE_VAL_ADJUST,会触发GPU的降频操作,具体降频到多少分之一,也可以再在驱动代码里配置。

Best Regards,

Frank

0 Kudos

102 Views
tukenan
Contributor II

hi,

  这个我参考一下,可以设置。主要是温度确实比较高了,我要是不降频,肯定要烧了。想看看根本问题,我现在是加了散热片的,情况好点了

0 Kudos