简介Intel MIC上的分布式开发以及Offload模式下的各种限制

最近要在MIC机群上做分布式开发,发现有两种模式可以用:

1) offload模式:该模式和GPGPU编程思想类似,把并行度高的代码转移到local的MIC处理器上执行,其它代码仍然在CPU上执行。MIC只负责本地计算,分布式通信必须在CPU上执行。

2)symmetric模式:编译出在MIC和CPU上执行的两份二进制代码。该模式逻辑上允许MIC进行分布式通信,虽然物理上消息还是从CPU走的。这种模式编程最大的难点是load balancing问题。


通过几天探索,发现了offload模式下的各种限制:

1)由于内存地址不一样,除了值类型一维数组,在offload时无法拷贝含有引用类型数据。当然,对于任何不共享内存的体系结构而言,这点并不意外。

2)无法使用复杂的数据类型,例如iostream和smart pointer。基本上还是老老实实用C写比较好。

3)无法支持virtual function,因为offload区域内无法构造virtual table。这样一来,就不要想着面向对象里的继承和多态了。

4)除非有target特殊标记,CPU代码中的全局变量也使用不了。

5)不支持MPI代码,因为offload本身只能支持本地计算,不支持分布式通信。

6)如果offload区域内会抛异常,必须在offload区域内catch解决,不能指望异常会跑到CPU代码里。


另外,如果只考虑一台机器上的两个co-processor之间的通信,即intra-node communication,也可以用一个叫SCIF的协议。用法比MPI底层,类似于socket编程。由于不适合我的使用场景,没有深入研究。


值得一提的是,不久的将来应该会出现不含CPU,纯用MIC进行分布式计算的机群。如果想进行提前开发,不考虑利用CPU资源,其实用symmetric mode是一种非常好的选择。使用symmetric模式时,惊讶的发现原来可以只执行MIC的二进制代码,而且MIC节点的rank跟CPU一样,完美支持分布式场景。这样一来,除了Intel编译器不支持一些最新的C++语法外,原来分布式的CPU代码都不用改,感觉非常棒!MIC相对于CPU,最大的优势应该就是在这里了——代码移植性比CUDA真不是好一点两点。

micgpu对比,GPGPUMIC定位相似,两者都是相对于CPU具有较高性价比的高性能解决方案,甚至连外形都是一样使用PCI-E插槽的板卡。但对于“核”这个概念来说,两者却有很大的不同。GPGPU中所说的核,以CUDA为例,是指一个SP(即流处理器),SP的功能只有计算,以NVIDIA的Fermi GPU为例,32个SP组成一个SM(流处理器群),一个SM 才有两个控制单元。也就是说每16个GPU的“核”,必须执行同一条指令。而MIC得设计思路与GPGPU完全不同。MIC的每个“核”,可以简单看作一个X86核心,也就是与现有PC机或小型服务器上的CPU核心相同的核。因此MIC编程可以最大限度地沿袭已有CPU上的并行程序,甚至可以一定程度上认为MIC上的每个“核”都是独立的节点,亦即将MIC作为一个超小型的集群。MIC的“核”虽然是x86架构,虽然单核的功能比GPGPU的核强大不少,但要指望单兵作战接近主流CPU,暂时还是不现实的。MIC依靠和GPGPU一样,靠人海战术。说起“人数”,GPGPU动辄上百核,MIC只有几十核,几十单核性能再强,在并行应用中也掀不起多少浪花。由于MIC的核心是Intel的CPU,核心数即使上不去了,Intel处理器可以超线程。在MIC上,每个核心能同时并发执行4个线程,而且这4个线程被Intel成为“硬件线程”,其性能大幅提升,几乎可以把每个线程看作真正的核心。因此,MIC“执行核”的数量,核GPGPU实际差不多。 另外,MIC采用了SMP结构,以一致性共享缓存为中心,这种设计使得MIC可以使用传统CPU的编程模型,而不需要针对性的硬件,设计新的程序结构。 MIC对现有程序改动之小还体现在编程简易性和工具方面。编程简易性上,MIC常用的offload模式只需要加上少数几条编译指导语句,就可以使程序利用MIC进行运算,而此时的程序源代码,是可以与传统的CPU程序共用的,减少了维护成本。
GPUMIC都是用于高性能计算的加速器。offload模式是将部分计算任务从CPU转移到加速器上,以提高计算性能。GPUMIC的offload模式有以下异同: 1. 异同点:GPUMIC的offload模式都是将计算任务从CPU转移到加速器上进行处理,以提高计算性能。但是,两者的处理方式不同。GPU通过CUDA或OpenCL等编程模型来实现offload,而MIC则通过Intel Xeon Phi架构来实现offload。 2. 异同点:GPUMIC的offload模式都需要将数据传输到加速器的内存中,以便进行计算。但是,两者的内存结构和管理方式也不同。GPU的内存结构是分层的,包括全局内存、共享内存和寄存器等不同层次的内存。而MIC的内存结构是统一的,可以通过NUMA架构进行管理。 3. 异同点:GPUMIC的offload模式都需要进行编程,以便将计算任务分配到加速器上进行处理。但是,两者的编程模型也不同。GPU的编程模型是基于CUDA或OpenCL等语言的,而MIC的编程模型则是基于OpenMP等标准的。 4. 异同点:GPUMIC的offload模式都可以提高计算性能,但是对于不同的应用场景,两者的性能表现也不同。GPU适用于大规模并行的计算任务,而MIC适用于单节点的高性能计算任务。 综上所述,GPUMIC的offload模式在实现方式、内存结构、编程模型和性能表现等方面都有所不同。在选择适合自己应用场景的加速器时,需要根据实际需求进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值