英特尔® 至强融核™ 协处理器开发人员快速入门指南

目录

英特尔® 至强融核™ 协处理器开发人员快速入门指南

目录

简介

目标

本文档内容包括:

本文档内容不包括:

术语

系统配置

英特尔® 至强融合™ 软件

英特尔® 集成众核架构概述

管理任务

为您的系统做首次使用准备

安装驱动程序及启动卡的步骤

安装软件开发工具的步骤

更新现有系统

更新已经配置英特尔® 至强融合™ 协处理器的系统

重启以后重新访问英特尔® 至强融合™ 协处理器

进程悬挂时重启英特尔® 至强融合™ 协处理器

监控英特尔® 至强融合™ 协处理器

从主机系统运行某个英特尔® 至强融合™ 协处理器程序

直接配合 uOS 环境英特尔® 至强融合™ 协处理器

有用的管理工具

开始了解/并开发英特尔® 至强融合™ 软件

可用软件开发工具/环境

开发环境:可用的编译器和函数库

开发环境:可用工具

一般开发信息

开发环境设置

文档与抽样代码

构建相关信息

编译器开关和 Makefiles

运行时间中调试

如何获取更多帮助

使用卸载编译器 – 显式内存复制模式

约减示例

创建卸载版本

异步卸载和数据传输

使用卸载编译器 – 隐式内存复制模式

本机编译

英特尔® 至强融合™ 协处理器上的并行编程选项

英特尔® 至强融合™ 协处理器上的并行编程: OpenMP*

英特尔® 至强融合™ 协处理器上的并行编程:OpenMP* + Intel® Cilk™ Plus 扩展阵列符号

英特尔® 至强融合™ 协处理器上的并行编程:英特尔® Cilk™ Plus

英特尔® 至强融合™ 协处理器上的并行编程:英特尔® TBB

英特尔® MKL 使用说明

SGEMM 示例

英特尔® MKL 自动卸载模式

调试英特尔® 至强融核™ 协处理器

英特尔® 至强融核™ 协处理器的性能分析

作者介绍

声明

   

简介

本文档将帮助您快速了解如何在包含基于英特尔® 集成众核架构(英特尔® MIC 架构)的英特尔® 至强融合协处理器的系统主机上编写代码和运行应用。本文档介绍了一些可用工具,并随附几个简单示例以示范如何准备和运行基于 C/C++ 和 Fortran 的程序。现在,开发人员必须将本文档中提供的示例剪切/粘贴到自己的系统中。

如需在线查看本文档可访问http://software.intel.com/mic-developerGetting Started(开始)选项卡下。

目标

本文档内容包括

为您介绍如何安装英特尔® 集成众核架构平台软件堆栈(MPSS)

介绍支持运行英特尔® 至强融合协处理器的软件的构建环境。

示范如何为英特尔® 至强融合协处理器编写代码并使用英特尔® Composer XE 2013 进行构建。

示范如何使用英特尔函数库如英特尔® 数学核心函数库(英特尔® MKL)

为您提供如何调试并配置运行于英特尔® 至强融合™ 协处理器上的程序的相关信息。

分享由英特尔用户开发的最佳方法(BKM)

本文档内容不包括:

详细介绍每个工具。请参考单个工具的用户指南。

提供深度培训。

术语

主机 包含英特尔® 至强融合协处理器、安装于 PCIe* 插槽中的英特尔® 至强® 平台。主机支持的操作系统(OS)包括:Red Hat* Enterprise Linux* 6.0,Red Hat* Enterprise Linux* 6.1,Red Hat* Enterprise Linux* 6.2,Red Hat* Enterprise Linux* 6.3,SUSE* Linux* Enterprise Server SLES 11 SP1 和 SUSE* Linux* Enterprise Server SLES 11 SP2。用户必须安装操作系统(OS)。

目标 英特尔® 至强融合协处理器以及协处理器中安装的相应运行环境。

uOS   微操作系统 基于 Linux*的操作系统和运行于英特尔® 至强融合协处理器的工具。

ISA 指令集架构 计算机架构的一部分和程序相关包括原生数据类型、指令、寄存器、寻址模式、内存架构、中断与例外处理、以及外部 I/O (输入/输出)

VPU 矢量处理单元 CPU 中负责执行 SIMD(单指令、多数据)指令的部件。

NAcc 本机加速 英特尔® MKL 处理数据的一种模式或形式处理数据的 MKL 函数由英特尔® 至强融合协处理器支持。

卸载编译器 英特尔® C/C++ Compiler 和英特尔® Fortran Compiler 编译器可为主机系统和英特尔® 至强融合协处理器生成二进制程序。卸载编译器可生成仅运行于主机或仅运行于英特尔® 至强融合™ 协处理器的二进制程序,或同时运行于主机与英特尔® 至强融合™ 协处理器并相互进行通信的二进制程序。

英特尔® MPSS 英特尔® 众核平台软件堆栈 用户 支持程序运行于英特尔® 至强融合协处理器并与之进行通信的系统级软件。

SCI 系统通信接口 单个平台内的内部节点通信的机制其中一个节点是英特尔® 至强融合协处理器或基于英特尔至强处理器的主机处理器装置。具体地说,SCI 提取 PCIe 总线通信的信息(并控制相关英特尔® 至强融合™ 协处理器硬件)同时提供在所有类型节点之间对称分布的 API。

系统配置

本文档中的配置为包含两个英特尔至强处理器的英特尔工作站一个或两个连接至 PCIe* x16 总线的英特尔® 至强融合协处理器以及一个 GPU 用于图形显示。

英特尔® 至强融合™ 软件


Figure 1: Software Stack

 

英特尔® 至强融合协处理器软件堆栈包含分层的软件架构如下图 1 所示。

驱动程序堆栈

面向英特尔® 至强融合协处理器的 Linux 软件包含众多组件

设备驱动程序内核空间中的软件堆栈的最底部是英特尔® 至强融合协处理器设备驱动程序。设备驱动程序负责管理设备初始化以及主机与目标设备之间的通信。

函数库在用户与系统空间中设备驱动程序的上方是函数库。函数库提供基本的卡管理功能,如系统中卡的列举,缓存管理,以及主机到卡的通信。函数库还提供高级功能,如在英特尔® 至强融合™ 协处理器上加载和卸载可执行程序,调用卡上可执行程序的函数,提供主机与卡之间的双向通知机制。函数库负责缓存管理以及 PCIe* 总线上的通信。

工具各种工具帮助维护软件堆栈。示例包括/opt/intel/mic/bin/micinfo 用于查询系统信息/opt/intel/mic/bin/micflash 用于更新卡的闪存/usr/sbin/micctrl 帮助管理员配置卡等。

OS (uOS)基于 Linux 的操作系统运行于英特尔® 至强融合协处理器上。

注释如需最新版本的 uOS、设备驱动程序、以及低级别 SCI 函数库接口请访问网站http://software.intel.com/mic-developer

