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.

关于6678 openmp的几个问题



大家好,

最近在学习6678上的omp库,遇到几个疑问,如下

1. 我注意到,带openmp的程序代码段都是放在msmc里的,当多个核都进入到并行域时,都是在msmc的同一个地址执行代码的,我想问1》这样多个核同时从msmc读取代码不会出现竞争导致出错吗?

2.在core0执行到main()处之前,所有的核都会执行openmp.c中的openMP_masterTask函数,在这个函数的最后,从核都会调用一个spawTask函数然后阻塞在pop消息的地方,我想这里从核应该是在等待core0发送任务过来。而core0应该是只有在运行到并行域入口的地方才会向从核派发任务的。随后主核会跳转到main执行main函数,而从核并不执行main(),当core0在执行main的时候,从debugger中暂停从核看到从核的状态是在一个未定义的地址上。

所以我想问2》openMP_masterTask是由谁调用的?

                     3》core0是如何跳转到main处的?

                     4》从核在未定义地址的这个状态是不是就是阻塞在pop的状态?

                     5》各个核具体是在哪个地方调用bios_start的?是封装在哪里被调用了?

谢谢大家!!

  • 1 不会出错,硬件总线管理单元会解决数据读写竞争问题;

    2 openMP_masterTask是一个后台的任务,只要在cfg中配置使用opemMP module就会自动加到后台任务;

    程序在加载完之后都会先执行到c_int00中,在c_int00中会调用main。

    bios_start是在openMP中被调用,使用openMP的时候bios_start不需要软件中调用.

    https://e2e.ti.com/support/development_tools/compiler/int-compiler/f/85/t/258178