关于offload中nocopy时的误区
2015-09-24 22:49
495 查看
在使用Intel的MIC卡的过程中,最根本的一个工具就是offload,通过offload,可以轻松的让代码跑在MIC上,这当然会涉及一个问题:CPU端的数据如何加载到MIC的内存中的?
offload的内存管理是通过哈希表来实现,CPU端的数据基地址作为哈希表的key关联MIC的内存,从而实现MIC端的内存的动态开辟(alloc_if(1)free_if(0))。
我们可能会遇到一种情况:只有在MIC端在用到某组数据,这是nocopy就是个很好的工具。但是大家千万不要用未初始化的指针去offload。
例1.
大家尝试下,可以发下,在MIC端打印出来的ptr1和ptr2的地址是一样的!一样的!一样的!如果不注意这一点的话,用起来就只有是哭的份了,得不到正确的结果。
为了规避这个问题,就需要我们自己在MIC端手动开辟内存来用了。在退出MIC时,再释放掉就可以了。具体方法如下:
伪代码:
参考来源:
【1】https://software.intel.com/en-us/blogs/2013/03/27/behind-the-scenes-offload-memory-management-on-the-intel-xeon-phi-coprocessor
offload的内存管理是通过哈希表来实现,CPU端的数据基地址作为哈希表的key关联MIC的内存,从而实现MIC端的内存的动态开辟(alloc_if(1)free_if(0))。
我们可能会遇到一种情况:只有在MIC端在用到某组数据,这是nocopy就是个很好的工具。但是大家千万不要用未初始化的指针去offload。
例1.
unsigned int *ptr1, *ptr2; #pragma offload target(mic)\ nocopy(ptr1:length(len1), alloc_if(1)free_if(0))\ nocopy(ptr2:length(len2), alloc_if(1)free_if(0)) { printf("pointer 1 address = %x\n", ptr1); printf("pointer 2 address = %x\n", ptr2); }
大家尝试下,可以发下,在MIC端打印出来的ptr1和ptr2的地址是一样的!一样的!一样的!如果不注意这一点的话,用起来就只有是哭的份了,得不到正确的结果。
为了规避这个问题,就需要我们自己在MIC端手动开辟内存来用了。在退出MIC时,再释放掉就可以了。具体方法如下:
unsigned int *ptr1, *ptr2; #pragma offload target(mic)\ nocopy(ptr1:length(0), alloc_if(1)free_if(0))\ nocopy(ptr2:length(0), alloc_if(1)free_if(0)) { ptr1 = new unsigned int [len1]; ptr2 = new unsigned int [len2]; }
伪代码:
void main() { unsigned int *ptr1, *ptr2; printf("In CPU pointer 1 address = %x\n", ptr1); printf("In CPU pointer 2 address = %x\n", ptr2); #pragma offload target(mic)\ nocopy(ptr1:length(0), alloc_if(1)free_if(0))\ nocopy(ptr2:length(0), alloc_if(1)free_if(0)) { printf("Before malloc memmory ,in MIC pointer 1 address = %x\n", ptr1); ptr1 = new unsigned int [len1]; ptr2 = new unsigned int [len2]; printf("After malloc memmory ,in MIC pointer 1 address = %x\n", ptr1); printf("After malloc memmory ,in MIC pointer 2 address = %x\n", ptr2); } // MIC端程序结束时,释放内存 #pragma offload target(mic)\ nocopy(ptr1,ptr2) { delete []ptr1; delete []ptr2; } }
参考来源:
【1】https://software.intel.com/en-us/blogs/2013/03/27/behind-the-scenes-offload-memory-management-on-the-intel-xeon-phi-coprocessor
相关文章推荐
- CPU也有远程攻击漏洞 英特尔匆匆修补
- 对L2和B2的阐述
- U盘启动CDlinux,U盘启动BT5,关键命令!原创!新加图文教程。新加0.971版制作方法。
- U盘启动CDlinux,U盘启动BT5,关键命令!原创!新加图文教程。新加0.971版制作方法。
- AMD CEO罗瑞德称将调整战略 应对市场变化
- Intel超线程技术有多少种?
- 英特尔Nehalem微架构三级缓存原理学习
- 英特尔与数字标牌
- 红帽新RHEL 7.1企业版发布
- 英特尔酷睿2家族命名规则
- 英特尔发布新产品Nehalem
- 直击CES 2015:英特尔“变酷”进行时
- 摩尔定理
- 平衡架构 惠普BL460 G7刀片服务器评测
- 苹果公司推出新款iMac产品
- 了解TOP500、Green500、Graph500的最新世界排名、看看哪些超级计算机是来自中国
- 视频:Chromebook简评 基于ARM芯片性价比高
- 给IT界增添一抹幽默
- 无人驾驶不是梦?CES上海大会探讨未来(转自太平洋电脑网)
- 解读英特尔高性能基因