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

TMS320C6678: 多核程序

Part Number:TMS320C6678

在6678上用NDK进行网络应用,只加载一个核时可以正常收发数据,在其他核加载程序时,就会出现问题,请问这是什么原因

?? ?:

通过ROV查看,结果是这样的

,

Gary Lu:

如果只加载一个核时可以正常收发数据,但在其他核加载程序时出现问题,可能是由于多核之间的资源竞争导致的。

多核处理器上的每个核都有自己的寄存器、缓存和内存空间,当多个核同时访问同一块内存或共享资源时,就会出现资源竞争的问题。在网络应用中,如果多个核同时访问网络接口或共享的缓冲区,就可能会导致数据错乱、丢失或重复发送等问题。

,

?? ?:

您好,能说详细一点吗?我现在是只要加载第二个核的程序,就会出现图里的情况,有时候报错是堆栈溢出stack overflow。

但是如果我先加载处理数据的程序,然后再加载这个网络的核程序,又能正常运行。

,

Gary Lu:

您好

为了解决这个问题,您可以采取以下措施:

1.使用锁或信号量等同步机制来保护共享资源,确保每个核访问共享资源时都是互斥的。

2.将网络应用程序的不同部分分配到不同的核上运行,避免多个核同时访问同一块内存或共享资源。

3.优化网络应用程序的设计,减少对共享资源的访问,尽量避免资源竞争。

4.在设计网络应用程序时,考虑使用分布式系统来实现更好的性能和可伸缩性。

,

Gary Lu:

您好,

1.可能是程序中存在资源竞争问题,导致第二个核加载程序时出现了错误。

2.第二个核加载程序时,占用了过多的内存资源,导致堆栈溢出。这种情况下,您可以优化程序的内存管理,减少内存的使用量,或者增加堆栈大小,以避免堆栈溢出的问题。

3.第二个核加载程序时,与第一个核加载程序之间存在依赖关系,导致程序无法正常运行。

,

?? ?:

我刚才把程序简化了一下,不存在共享资源冲突的情况了,共享区的数据其他核不访问了,但是问题依然存在。

,

Gary Lu:

 如果您已经确认了共享资源冲突不是问题的原因,那么可能是其他原因导致的。以下是一些可能的原因和解决方法:

1. 确认程序是否正确设置了线程的 CPU 亲和性。在多核处理器上,操作系统可能会将线程分配到不同的核心上运行。如果您的程序没有正确设置线程的 CPU 亲和性,可能会导致线程在不同的核心上频繁切换,从而影响程序的性能。

2. 确认程序是否正确使用了同步机制。即使共享资源冲突已经被排除,如果程序中存在多个线程同时访问同一个数据结构的情况,也可能会导致数据不一致或其他问题。确保您的程序正确使用了互斥锁、条件变量或其他同步机制,以避免多个线程之间的竞争和冲突。

3. 确认程序是否正确处理了信号。在多核处理器上,可能会出现信号在不同核心上的竞争和处理问题。确保您的程序正确处理了信号,

4. 确认程序是否正确处理了异常。在多核处理器上,可能会出现异常在不同核心上的竞争和处理问题。确保您的程序正确处理了异常

5. 确认程序是否正确使用了内存屏障和原子操作。在多核处理器上,可能会出现缓存一致性问题,导致数据不一致或其他问题。确保您的程序正确使用了内存屏障和原子操作,以确保缓存一致性。

期待您的反馈

,

?? ?:

我早上试了下,八个核同时加载程序,开线程前进行同步,核0和核1加载网络程序,其他核运行计算程序,结果是加载网络程序的核0和和1崩了,其他核能正常运行

,

?? ?:

只在一个核里加载网络程序,其他核全进行计算,跑网络的核也会崩掉

,

Gary Lu:

可能是由于网络程序的负载过重

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 多核程序
分享到: 更多 (0)