This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6678: 多核程序

Part Number: TMS320C6678

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

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

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

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

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

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

  • 您好

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

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

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

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

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

  • 您好,

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

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

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

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

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

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

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

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

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

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

    期待您的反馈

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

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

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