英特尔® 集成众核架构概述

英特尔® 至强融合协处理器拥有多达 61 个有序英特尔® MIC 架构的处理器内核运行频率为 1GHz (最高 1.3GHz)。英特尔® MIC 架构基于 x86 ISA,扩展有 64 位寻址和新 512 位宽 SIMD 矢量指令和寄存器。每个内核支持 4 个硬件线程。除了内核,还有多个片上内存控制器和其它组件。

 



Figure 2: Architecture overview of an Intel® MIC Architecture core

 

每个内核包括一个全新设计的矢量处理单元(VPU)。每个矢量单元包含 32 个 512 位矢量寄存器。为支持全新矢量处理模式引入了新 512 位 SIMD ISA。

VPU 是英特尔® MIC 架构内核的关键特性。充分利用这些矢量单元对于获取英特尔® 至强融合™ 协处理器的最佳性能十分关键。务必注意:英特尔® MIC 架构内核不支持其它 SIMD ISA(如:MMX™,英特尔® SSE,或英特尔® AVX)。

每个内核提供一个 32KB L1 数据缓存一个 32KB L1 指令缓存以及一个 512KB L2 缓存。所有内核的 L2 缓存是互联的,并通过一个双向环形总线连接内存控制器,有效创建了一个多达 32MB 的共享式末级缓存。每个内核的设计包含一个简短有序管线。执行标量操作时无延迟,执行矢量操作时低延迟。借助这一简短的有序管线,分支预测错误的开销保持在低位。

如需深入了解设备架构请参考《英特尔® 至强融合 软件开发人员指南》网址http://software.intel.com/mic-developer位于软件开发选项卡下。

管理任务

如需购买某个设备制造商提供的英特尔® 至强融合协处理器请参考英特尔® 开发人员社区页面http://software.intel.com/mic-developer 并点击选项卡工具与下载”,然后选择英特尔® 集成众核架构(英特尔® MIC 架构)平台软件堆栈。该页面支持您下载最新的硬件驱动程序以及平台发行说明(发行说明包含驱动程序和固件安装说明)。

为您的系统做首次使用准备

安装驱动程序及启动卡的步骤

