User’s Guide: OMP ( OpenMP Runtime for SYS/BIOS ) Users Guide(译)

学习目标:

OMP ( OpenMP Runtime for SYS/BIOS ) Users Guide

学习内容:

目录

1、OMP产品目录结构
2、用CCSv4/5编译OpenMP例子
3、不用CCSv4/5编译OpenMP例子
4、创建一个新的OMP应用
5、SYS/BIOS OMP和Linux OpenMP运行时的不兼容
6、创建一个RTSC平台
“dataMemory”规则
“codeMemory”规则
“stackMemory”规则
通用平台规则
OMP应用的优化
7、运行构建的OMP程序
用CCS IDE 运行
用提供的运行脚本运行
8、重编译“OMP”产品

4、创建一个新的OpenMP应用

你需要使得你的应用是一个RTSC(Real Time Software Components,实时软件组件)。这包括添加一个 .cfg文件,最简短的cfg文件需要有如下内容:
xdc.loadCapsule(‘ti/omp/common.cfg.xs’);
默认地,被OMP应用使用的核数量等于装置上的最多核数(C6670有4个核、C6678有8个核)。但是,核的数量可以重新配置。应用中处理器核数的设置如下:
var OpenMP = xdc.useModule(‘ti.omp.utils.OpenMP’);
OpenMP.setNumProcessors(3); /Only use CORE0,CORE1 and CORE2/
设置程序共享内存堆。设置堆处为可缓存区。
var HeapOMP = xdc.useModule(‘ti.omp.utils.HeapOMP’);
HeapOMP.sharedRegionId = 2;
HeapOMP.localHeapSize = 0x20000;
HeapOMP.sharedHeapSize = 0x1000000;
//Specify the Shared Region
SharedRegion.setEntryMeta( HeapOMP.sharedRegionnId,
{ base: 0x90000000,
len: HeapOMP.sharedHeapSize,
ownerProcId: 0,
createHeap: true,
isValid: true,
name: “HeapOMP”,
}
);
var Cache = xdc.useModule(‘ti.sysbios.family.c66.Cache’);
Cache.setMarMeta(0x80000000,0x20000000, Cache.PC | Cache.WTE);

对于一些可选择的配置有一些默认值
OpenMP.stackRegionId = -1; //Stack region for dynamic tasks
OpenMP.qmssInit = true; //QMSS to be Initialized by OMP
OpenMP.qmssMemRegion = -1; //QMSS Mem region to be used by OMP
OpenMP.qmssStartIndex = 0; //QMSS Start index to be used by OMP
OpenMP.qmssDestQueueNum = -1; //QMSS Destination Queue to be used by OMP
OpenMP.internalOsal = true; //OMP OSAL to be used
OpenMP.cppiHwSem = 3; //if OMP OSAL,CPPI HW Semaphore
OpenMP.qmssHwSem = 4; //if OMP OSAL,QMSS HW Semaphore
OpenMP.autoDnld = true; //Slave cores load and run by Master core
OpenMP.mpaxIndex = 3; //MPAX Index for mapping DDR to MSMC

如果ti/omp不在编译器的头文件路径中,头文件需要使用绝对路径

i.e.
#include “omp.h”
需要改变为
#include<ti/omp/omp.h>

6、创建一个RTSC平台

为了成功编译和执行一个OMP应用程序,RTSC平台必须满足一定的规则。破坏这些规则会造成某个程序能成功编译但在运行时会发生故障。RTSC平台包含配置,被称为‘dataMemory’、‘codeMemory’、‘stackMemory’,它们决定各种链接段放置的位置。

‘dataMemory’规则
1、共享OpenMP状态包含在RTSC平台的“数据内存”部分。尽管缓存一致性不表现在这个状态上,‘dataMemory’必须设置到没有缓存的共享内存部分。
2、在C66x设备上,只要libomp状态位于非缓存共享内存区,L1D就能被设置成非零值。‘dataMemory’可以设置为MSMCSRAM,只要RAM是通过非缓存的MPAX页面访问的。为了允许这个,OMP运行使用在c_init_00函数之前执行的复位函数,并将整个MSMCSRAM(0x0C0 0000)映射到0xA00 0000处的非缓存别名。
(1)C6678平台(ti.omp.examples.platforms.evm6678)包含内存段“MSMCSRAM_NOCACHE”,该内存段放在了非缓存页。
(2)如果‘dataMemory’被设置成一个内存段,该内存段位于物理地址范围MSMCSRAM(0x0C000000),则L1D必须设置成0K,以使该地址范围不可缓存。

‘codeMemory’规则
1、‘codeMemory’包含代码和常数,它应该被设置成缓存共享存储区。L1P缓存应该总是被设置成32K以最大化性能。

‘stackMemory’规则
1、‘stackMemory’包含数据,数据在每个核里面。‘stackMemory’必须设置到一个存储段,在每个核的L2SRAM中。理想情况下,该存储空间也应该设置成缓存区。(即,如果可能,打开L1D缓存)

通常的平台规则
必须确保平台段0xA0000000地址不重叠本地(0x0C000000地址)平台段范围重合。
/* BAD坏的 (overlapping segments) */
[ “MSMCSRAM” , { name: “MSMCSRAM” , base: 0x0C000000 , len: 0x00200000 } ],
[ “MSMCSRAM_NOCACHE” , {name: “MSMCSRAM_NOCACHE” , base: 0xA0100000, len: 0x00300000} ],

/* GOOG (no overlapping segments) */
[ “MSMCSRAM” , {name : “MSMCSRAM” , base: 0x0C000000 , len : 0x00100000 } ],
[ “MSMCSRAM_NOCACHE” , {name: "MSMCSRAM_NOCACHE " , base: 0xA0100000 , len : 0x00300000 }],

优化OMP应用
‘debug’编译配置文件最好被使用在调试OMP应用时,但使用‘release’编译配置文件将产出最好的性能。整个程序[_debug]配置文件是不宜用的,且不再被支持。请查阅IPC USERs Guide和BIOS Users Guide,以优化内存使用进而改善实时性能。

学习时间:

2020/11/27

学习产出:

翻译OpenMP使用指南重要章节:第4章和第6章。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值