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.

NDK and OpenMP

Other Parts Discussed in Thread: SYSBIOS

Hi everyone,

I've managed to write a program to transfer a file (to be processed) from PC to an EVMC6678L, using tftp (NtTftpRecv) and do my image processing on a single core. This program is based on the example client_evmc6678l that use NDK. It uses a task, called StackTest, initialized all variables for ethernet (e.g. telnet, http, dhcpc etc.). At the event when a new IP address is assigned, the file transfer will begin and right after that my image processing will start. So, basically my program is in a task that I create dynamically when a new IP address is assigned.

Now, I want to do the image processing in parallel, using OpenMP. It has been tested on desktop using Visual Studio 2008 but this is not the issue.

I also have tried to run the Hello World for the OpenMP for this board.

From a thread, I've been told that the Hello World example run in main() due to the ti.sysbios.BIOS.start has been called as last function of XDC runtime startup during boot. So, for my second program, I started with the Hello World example, porting my first program in it. I create the tasks (the same task, StackTest and my dynamic task to perform the file transfer).

The problem is about the .cfg file. I'm not sure whether what I've done is correct. I tried a lot of combination between the two examples (client_evmc6678l and the Hello World OpenMP) but i make sure that the ti.sysbios.BIOS.start is called as a last function. I end up combining the two .cfg from the two examples. My .out is generated, but I received a lot of warnings (around 700).

Here I attached my project. I hope someone can point me to the right direction. I just want to do the file transfer using the task (so that everytime a new connection/IP is assigned, the data transfer will start), and then in main(), my OpenMP-based code will process the data from the file.

8306.Parallelclient.zip

Kind regards,

Rizuan 

  • RIZUAN,

    I don't know the specifics of you app but I think that maybe you have to carefully place your data in the right memory segments.

    Some questions would be.  Are you building a single executable for all cores or multiple executables?  If multiples, are you making sure your memory map don't collide?

    I found another post speaking a bit to what I'm trying to describe:  http://e2e.ti.com/support/development_tools/compiler/f/343/t/210646.aspx

    Judah

  • Hi Judah,

    Thanks for your reply and sorry for the late response. You are right. Actually, the project that I attached was based on the client_evmc6678l example. One of TI's staff suggest to use the image_processing_openmp_evmc6678l. He was right. I'm now able do the data transfer through tftp and after that I can run a simple Hello World code from each core (eventhough I only can display Hello World from only core0, I believe because in the example, the other cores (1-7) is not connected to the CCS but it is available for OpenMP).

    Now, I need to do the OpenMP programming. My plan is to use the Single Program Multiple Data (SPMD). But before that, I need to understand memory stack, shared, private etc in OpenMP. I've opened a thread and I hope you can spend your time answering my question and hopefully it can be useful for others since the complete documentation about the memory region in OpenMP is not available yet (according from a thread that I don't remember).

    Thanks Judah,

    Rizuan