英特尔® 开发人员社区页面(http://software.intel.com/mic-developer)点击选项卡工具与下载”,然后选择英特尔® 集成众核架构(英特尔® MIC 架构) 平台软件堆栈。下载“英特尔® MPSS 发行的自述文件”(readme.txt)。还可以下载发行说明(releaseNotes.txt)。

安装系统时您可以使用 Red Hat* Enterprise Linux 64-bit 6.0 kernel 2.6.32-71Red Hat Enterprise Linux 64-bit 6.1 kernel 2.6.32-131Red Hat Enterprise Linux 6.2 64-bit kernel 2.6.32-220Red Hat Enterprise Linux 6.3 64-bit kernel 2.6.32-279SUSE* Linux Enterprise Server SLES 11 SP1 kernel 2.6.32.12-0.7-default SUSE Linux Enterprise Server SLES 11 SP2 kernel 3.0.13-0.27-default (自述文件 readme.txt 中的第 4.1-4.2 )。请务必安装 ssh,它将用于登陆至卡的 uOS。

警告安装 Red Hat 可能自动更新至新版本的 Linux 内核。如果发生这种情况,您将无法使用预建的主机驱动程序,必须针对新内核版本重新手动构建。请参考自述文件 readme.txt 的第 10 节内容以了解如何针对特定的 Linux 内核构建英特尔® MPSS 主机驱动程序的说明。

root 身份登录。

下载与您的操作系统相匹配的发行驱动程序 1        (KNC_gold-2.1.4346-xx-rhel-6.0.tgz, KNC_gold-2.1.4346-xx-rhel-6.1.tgz, KNC_gold-2.1.4346-xx-rhel-6.2.tgz, KNC_gold-2.1.4346-xx-rhel-6.3.tgz, KNC_gold-2.1.4346-xx-suse-11.1.tgz or KNC_gold-2.1.4346-xx-suse-11.2.tgz)

按照自述文件 readme.txt 中第 5 节的说明安装主机驱动程序 RPM。请务必为您的协处理器创建配置文件。

按照自述文件 readme.txt 中第 5.1.7 节的说明更新您的协处理器的闪存。

7. 重启系统。

启动英特尔® 至强融合协处理器(您可以手动设置由卡启动主机系统不过这不是默认设置)然后运行micinfo以检验设置是否正确

sudo service mpss start

sudo micctrl -w

sudo /opt/intel/mic/bin/micinfo

检验驱动程序版本是 4346-xx

检验英特尔® MPSS 版本是 2.1.4346-xx

检验闪存版本 2.1.01.0373

安装软件开发工具的步骤

支持您购买软件开发工具的网站http://software.intel.com/en-us/linux-tool-suites。选择您需要的工具(如:“英特尔® Cluster Studio XE 2013”,“英特尔® C++ Composer XE for Linux*”,“英特尔® Fortran Composer XE for Linux*”,等)。选择需要的工具并完成购买流程以后,您将收到一个序列号。您也可以访问 http://software.intel.com/en-us/mic-developer,在“工具与下载”下选择“英特尔® 软件开发产品”,查找英特尔® 至强融合™ 的最新支持工具列表。

您获得英特尔工具的序列号以后请转到英特尔® 注册中心(IRC)(http://registrationcenter.intel.com)注册并下载产品。点击按钮“注册产品”,您将转到所购买产品的下载页面。以下示例是关于用户购买“英特尔® Cluster Studio XE for Linux”的案例。选择三个文件:完整产品、安装指南和发行说明,然后点击按钮“立即下载”获取。

按照安装指南中的说明安装英特尔® Cluster Studio XE for Linux*。如果您购买的是英特尔® C++ Composer XE for Linux或英特尔® Fortran Composer XE for Linux请阅读相应的安装指南进行这些包的安装同时单独安装英特尔® VTune Amplifier XE 2013 for Linux*

对于首次安装请确保已经获得激活产品所需的产品许可号安装过程中需要提供许可号。后续安装可使用“使用现有许可”选项。

请仔细阅读产品发行说明(ICSXE2013_ReleaseNotes.pdf 对应英特尔® Cluster Studio XE for LinuxRelease-notes-c-2013-l-en.pdf 对应英特尔® C++ Composer XE for LinuxRelease-notes-f-2013-l-en.pdf 对应英特尔® Fortran Composer XE for Linux)

解压缩产品文件

tar -xvzf I_ics_<major>.<update>.<package_num>.tgz,或

tar -xvf I_ccompxe_<major>.<update>.<package_num>.tgz,或

tar -xvf I_fcompxe_<major>.<update>.<package_num>.tgz>

使用之前的序列号安装软件工具。

通过运行抽样程序检验卡的工作状态(对于 C/C++ 代码位于 /opt/intel/composerxe/Samples/en_US/C++/mic_sample对于 Fortran 代码位于 /opt/intel/composerxe/Samples/en_US/Fortran/mic_sample)并使用setenv H_TRACE 2export H_TRACE=2显示主机与英特尔® 至强融合协处理器之间的对话(从处理器发出的消息将加上前缀MIC:)。如果您看到该对话,则表明一切运行正常,系统准备就绪可供一般使用。

如果您需要使用英特尔® VTune Amplifier XE 2013 采集该系统的性能数据

转到 /opt/intel/vtune_amplifier_xe/bin64/k1om/ 并运行启动协处理器以后加载数据采集驱动程序

sudo sep_micboot_create.sh

sudo sep_micboot_install.sh

启动或重启英特尔® 众核平台软件堆栈服务(上一步中的复制操作一旦完成这一步还将启动抽样驱动程序)

sudo service mpss restart

sudo micctrl -w

micctrl-w 报告micx:online表示协处理器已经成功重启。

现在每次协处理器重启时抽样驱动程序都会启动。

如果您需要重新安装抽样驱动程序您可以执行以下步骤

sudo service mpss stop

sudo sep_micboot_uninstall.sh

sudo service mpss restart

sudo micctrl -w

更新现有系统

更新已经配置英特尔® 至强融合协处理器的系统

使用自述文件 readme.txt 中第 5.3-5.6 节中的说明更新系统软件。

按照自述文件 readme.txt 中第 5.7 节的说明更新您的卡的闪存。

重启系统

启动英特尔® 至强融合协处理器(您可以手动设置由卡启动主机系统不过这不是默认设置)然后运行micinfo以检验设置是否正确

sudo service mpss start

sudo micctrl -w

sudo /opt/intel/mic/bin/micinfo

检验驱动程序版本是 4346-xx

检验英特尔® MPSS 版本是 2.1.4346-xx

检验闪存版本 2.1.01.0373

重启以后重新访问英特尔® 至强融合协处理器

当主机系统重启时英特尔® 至强融合协处理器不会自动启动。您需要手动启动英特尔® 至强融合™ 协处理器,然后运行“micinfo”以检验是否正常启动。作为非 root 用户为了通过 sudo 成功执行以上步骤,您需要在路径中添加 /usr/sbin and /sbin :

sudo service mpss start

sudo micctrl -w

sudo /opt/intel/mic/bin/micinfo

注释:您可以将协处理器 uOS 设置为重启时自动启动并预加载所需文件。详情请参阅 MPSS readme.txt 自述文件中第 4.3-4.6 节的说明。

进程悬挂时重启英特尔® 至强融合协处理器

如果运行于英特尔® 至强融合协处理器的某个进程发生悬挂而协处理器还可以通过 ssh 进行响应则登陆协处理器像其它 Linux 进程一样终止该进程。

如果协处理器发生悬挂无法访问或通过 ssh 进行响应则有两个重启途径。不过,首先看看是否能找到问题所在:

sudo micctrl --status <micx>

假设英特尔® MPSS 服务仍然正常运行您可以重启协处理器而不会影响其它关联的协处理器步骤如下

sudo micctrl --reset <micx>

sudo micctrl --boot <micx>

sudo micctrl -w

sudo /opt/intel/mic/bin/micinfo

如果英特尔® MPSS 服务无法正常运行您需要重启驱动程序和所有关联的协处理器

sudo service mpss stop

sudo service mpss unload

sudo service mpss start

sudo micctrl -w

sudo /opt/intel/mic/bin/micinfo

监控英特尔® 至强融合协处理器

如果您需要监控协处理器上的负载、温度等请运行系统管理与配置(SMC)实用工具。详情请参阅 MPSS readme.txt 自述文件中第 5.3 节的说明。

执行监控程序

/opt/intel/mic/bin/micsmc &

如果不要参数启动 micsmc 将运行 GUI 模式。如果使用参数调用,则运行 character 模式。

从主机系统运行某个英特尔® 至强融合协处理器程序

您可以将某个英特尔® MIC 架构原生二进制程序复制到指定的英特尔® 至强融合协处理器中并使用micnativeloadex实用工具进行执行。该实用工具可将函数库关系方便地复制到协处理器中。详情请参阅 MPSS readme.txt 自述文件中第 5.5 节的说明。

直接配合 uOS 环境英特尔® 至强融合协处理器

由于协处理器运行于 Linux 并且是一个独立网络节点所以 root root 用户可以通过ssh登陆其中并发出众多共同 Linux 指令。和协处理器之间的往来文件传输是借助“scp”或其它手段。

从主机上看到的协处理器默认 IP 地址为 172.31.<coprocessor>.1而默认情况下协处理器看到的主机地址是 172.31.<coprocessor>.254。从主机还可以使用别名 mic<coprocessor> 指涉协处理器。例如您在系统中安装的第一个协处理器称为mic0”,位置是 172.31.1.1。从它看主机的位置为 172.31.1.254。安装第二个协处理器以后,它将称为“mic1”且位置为 172.31.2.1,从它看主机的位置为 172.31.2.254。

关于非 root 用户如何设置卡调整网络配置安装主机为英特尔® 至强融合协处理器而输出的 NFS 文件系统等等请参考 MPSS readme.txt 自述文件中第 6 节。

有用的管理工具

本产品附带以下管理工具地址目录为/opt/intel/mic/binRoot 用户以及需要使用这些工具的用户应当将该目录添加至自己的默认路径中

micinfo 提供主机与协处理器配置的相关信息。

micflash 更新协处理器的闪存保存并检索每个闪存扇区的版本信息及其它信息。

micsmc 该工具旨在减轻英特尔® 至强融合协处理器的监控与管理负担。

miccheck 该实用工具通过运行各种诊断测试来检验英特尔® 至强融合协处理器的配置状况。

micnativeloadex 该实用工具将英特尔® MIC 架构原生二进制程序复制到指定的英特尔® 至强融合协处理器并执行。

micctrl 该工具帮助系统管理员配置并重启协处理器。

请参考 MPSS readme.txt 自述文件中第 6 节深入了解这些工具及其参数。

开始了解/并开发英特尔® 至强融合软件

您可以使用已经掌握的关于多核和 SIMD 程序的知识开发面向英特尔® MIC 架构的应用。卸载语言扩展集支持您导入代码段(使用 C/C++ 或 FORTRAN 编写)并运行于英特尔® 至强融合™ 协处理器,或者将整个应用导入至英特尔® MIC 架构。如需获得最佳性能,必须使用高度并行应用,并且多数执行过程需要使用 SIMD 操作(由编译器生成或使用编译器内联函数生成)。

可用软件开发工具/环境

您可以使用已经掌握的并行程序知识以及在主机上开发并行应用的技巧为英特尔® 至强融合协处理器进行编程。不存在为支持英特尔® 至强融合™ 协处理器而开发的新工具,熟悉的基于主机的英特尔工具通过对标准语言和 API 的若干增强即可支持英特尔® MIC 架构。然而,为了最有效地利用开发工具并获得英特尔® 至强融合™ 协处理器的最佳性能,了解英特尔® MIC 架构是很有必要的。

开发环境可用的编译器和函数库

编译器

英特尔® C++ Composer XE 2013用于构建运行于英特尔® 64 架构和英特尔® MIC 架构的应用

英特尔® Fortran Composer XE 2013用于构建运行于英特尔® 64 架构和英特尔® MIC 架构的应用

函数库 和编译器一起封装的函数库包括

英特尔® 数学内核函数库(英特尔® MKL) 针对英特尔® MIC 架构进行了优化

英特尔® 线程构建模块(英特尔® TBB)

英特尔® 集成性能基元英特尔® IPP

函数库 独立封装的函数库包括

英特尔® MPI for Linux* OS包含英特尔® 集成众核(英特尔® MIC) 架构

英特尔® 跟踪采集器和跟踪分析器

开发环境可用工具

除了标准编译器和英特尔函数库您也可以使用以下工具调试并优化运行于英特尔® 至强融合协处理器上的软件。

调试器

英特尔® 调试器面向运行于英特尔® 64 架构和英特尔® MIC 架构上的应用

英特尔® C++ Eclipse* 产品扩展包含调试分析工具

英特尔® VTune Amplifier XE 2013 for Linux用于主机 Linux OS 采集并查看英特尔® 至强融合协处理器上的数据

英特尔® Inspector XE 2013用于检测串行和并行应用的内存与线程错误

英特尔® Advisor XE 2013用于协助开发人员设计线程。

一般开发信息

开发环境设置

为了设置使用英特尔工具的开发环境您需要指定以下脚本的源地址(默认安装地址是假设的)

英特尔® C++ Fortran Composer XE 2013/opt/intel/composerxe/bin/compilervars.csh compilervars.sh 脚本参数为 intel64例如
源地址/opt/intel/composerxe/bin/compilervars.sh intel64

以下脚本的运行是调用 compilervars 脚本的结果。为了您的环境正常初始化,建议不要单独运行它们(这会引发很多问题,还会引发排序问题,可能导致不可预测的行为)。

英特尔调试器/opt/intel/composerxe/pkg_bin/idbvars.csh idbvars.sh 脚本参数为 intel64

英特尔 TBB/opt/intel/composerxe/tbb/bin/tbbvars.csh tbbvars.sh 脚本参数为 intel64

英特尔® MKL/opt/intel/composerxe/mkl/bin/mklvars.csh mklvars.sh 脚本参数为 intel64

文档与抽样代码

最有用的文档放在 /opt/intel/composerxe/Documentation/en_US/including

compiler_c/main_cls/index.htm and compiler_f/main_cls/index.htm- 完成英特尔® C++ Compiler XE 13.0 和英特尔® Fortran Compiler XE 2013 的相关文档。

关于面向英特尔® MIC 架构的程序构建信息多数包含在面向英特尔® MIC 架构的编程之下关键特性章节中

关于英特尔® MIC 架构内联函数的信息包含在面向英特尔® MIC 架构的内联函数之下编译器参考/内联函数章节

Release-notes-*-2013-l-en.pdf- 请仔细阅读这些内容了解英特尔® MIC 架构支持的所有工具的已知问题及其解决方案和安装说明。您将看到英特尔® MIC 架构的相关信息主要包含在第 3 节中。

注释由于各种原因本文档可能不是最新版本。最新版本的 Release-notes-*-2013-l-en.pdf 文档可在英特尔注册中心下载(参考软件开发工具安装步骤一节)

debugger/debugger_documentation.htm 关于如何使用英特尔调试器的信息。关于如何调试英特尔® MIC 架构应用的信息包含在使用英特尔® 调试器调试 Eclipse*调试命令行章节

关于如何使用英特尔® 至强融合协处理器的其它文档

关于英特尔数学内核函数库用户指南可通过 /opt/intel/composerxe/Documentation/en_US/mkl下的mkl_documentation.htm 访问其中包含一个章节为基于英特尔® MIC 内核架构协处理器使用英特尔® 数学内核函数库”,介绍了英特尔® MKL 函数的自动卸载编译器辅助卸载

关于如何使用 VTune Amplifier XE 2013 for Linux* 采集英特尔® 至强融合协处理器的性能数据信息请访问 mic-data-collection.pdf/opt/intel/vtune_amplifier_xe_2013/documentation/en

 Web 的有用文档

在网站 http://software.intel.com/mic-developer 上您可以找到大量可供下载的文档最抢眼的是软件开发选项卡下的《英特尔® 至强融合软件开发人员指南》还有《英特尔® 至强融合协处理器指令集参考手册》ABI 文档系统 V 应用二进制程序接口 K1OM 架构处理器附录》以及《英特尔® 至强融合性能监控器单元》。在该网站上您还可以找到社区论坛(问题答疑),以及其它可用工具、代码样本与案例研究的链接。

http://software.intel.com/en-us/articles/programming-and-compiling-for-intel-many-integrated-core-architecture 这个网站包含大量关于编译器的信息。

使用显式内存复制模式的一些抽样卸载代码的地址为

C++: /opt/intel/composerxe/Samples/en_US/C++/mic_samples/intro_sampleC/

Fortran: /opt/intel/composerxe/Samples/en_US/Fortran/mic_samples/

英特尔® MKL: /opt/intel/composerxe/mkl/examples/mic*

 

英特尔® MKL 自动卸载的示例/opt/intel/composerxe/mkl/examples/mic_ao/blasc /mic_ao/blasf

以下示例展示如何通过编译器辅助卸载使用 MKL (/opt/intel/composerxe/mkl/examples/mic_offload)

使用显式内存复制模式的一些抽样卸载代码的地址为

C: /opt/intel/composerxe/Samples/en_US/C++/mic_samples/shrd_sampleC 和 …/LEO_tutorial

C++: /opt/intel/composerxe/Samples/en_US/C++/mic_samples/shrd_sampleCPP

构建相关信息

卸载编译器生成二进制程序所以文件包含的代码同时支持主机和英特尔® 至强融合协处理器。

卸载编译器生成的代码能够针对英特尔® 至强融合协处理器检查运行时间执行环境。如果未发现协处理器,则在主机上执行“卸载”代码。换句话说,卸载编译器将创建同时支持主机和英特尔® MIC 架构版本的卸载代码。

关于大量解决方案和提示信息请参考 Release-notes-*-2013-l-en.pdf

编译器开关和 Makefiles

当构建将一些代码卸载至英特尔® 至强融合协处理器的应用时可以使用来自主机代码的不同编译器选项构建所卸载的代码。将这些选项传递至编译器的方法可参阅编译器文档,“编译器参考/编译器选项/编译器选项类别与描述”章节中。查看 卸载-选项编译器开关。在同一章节中,还可以查找 卸载 属性 目标编译器开关,它提供了在同样情形下编辑源文件的替代方法(适用于基于 pragma 的卸载方法)。最后,-no-offload 提供一个方法使编译器忽略 _Cilk_offload 和 #pragma_offload 结构(它将默认构建一个异质二进制程序)。

运行时间中调试

为了调试卸载活动可使用以下环境变量

了解程序中的卸载部分是运行在主机还是协处理器上

对于 csh - setenv H_TRACE 1

对于 sh - export H_TRACE=1

对于更加完整的调试信息

对于 csh - setenv H_TRACE 2

对于 sh - export H_TRACE=2

为了显示编译器的内部卸载计时器报告值为 1 显示的仅是主机测量的卸载时间以及协处理器使用的计算时间。报告值为 2 添加了关于各个方向上传输了多少数据的信息。

对于 csh - setenv OFFLOAD_REPORT <1 2>

对于 sh - export OFFLOAD_REPORT=<1 2>

详情可参阅编译器文档,“编译/设置环境变量章节。

如何获取更多帮助

您可以访问英特尔® 至强融合协处理器的论坛提出问题。网站http://software.intel.com/en-us/forums/intel-many-integrated-core

使用卸载编译器 显式内存复制模式

在本节中将使用一个约减reduction示例展示面向使用卸载编译器的英特尔® 至强融合协处理器开发应用的详细步骤。卸载编译器是一个异质2 编译器,具有主机 CPU 和目标编译环境。面向主机 CPU 和英特尔® 至强融合™ 协处理器的代码是在主机环境内编译的,所卸载的代码自动在目标环境里运行。卸载行为由编译器指令进行控制:在 C/C++ 中为 pragmas,在 Fortran 中为指令。

一些通用函数库如英特尔® 数学内核函数库(英特尔® MKL),同时存在主机版本和目标版本。当一个应用执行首次卸载且目标可用时,运行时间(runtime)将可执行目标加载至英特尔® 至强融合™ 协处理器。同时,它还将初始化与目标代码相链接的函数库。加载的目标可执行文件依然保存在目标内存中,直到主机程序终止。因此,函数库维护的任何全局状态都将跨卸载实例得以维护。

注释尽管用户可以指定在目标上运行的代码区域但这并不保证在英特尔® 至强融合协处理器上的执行。根据目标硬件的存在与否或英特尔® 至强融合™ 协处理器资源的可用性,当执行到标记为卸载的代码区域时,代码将运行于英特尔® 至强融合™ 协处理器或返回至主机运行。

以下代码抽样展示了使用卸载 pragma 指令将约减代码移植到英特尔® 至强融合协处理器的多个版本。

约减示例

该操作涉及计算表达式

ans = a[0] + a[1] + + a[n-1]

主机版本

以下抽样代码展示了实施该约减版本的 C 代码。

查看源输出

 

1 float reduction(float *data, int size)
2 {
3     float ret = 0.f;
4     for (int i=0; i<size; ++i)
5     {
6         ret += data[i];
7     }
8     return ret;
9 }

代码示例 1:使用 C/C++ 实施约减代码

创建卸载版本

卸载的串行约减

程序员使用 #pragma offload target(mic) (如下例所示)标记应当在英特尔® 至强融合协处理器上执行的语句卸载结构。卸载区域的定义包含卸载结构以及由于函数调用而在目标环境里运行的附加代码区域。一旦目标环境里的语句执行完毕且结果可供主机调用时,主机上的语句执行将会恢复(换言之,卸载将会中断,尽管有一个 pragma 版本支持异步执行)。Inout inout 语句指明数据在主机与目标之间的传输方向。

所卸载的结构如果被声明为不属于结构的范畴包括文件范畴),则使用的变量默认在目标开始执行前就复制到目标并在执行完毕后复制回主机。

以下代码可作为示例变量 ret 在目标开始执行前就自动复制到目标执行完毕后复制回主机。以下卸载代码在单个英特尔® MIC 架构内核上由单个线程执行。

查看源输出?

 

01 float reduction(float *data, int size)
02 {
03     float ret = 0.f;
04     #pragma offload target(mic) in(data:length(size))
05     for (int i=0; i<size; ++i)
06     {
07         ret += data[i];
08     }
09     return ret;
10 }

代码示例 2:带卸载的串行约减

带卸载的矢量约减

英特尔® 至强融合协处理器的每个内核都有一个 VPU。卸载编译器默认支持自动矢量化选项。另外,如下例所示,程序员可使用英特尔® Cilk™ Plus 扩展阵列符号实现矢量化的最大化,并利用英特尔® MIC 架构内核的 32 个 512 位寄存器。卸载代码在单个内核上由单个线程执行。该线程使用内建约减函数 __sec_reduce_add() 利用内核的 32 个 512 位矢量寄存器来约减阵列中的元素,每次约减 16 个。

查看源输出?

 

1 float reduction(float *data, int size)
2 {
3     float ret = 0;
4     #pragma offload target(mic) in(data:length(size))
5     ret = __sec_reduce_add(data[0:size]); //Intel® Cilk™ Plus
6                                           //Extended Array Notation
7     return ret;
8 }

 

代码示例 3使用 C/C++ 实施卸载矢量约减

异步卸载和数据传输

主机和英特尔® 至强融合协处理器之间支持异步卸载和数据传输。如需详细信息,请参阅《英特尔® C++ 编译器用户与参考指南》中“关于异步计算”和“关于异步数据传输”章节(在“面向英特尔® MIC 架构的关键特性/程序”下)。

如需异步卸载与传输的使用示例请参考/opt/intel/composerxe /Samples/en_US/C++/mic_samples/intro_sampleC/sampleC13.c

请注意当使用显式内存复制模式(C/C++)支持阵列的前提条件是阵列元素是标量或按位可复制的结构或类型。所以不支持带指针的阵列。对于 C/C++ 复杂数据结构,请使用显式内存复制模式。更多信息请参考《英特尔 C++ 编译器用户与参考指南》文档中“使用 Pragma 卸载代码的限制”章节。

 

使用卸载编译器 隐式内存复制模式

英特尔 Composer XE 2013 包含两个面向 C C++ 的附加关键字扩展不支持 Fortran),它提供共享内存卸载编程模式适用于处理复杂、基于指针的数据结构如链接列表、二进制树、等等(_Cilk_shared and _Cilk_offload)。该模式支持变量在主机和协处理器之间共享(标记为 _Cilk_shared 关键字),位于两个设备的同一虚拟地址中,并在卸载函数调用的开始与结束时同步他们的值(标记为 _Cilk_offload 关键字)。需要同步的数据还可以使用特殊分配与自由调用进行动态地分配,从而确保分配的内存位于两个设备的同一虚拟地址。

