程序员人生 网站导航

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

栏目:服务器时间:2015-08-25 08:11:52

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

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

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


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

1)由于内存地址不1样,除值类型1维数组,在offload时没法拷贝含有援用类型数据。固然,对任何不同享内存的体系结构而言,这点其实不意外。

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

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

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

5)不支持MPI代码,由于offload本身只能支持本地计算,不支持散布式通讯。

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


另外,如果只斟酌1台机器上的两个co-processor之间的通讯,即intra-node communication,也能够用1个叫SCIF的协议。用法比MPI底层,类似于socket编程。由于不合适我的使用处景,没有深入研究。


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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