Hi Guys,
I want to parallelize a FFT using openMP , but programming DSP is new for me . This is my approach :
- In Configuration File :
- define a Shared Memory for all Cores to put Input Data
- define a private Data Memory for each Cores
- use Timer module to retrieve the fft execution Time
to realize this first Step , I use the config File from openMP Example Hello Word , and modified 3 Entry (see. red line): This is the configuration File :
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
// Configure HeapOMP for the shared memory heap
// HeapOMP created in ti/omp/common.cfg.xs
var HeapOMP = xdc.useModule('ti.omp.utils.HeapOMP');
var Timestamp = xdc.useModule('xdc.runtime.Timestamp');
HeapOMP.sharedRegionId = 2;
HeapOMP.localHeapSize = 0x20000;
HeapOMP.sharedHeapSize = 0x1000000;
// Specify the Shared Region
SharedRegion.setEntryMeta( HeapOMP.sharedRegionId,
{ base: 0x90000000,
len: HeapOMP.sharedHeapSize,
ownerProcId: 0,
cacheEnable: true,
createHeap: true,
isValid: true,
name: "heapomp",
}
);
/* load the common configuration file */
xdc.loadCapsule('ti/omp/common.cfg.xs');
var System = xdc.useModule('xdc.runtime.System');
System.extendedFormats = "%$S";
var OpenMP = xdc.useModule('ti.omp.utils.OpenMP');
OpenMP.setNumProcessors(4);
Program.sectMap["InputBuffer"] = new Program.SectionSpec();
Program.sectMap["InputBuffer"].loadSegment = "DDR3";
Program.sectMap[".threadprivateBuffer"] = new Program.SectionSpec();
Program.sectMap[".threadprivateBuffer"].loadSegment = "L2SRAM";
// Enable Cache Write-back for HEAPOMP
var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
Cache.setMarMeta(0x80000000, 0x20000000, Cache.PC | Cache.WTE)
2. In C Programm
- Init the Input data ( how I can store this Input data in my InputBuffer defined section )?
- read a part for Input data and store in threadprivateBuffer for each Core
- start parallel region (openMP)
- compute FFT
- End parallel region
can somebody please help me to resolve this problem ?
Thank you for reply
Lopez