支持动态共享内存分配的 API

void *_Offload_shared_malloc(size_t size);

_Offload_shared_free(void *p);

支持动态均衡共享内存分配的 API

void *_Offload_shared_aligned_malloc(size_t size, size_t alignment);

_Offload_shared_aligned_free(void *p);

应当指出实际上这并不是共享内存”:没有硬件可将英特尔® 至强融合协处理器内存的一部分内容映射至主机系统。协处理器和主机上的内存子系统是完全独立的,这种编程模式是在定义明确的同步点的这些内存子系统之间复制数据的另一种方式。这些复制是隐式的,所有这些同步点(卸载调用标记为 _Cilk_offload)不指明复制哪些数据。相反,运行时间决定着主机和协处理器之间哪些数据发生了改变,并且仅复制在卸载函数调用开始和结束时发生变化的数据。

以下代码抽样展示了如何使用 _Cilk_shared _Cilk_offload 关键字以及动态分配共享内存。

查看源输出

 

01 float * _Cilk_shared data; //pointer to “shared” memory
02  
03 _Cilk_shared float MIC_OMPReduction(int size)
04 {
05     #ifdef __MIC__
06     float Result;
07     int nThreads = 32;
08     omp_set_num_threads(nThreads);
09  
10     #pragma omp parallel for reduction(+:Result)
11     for (int i=0; i<size; ++i)
12     {
13         Result += data[i];
14     }
15     return Result;
16  
17  
18     #else
19     printf("Intel(R) Xeon Phi(TM) Coprocessor not availablen");
20     #endif
21     return 0.0f;
22 }
23  
24 int main()
25 {
26     size_t size = 1*1e6;
27     int n_bytes = size*sizeof(float);
28     data = (_Cilk_shared float *)_Offload_shared_malloc (n_bytes);
29     for (int i=0; i<size; ++i)
30     {
31         data[i] = i%10;
32     }
33  
34     _Cilk_offload MIC_OMPReduction(size);
35  
36     _Offload_shared_free(data);
37     return 0;
38 }

 

