您的位置:首页 > 编程语言

MIC编程的基本知识

2013-03-22 00:00 239 查看
target: target(mic),mic是唯一合法的值,target指定mic卡,target(mic:1)。
if: 根据条件判断是否将代码段放到device上去执行。
eg. #pragma offload target(mic) if(N>1000) N大于1000时,使用MIC进行计算,否则使用CPU进行计算。
in: 在device开辟空间并将host数据复制到device in(p:length(LEN) alloc_if(1))
out: 在device开辟空间,执行结束后,将数据复制到host out(p:length(LEN))
inout: 在device开辟空间,在进入device时将数据从host复制到device,在从device离开时,数据从device复制到host. inout(p:length(LEN) align(8))
nocopy: 仅建立空间,不复制数据 nocopy(p)
1. 在不同的offload区域使用同一组数据;
2. 当变量作为device中的临时变量时,用来减少数据传输。
signal & wait: 异步传输,host无须等待offload语句返回。signal在offload语句结束后发送一个信号,wait语句负责接受;wait语句可以一次等待多个信号。signal(tag) wait(tag1, tag2)
mandatory: 表示这段代码必须运行在MIC设备上

in/out/inout/nocopy的数据参数:
length: 指定动态数组的元素个数
alloc_if: 布尔型,为真则进入device时为前述变量开辟空间
free_if:布尔型,为真则离开device时为前述变量释放空间
align: 在device开辟的前述变量以align参数的长度对齐
alloc: 创建指定的部分内存空间
into: 将数组从host复制到device的另一个数组。必须一对一传输,不能在不同维度的数组间传递数据

声明
__declspec(target(mic)) function/variable
__attribute__((target(mic))) function/variable
eg. __attribute__((target(mic))) int a;
__attribute__((target(mic))) void func();
声明多个变量和函数:
#pragmaoffload_attribute([push,] target(target-name))
function/variable
#pragma offload_attribute(pop|{target(none)})
eg.
#pragma offload_attribute(push, target(mic))
int a;
float func();
#pragma offload_attribute(pop)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: