I am trying to run a simple hello world program for Open MP on a C6678 core.
I am compiling using CGT7.4.0B2.
I am using the OMP package 1.00.01.05
In the project properties, under C6000 Compiler -> Advanced Options ->Advanced Optimizations , I selected 'Enable Support for OpenMP 3.0.
I receive the following errors and warning:
<Linking>error #10378: non-TLS reference "errno" in "/opt/ti/omp_1_00_01_05_eng/packages/ti/omp/lib/release/ti.omp.ae66<env.oe66 >" mismatches TLS definition in "/opt/ti/C6000CGT7.4.0B2/lib/rts6600_elf_mt.lib<errno.obj>"warning #10247-D: creating output section ".TI.tls" without a SECTIONS specificationwarning #10247-D: creating output section ".TI.tls_init" without a SECTIONS specification
I am unsure what to do to resolve these errors and warnings.
Thanks,
Elaina
Hi Elaina,
Wrt your original question, I was able to recreate the symbol mismatch linking error you are seeing, when I tried your example with the 7.4.0B2 version of the compiler. This symbol mismatch issue will be fixed in the upcoming MCSDK 2.1 beta that Travis mentioned. In the meantime, you can use the following workaround:
1. Right-click on your project and select Properties
2. Go to Build-->C6000 Linker-->File Search Path. Select first the "Debug" configuration from the drop-down menu and in the "Include library file or command file as input" box replace "libc.a" with "rts6600_elf.lib" as indicated in the snapshot below:
3. Repeat #2 for the "Release" configuration.
4. Clean Project and Build Project
- Uday
--- If you need more help, please reply. If this answers your question, please Verify Answer below this post ---
The fix worked and I can now compile the program (using all 8 cores) without any errors. However, I am now trying to run it on the TMDXEVM6678LE, and I am getting an error related to Heap Memory.
-I launch the target configuration file (Texas Instruments XDS100v1 USB Emulator), with the TMS320C6678 selected.
-I group all the cores and connect to the group
-I load the program to group. At this point all the cores start running except core 0, so I hit resume.
I receive the following error:
[C66xx_1] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution[C66xx_2] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution[C66xx_3] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution[C66xx_4] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution[C66xx_5] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution[C66xx_6] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution[C66xx_7] ti.sdo.ipc.heaps.HeapMemMP: line 740: E_memory: Out of memory: handle=0x8003e8, size=872546304xdc.runtime.Error.raise: terminating execution
Elaina,
Could you please power cycle your board, start a new debug session in CCS and try the following:
1. Select Core 0 and then go to Tools--> Debugger Options --> Generic Debugger Options as shown in the snapshot below
2. Under 'General Debugger Options' ---> 'Auto Run Options' uncheck the box that says "On a program load or restart," and click "Remember My Settings" at the bottom
3. Repeat steps 1 and 2 for all cores
4. Load the .out file on each of the cores (or you can group them like you were doing earlier)
5. Run the program on all cores
The error remains the same.
I inserted some print statements to detect where the code was breaking. All print statements before the omp pragma work.
-Elaina
Hi,
Sorry for taking so much time to answer....
I tried to compile your project with version 7.4 B2, but it did not work
<Linking>warning #10366-D: automatic library build: using library "C:\ti3\C6x compiler 7_4_0_B2\lib\rts6600_elf_mt.lib" for the first time, so it must be built. This may take a few minutes."c:/users/admini~1/appdata/local/temp/ti1bf6~1/obj/exp10f.asm", ERROR! : [E1000] Unable to open temp macro library 'C:\Users\ADMINI~1\AppData\Local\Temp\031762': Permission denied
I created another project from helloworld exemple, compiled it with v7.4 B1 (did not work with B2...)
I used :
IPC : v1.24.0.16
PDK for 6678 v1.1.0.1
OpenMP BIOS runtime library1.0.1.05_eng
SYS/BIOS : 6.32.5.54
(XDCtools v3.22.4.46)
I loaded it on all 8 cores, it worked.
Do you use a gel file to initialize your board when you connect it ?
I did not see it in your .ccxml file.
I am using mcsdk_2_01_00_01\tools\program_evm\gel\evmc6678l.gel
Please see the following announcement for access to the beta OpenMP MCSDK release:
http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/b/announcements/archive/2012/06/29/bios-mcsdk-2-1-0-beta-available-for-c66x-dsp-openmp-support.aspx
Regards,
Travis
If you need more help, please reply back. If this answers the question, please click Verify Answer , below.
Hello,
thank you for figuring out a solution. Regarding the statement "This symbol mismatch issue will be fixed in the upcoming MCSDK 2.1 beta that Travis mentioned":
I downloaded MCSDK 2.1 beta today and unfortunately the same issue is still present. I saw the error message of the original post also on my machine. Afer manually replacing libc.a by rts6600_elf.lib as written above, the error message of the original post vanished. Instead the compiler complains about the following:
error #10378: TLS reference "errno" in
"C:\ti\omp_1_01_02_03_beta\packages\ti\omp\lib\debug\ti.omp.ae66<env.oe66>"
mismatches non-TLS definition in
"C:/ti/C6000-Code-Generation-Tools-7.4.0B2/lib/rts6600_elf.lib<errno.obj>"
I tried "rts6600_elf_mt.lib" instead, compilation finished. But I saw the following warnings (which I saw in several posts in the forum allready - and which I also saw during the first automatic compilation of the runtime (or whatever) library after installing the new compiler):
<Linking>
warning #10247-D: creating output section ".TI.tls" without a SECTIONS
specification
warning #10247-D: creating output section ".TI.tls_init" without a SECTIONS
Two topics:
a) The release manager of the beta version might be interested in the fact that libc.a has to be manually replaced in the current release.
b) What do this warnings (which not only I see) mean ?
Thank you.
Best regards,
Roelof Berg
www.berg-solutions.de
Additional information: I don't use the HelloWorld example, instead I use "OpenMP Example - Matrix-vector multiplication - C/C++ Version". Execution of the (with warnings and mt-runtime) compiled version on a C6678 EVM is successful.
By the way: Excellent choice to provide OpenMP on a multicore DSP. TI rocks !
Hi Benoit,
It works now!
The problem was that I was not using a gel file to initialize the board. I followed the instructions in the following post, and everything worked:
http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/199072.aspx