代码示例 4 C/C++ 中使用_Cilk_shared_Cilk_offload关键字和动态分配。

注释如需更多隐式内存复制模式的示例请参考

C: /opt/intel/composerxe/Samples/en_US/C++/mic_samples/shrd_sampleC and /LEO_tutorial

C++: /opt/intel/composerxe/Samples/en_US/C++/mic_samples/shrd_sampleCPP

需要更多信息的用户请参考《英特尔 C++ 编译器用户与参考指南》和/或《英特尔 Fortran 编译器用户与参考指南》。

《英特尔 C++ 编译器用户与参考指南》中使用共享虚拟内存卸载限制章节显示了这一编程模式的一些使用限制。

本机编译

应用还可以在英特尔® 至强融合协处理器上本机运行在这种情况下协处理器将作为单机多核计算机。二进制程序在主机系统中构建以后,将二进制程序以及其它相关二进制程序或数据复制到英特尔® 至强融合™ 协处理器的文件系统中(或通过 NFS 显示出来)。

示例

openmp_sample.c   /opt/intel/composerxe/Samples/en_US/C++/openmp_samples/ 复制到您的主目录

使用 mmicflag 构建应用

icc -mmic -vec-report3 -openmp openmp_sample.c

将二进制程序加载至协处理器:

scp a.out mic0:/tmp/a.out

