TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678多核心执行時間的问题

在8个核心上执行相同的演算法,并且8个核心所输入的Input data也都是相同的,計算出來的結果也是正確的,但目前遇到一个问题。

当演算法执行完,core 0 ~ core 4 的运算时间都相当接近,约3.7秒。

core 5 ~ core7 的运算时间也都相当接近,约 10.8秒。

问题来了,相同的演算法,相同的Input data,为什么执行时间会差距这么大呢?core 5 ~ core 7是哪里出问题了?

或是在設定上什麼問題?

Allen35065:

理论上不应该有区别;不存在有任何设定会导致这种问题。

因为没有代码流程,很难确定具体问题,如果算法完全一样,可能和内存的读写有关。

Che-Cheng Hu:

回复 Allen35065:

经过测试后,发现是动态记忆体造成的。

为了简化问题,故测试的程式如下。

for (i = 0; i < (375×12288); ++i)

        {para[i] += 1;}

当para动态配置3MB时(Case1),执行时间是正常的。

当para动态配置48MB时(Case2),Core5 ~ Core7执行时间就有问题了。

                                     *para = (U16*)Memory_alloc(0, size1, 16, NULL);  //3MB (Case1)

                                     *para = (U16*)Memory_alloc(0, size2, 16, NULL);  //48MB (Case2)

Core-0

Core-1

Core-2

Core-3

Core-4

Core-5

Core-6

Core-7

Case1 (ms)

25.21

25.16

25.21

25.15

25.22

25.24

25.23

25.24

Case2 (ms)

27.18

27.13

27.11

27.11

27.2

736.61

969.39

972.07

当Case2的动态配置改为静态时(Case3),执行时间就正常了

                                      *para = (U16*)0x95400000;

Core-0

Core-1

Core-2

Core-3

Core-4

Core-5

Core-6

Core-7

Case3 (ms)

25.22

25.13

25.21

25.23

25.13

25.21

25.24

25.23

最后,把演算法中48MB的动态记忆体配置也改为静态,执行时间就正常了。

Core-0

Core-1

Core-2

Core-3

Core-4

Core-5

Core-6

Core-7

Median filter (s)

3.27

3.29

3.29

3.29

3.29

3.29

3.28

3.28

所以现在有一个疑问,为何动态记忆体配置会造成这种问题,如Case2的数据?

Allen35065:

回复 Che-Cheng Hu:

有两种可能

一种是DDR3的访问是分bank和page操作的,可能在动态分配的时候分配的位置落在了同一个bank内,导致DDR3要不停的切换page导致开销增大;

另一种是动态分配的内存正好对应cache的同一位置,导致cache不停的写入写出,你可以把动态分配的地址打印出来做一些分析。

Che-Cheng Hu:

回复 Allen35065:

我想这应该是真正的原因了

动态记忆体配置的区块,cores 5/6/7刚好被分在number 192

而number 192的cacheable預設是被設為false,也就是这个区块的记忆体是不能进行cache的动作

当我改为true之后,一切都正常了

Che-Cheng Hu:

回复 Allen35065:

我想这是真正地原因了

动态记忆体配置的区块,在分给cores 5/6/7时,是在number 192(如下图)

而number 192的cacheable的预设值是false,也就是不能进行cache的动作

当我把number 192的cacheable设为true之后,执行就正常了

comeback:

回复 Che-Cheng Hu:

Che-Cheng Hu,你好!

请问你上面的有关MARs的窗口是从哪里打开的?

赞(0)
未经允许不得转载:TI中文支持网 » C6678多核心执行時間的问题
分享到: 更多 (0)