【MIC学习笔记】HelloWorld什么是MIC
以下摘自”MIC高性能编程指南”
通常提及MIC系列, 会提及以下几个名词: MIC(Many Integrated Core), Knights系列(如Knights Corner. 提到具体KNx的架构, 与MIC架构相比, 可以看做是面向对象中父类与子类的关系, MIC架构是父类, 而KNx则是子类. 运行模式
MIC卡本身自带了一个简化的linux系统, 因此在安装了MIC卡的系统中, MIC既可以和CPU协同工作(使用offload), 也可以独立工作(native模式), 我们这里主要使用的是MIC HelloWorld
为了能够直观的看出我们的程序是在MIC端运行的, 首先介绍一个宏__MIC__, 这个宏只有在MIC上运行时才有效, 在CPU端运行是没有该宏的定义的. MIC__的宏定义, 证明是在MIC端运行的
#ifdef __MIC__
printf("Hello from MIC\n");
#else
printf 【MIC学习笔记】Offload Using a Pragma这种方式对应于我们前面所说的非共享内存模型,这里记录一下它的基本用法
定义MIC使用的函数和变量
如果是局部变量, 那么我们不需要做额外的工作, 如果全局变量或者函数, 要在mic上使用它们, 则需要使用下面的方式声明或者定义 :
__declspec( target (mic)) function-declaration
__declspec( target (mic)) variable-declaration
__attribute is 10
outVar in MIC is 0
inoutVar in MIC is 30
从上面可以看出inVar的值传到了MIC上, 但是在MIC上修改后并没有传回CPU, CPU中outVar 的没有传递到MIC上, 但是MIC上outVar的值却是传回到了CPU上,而inoutVar的值即传递到了MIC,也从MIC上传了回来. 同时我们还可以看到, 先打印的是in CPU, 又打印的in MIC, 这是因为在target端(比如MIC卡)输出时, 因为PCI-E设备(MIC卡是插在PCI-E插槽上的) 无法直接访问显示器, 所以必须经过