复制您的应用需要的任何共享函数库此时 OpenMP* 运行时间函数库

scp /opt/intel/composerx/lib/mic/libiomp5.so mic0:/tmp/libiomp5.so

使用 ssh 连接协处理器并输出本地目录以便应用找到需要调用的任何共享函数库(此时 OpenMP* 运行时间函数库)

ssh mic0

export LD_LIBRARY_PATH=/tmp 

如果堆栈大小设置错误则应用可能出现分段错误。如需修改堆栈大小,请使用:

ulimit -s unlimited

转到 /tmp 并运行 a.out

cd /tmp               

./a.out

英特尔® 至强融合协处理器上的并行编程选项

主机系统支持的多数并行编程选项也支持英特尔® 至强融合协处理器。其中包括

英特尔® 线程构建模块(英特尔® TBB)

OpenMP*

英特尔® Cilk Plus

pthreads*

以下章节将讨论如何借助卸载扩展使用代码的并行编程模式。在英特尔® 至强融合™ 协处理器上本机运行的代码可以像在主机上一样使用这些并行编程模式,除了线程更多以外没有复杂性。

英特尔® 至强融合协处理器上的并行编程OpenMP*

主机 CPU 和英特尔® 至强融合协处理器上的 OpenMP 线程之间没有通信。由于卸载/pragma 内部的 OpenMP 并行区域是作为一个单元卸载的,所以卸载编译器根据英特尔® 至强融合™ 协处理器的可用资源创建一个线程组。由于整个 OpenMP 结构是在英特尔® 至强融合™ 协处理器上执行的,所以在结构内部, OpenMP* 关于共享与私有数据的通常语义依然适用。

任何时间都可以将多个主机 CPU 线程卸载至英特尔® 至强融合协处理器。如果一个 CPU 线程试图卸载至英特尔® 至强融合™ 协处理器而协处理器上的资源不可用,则试图卸载的代码可能在主机上执行。如果协处理器上的一条线程遇到“omp parallel”指令,则根据协处理器上的可用资源创建一个线程组。理论上硬件线程可创建的最大数量是英特尔® 至强融合™ 协处理器的内核数量的 4 倍。实际极限数量少于 4 倍(对于卸载代码),因为第一个内核是为 uOS 及其服务而保留的。

以下代码示例显示的是单个主机 CPU 线程试图使用卸载结构中的 OpenMP 将约减代码卸载至英特尔® 至强融合协处理器。

查看源输出?

01 float OMP_reduction(float *data, int size)
02 {
03     float ret = 0;
04     #pragma offload target(mic) in(size) in(data:length(size))
05     {
06         #pragma omp parallel for reduction(+:ret)
07         for (int i=0; i<size; ++i)
08         {
09             ret += data[i];
10         }
11     }
12     return ret;
13 }

代码示例 5 C/C++:在卸载约减代码中使用 OpenMP

查看源输出?

01 real function FTNReductionOMP(data, size)
02     implicit none
03     integer :: size
04     real, dimension(size) :: data
05     real :: ret = 0.0
06  
07 !dir$ omp offload target(mic) in(size) in(data:length(size))
08 !$omp parallel do reduction(+:ret)
09     do i=1,size
10         ret = ret + data(i)
11     enddo
12 !$omp end parallel do
13  
14     FTNReductionOMP = ret
15     return
16 end function FTNReductionOMP

代码示例 6 Fortran:在卸载约减代码中使用 OpenMP*

 

英特尔® 至强融合协处理器上的并行编程OpenMP* + Intel® Cilk Plus 扩展阵列符号

以下代码抽样进一步将 OpenMP 示例扩展至使用英特尔® Cilk Plus 扩展阵列符号。在以下代码抽样中,每个线程使用英特尔® Cilk Plus 扩展阵列符号中的内建约减函数 __sec_reduce_add() 以利用英特尔® MIC 架构的所有 32 个 512 位矢量寄存器来约减阵列中的元素。

查看源输出?

01 float OMPnthreads_CilkPlusEAN_reduction(float *data, int size)
02 {
03     float ret=0;
04     #pragma offload target(mic) in(data:length(size))
05     {
06         int nthreads = omp_get_max_threads();
07         int ElementsPerThread = size/nthreads;
08         #pragma omp parallel for reduction(+:ret)
09         for(int i=0;i<nthreads;i++)
10         {
11             ret =_sec_reduce_add(
12                    data[i*ElementsPerThread:ElementsPerThread]);
13         }
14         //rest of the array
15         for(int i=nthreads*ElementsPerThread; i<size; i++)
16         {
17             ret+=data[i];
18         }
19     }
20     return ret;
21 }

代码示例 7 C/C++ 下使用 OpenMP 和英特尔® Cilk Plus 约减阵列

英特尔® 至强融合协处理器上的并行编程英特尔® Cilk Plus

默认状况下目标环境中的英特尔® Cilk Plus 头文件不可用。为了使头文件对于面向英特尔® MIC 架构(使用英特尔® Cilk Plus)构建的应用可用,请使用 #pragma offload_attribute(push,target(mic))#pragma offload_attribute(pop)  处理(wrap)头文件,方法如下:

查看源输出?

1 #pragma offload_attribute(push,target(mic))
2 #include <cilk/cilk.h>
3 #include <cilk/reducer_opadd.h>
4 #pragma offload_attribute(pop)

代码示例 8:在 C/C++ 下处理头文件

在以下示例中编译器使用一个高效的分治策略将 cilk_forloop 转换为递归调用函数。

查看源输出?

01 float ReduceCilk(float*data, int size)
02 {
03     float ret = 0;
04     #pragma offload target(mic) in(data:length(size))
05     {
06         cilk::reducer_opadd<int> total;
07         cilk_for (int i=0; i<size; ++i)
08         {
09             total += data[i];
10         }
11         ret = total.get_value();
12     }
13     return ret;
14 }

代码示例 9通过转换cilk_forLoop 创建递归调用函数

英特尔® 至强融合协处理器上的并行编程英特尔® TBB

和英特尔® Cilk Plus一样默认状况下目标环境中的英特尔® TBB 头文件不可用。使用类似方法可将它们对英特尔® MIC 架构目标环境可用:

查看源输出?

1 #pragma offload_attribute (push,target(mic))
2 #include "tbb/task_scheduler_init.h"
3 #include "tbb/blocked_range.h"
4 #include "tbb/parallel_reduce.h"
5 #include "tbb/task.h"
6 #pragma offload_attribute (pop)
7  
8 using namespace tbb;

代码示例 10 C/C++ 下处理英特尔® TBB头文件

从卸载结构中调用的函数和英特尔® 至强融合协处理器需要的全局数据应该附以以下特殊属性 __attribute__((target(mic)))

例如parallel_reduce 将一个阵列递归分割为若干子界供每个线程工作。parallel_reduce 使用分割构造函数为每个线程生成一个或多个副本。对于每个分割调用 method join 累加结果。

如果您需要为协处理器生成它们请在类别前面加前缀 macro __MIC__ 并在类别名称前面加前缀 __attribute__((target(mic)))

查看源输出?

01 #ifdef __MIC__
02 class __attribute__((target(mic))) ReduceTBB
03 {
04 private:
05     float *my_data;
06 public:
07     float sum;
08  
09     void operator()( const blocked_range<size_t>& r )
10     {
11         float *data = my_data;
12         for( size_t i=r.begin(); i!=r.end(); ++i)
13         {
14             sum += data[i];
15         }
16     }
17  
18     ReduceTBB( ReduceTBB& x, split) : my_data(x.my_data), sum(0) {}
19  
20     void join( const ReduceTBB& y) { sum += y.sum; }
21  
22     ReduceTBB( float data[] ) : my_data(data), sum(0) {}
23 };
24 #endif

代码示例 11面向 C/C++ 下的英特尔® MIC 架构代码生成为英特尔® TBB 类别加前缀

在将要卸载至英特尔® 至强融合协处理器的函数前面加前缀 __attribute__((target(mic)))

查看源输出?

1 __attribute__((target(mic)))
2 float MICReductionTBB(float *data, int size)
3 {
4     ReduceTBB redc(data);
5     // initializing the library
6     task_scheduler_init init;
7     parallel_reduce(blocked_range<size_t>(0, size), redc);
8     return redc.sum;
9 }

代码示例 12面向 C/C++ 下的英特尔® MIC 架构代码生成为英特尔® TBB 函数加前缀

使用 #pragma offload target(mic) 将英特尔® TBB 并行代码卸载至协处理器

查看源输出?

1 float MICReductionTBB(float *data, int size)
2 {
3     float ret(0.f);
4     #pragma offload target(mic) in(size) in(data:length(size)) out(ret)
5     ret = _MICReductionTBB(data, size);
6     return ret;
7 }

代码示例 13 C/C++ 下将英特尔® TBB 代码卸载至协处理器

注释使用英特尔® TBB 卸载的代码应当使用 -tbb 标志进行编译而非使用 ltbb

英特尔® MKL 使用说明

对于卸载用户来说英特尔® MKL 在英特尔® 至强融合协处理器上的本机加速(NAcc)模式下是最常用的。在本机加速(Nacc)模式下,所有数据和二进制程序都位于英特尔® 至强融合™ 协处理器上。数据由程序员通过卸载编译器 pragmas 和语义传输,供英特尔® MKL在卸载区域或函数内调用。NAcc 功能包含 BLAS、LAPACK、FFT、VML、VSL(稀疏矩阵矢量),并需要英特尔® MKL 服务函数。请参阅英特尔® MKL 发行文档详细了解函数的优化和支持信息。

本机加速模式还可以在英特尔® MIC 架构原生代码中使用 在这种情况下英特尔® MKL 共享二进制程序在执行前必须复制到英特尔® 至强融合协处理器中。

 



Figure 3.1: Using MKL Native Acceleration with Offload

SGEMM 示例

使用 BLAS 二进制程序的 SGEMM 例程

示例代码 - sgemm

1 初始化矩阵在本示例中它需要是一个全局变量以便利用数据持久性。

2 使用 #pragma 卸载将数据发送至英特尔® 至强融合协处理器。在本示例中,使用 free_if(0) 修饰符确保数据在英特尔® 至强融合™ 协处理器上的持久性。

查看源输出?

1 #define PHI_DEV 0
2 #pragma offload target(mic:PHI_DEV)
3     in(A:length(matrix_elements) free_if(0))
4     in(B:length(matrix_elements) free_if(0))
5     in(C:length(matrix_elements) free_if(0))
6     {
7     }

代码示例 14将数据发送至英特尔® 至强融合协处理器

3 调用卸载部分中的 sgemm使用英特尔® 至强融合协处理器上的英特尔® MKL 本机加速版本。nocopy() 修饰符的作用是重新使用第 2 步中复制到卡中的数据。

查看源输出?

1 #pragma offload target(mic:PHI_DEV)
2     in(transa, transb, N, alpha, beta)
3     nocopy(A: alloc_if(0) free_if(0)) nocopy(B: alloc_if(0) free_if(0))
4     out(C:length(matrix_elements) alloc_if(0) free_if(0)) // output data
5     {
6         sgemm(&transa, &transb, &N, &N, &N, &alpha, A, &N, B, &N,
7             &beta, C, &N);
8     }

代码示例 15:调用卸载部分中的 sgemm

4 释放第 2 步中复制到卡中的内存。修饰符 alloc_if(0)的作用是在进入卸载部分时重新使用卡上的数据,修饰符 free_if(1) 的作用是退出时释放卡上的数据。

查看源输出?

1 #pragma offload target(mic:PHI_DEV)
2         in(A:length(matrix_elements) alloc_if(0) free_if(1))
3         in(B:length(matrix_elements) alloc_if(0) free_if(1))
4         in(C:length(matrix_elements) alloc_if(0) free_if(1))
5         {
6         }

代码示例 16:释放复制的内存

对于任何平台上的英特尔® MKL在卸载代码内部执行 MKL 函数之前都可以通过设定允许的 OpenMP 线程数量来限制所使用的线程数量。

查看源输出?

1 #pragma offload target(mic:PHIDEV)
2     in(transa, transb, N, alpha, beta)
3     nocopy(A: alloc_if(0) free_if(0)) nocopy(B: alloc_if(0) free_if(0))
4     out(C:length(matrix_elements) alloc_if(0) free_if(0)) // output data
5     {
6         omp_set_num_threads(64); // set num threads in openmp
7         sgemm(&transa, &transb, &N, &N, &N, &alpha, A, &N, B, &N,
8             &beta, C, &N);
9     }

代码示例 17使用 omp_set_num_threads() 控制英特尔® 至强融合协处理器上的线程数量

 

英特尔® MKL 自动卸载模式

一些主机英特尔® MKL 函数能够感知自动卸载功能 您可以根据正常需要在主机上调用它们。然而,一旦您使用 mkl_mic_enable()开始调用函数库,英特尔® MKL 将在运行时间自动决定函数调用所需的部分工作或全部工作是否需要在主机和英特尔® 至强融合™ 协处理器上进行分割。决定因素包括问题大小、处理器上的负载状况以及其它指标。关闭该功能可使用 mkl_mic_disable()。

自动卸载仅适用在运行于英特尔® 至强融合协处理器之外的代码通过 _Cilk_offload #pragma 卸载而选择主机英特尔® MKL 函数库调用。因此,您应当最大程度限制同一数据在自动卸载调用和协处理器上通过 _Cilk_offload 或 #pragma 卸载而运行的代码中的传输。目前,协处理器上无法在自动 MKL 卸载和显式程序员控制卸载之间保存公用数据(通过 _Cilk_offload 或 #pragma 卸载)。

如需自动卸载的控制示例请参考/opt/intel/composerxe/mkl/examples/mic_ao/blasc 对于 C 代码);/opt/intel/composerxe/mkl/examples/mic_ao/blasf对于 Fortran 代码

调试英特尔® 至强融核协处理器

如需深入了解如何调试英特尔® MIC 架构应用请参阅使用英特尔® 调试器调试 Eclipse*调试命令行章节/opt/intel/composerxe/Documentation/en_US/debugger/debugger_documentation.htm

英特尔® 至强融核™ 协处理器的性能分析

关于如何使用英特尔® VTune Amplifier XE for Linux* 采集英特尔® 至强融合协处理器的性能数据信息请访问 mic-data-collection.pdf/opt/intel/vtune_amplifier_xe_2013/documentation/en

作者介绍

Sudha Udanapalli Thiagarajan
2008 年获得印度钦奈安娜大学计算机与工程系学士学位2010 5 月获得美国克莱姆森大学计算机工程系硕士学位。2010 年加入英特尔公司,岗位职责是应用工程师,工作重心是为 ISV 优化应用,并为英特尔® 集成众核架构制作宣传材料。

Charles Congdon
英特尔公司软件及服务事业部高级软件工程师。其专长是改进应用的性能和可扩展性,曾为英特尔公司及外界编写大量软件和文档。在加入英特尔之前,Charles 是 Oracle® Corporation公司的一名顾问软件工程师,专门研究基于 Digital Alpha 处理器 Oracle RDBMS 的 Windows NT 和 OpenVMS® 版本的并行处理和 64 位支持。

Sumedh Naik
2009 年获得印度孟买大学电子工程系学士学位2012 12 月获得美国克莱姆森大学计算机工程系硕士学位。2012 年加入英特尔,岗位职责是软件工程师,为英特尔® 至强融合™ 协处理器制作宣传材料。

Loc Q Nguyen
达拉斯大学 MBA 学位、麦吉尔大学电子工程专业硕士学位以及蒙特利尔理工学院电子工程专业学士学位。目前在英特尔公司软件及服务事业部担任软件工程师。研究领域包括计算机网络、计算机图形和并行处理。

声明

本文件中包含关于英特尔产品的信息。本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。除英特尔产品销售的条款和条件规定的责任外,英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

 

除非经过英特尔的书面同意认可,英特尔的产品无意被设计用于或被用于以下应用:即在这样的应用中可因英特尔产品的故障而导致人身伤亡。

 

英特尔有权随时更改产品的规格和描述而毋需发出通知。设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有“保留权利”或“未定义”说明或特性描述。对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。此处提供的信息可随时改变而毋需通知。请勿根据本文件提供的信息完成一项产品设计。

 

本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。这些缺陷或失误已收录于勘误表中,可索取获得。

 

在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。

 

索取本文件中或英特尔的其他材料中提的、包含订单号的文件的复印件,可拨打1-800-548-4725,或登陆http://www.intel.com/design/literature.htm

英特尔、Intel 标识、CilkXeon、至强、Intel Xeon Phi 和英特尔至强融合是英特尔公司在美国和其他国家的商标。

* 其他的名称和品牌可能是其他所有者的资产。

英特尔公司 © 2012 年版权所有。所有权保留。

Per informazioni complete sulle ottimizzazioni del compilatore, consultare l'Avviso sull'ottimizzazione