cell上的编译命令:
/usr/bin/ppu32-gcc -o blas_dblat1 blas_dblat1.o -Wl,-rpath /usr/lib -L/opt/cell/sdk/usr/lib -R/opt/cell/sdk/usr/lib -m32 -Wl,-m,elf32ppc /usr/lib/libblas.so -lspe2 -lm -lnuma
注意malloc和free内存使用的头文件及函数
#include <malloc_align.h>
#include <free_align.h>
data_ptr_y = (DTYPE *) _malloc_align( entries_y * sizeof( DTYPE ), 7 ) ;
_free_align( inp.sx ) ;
需函数库对其进行封装。
异构函数库面临的需要解决的问题:
1.通信的异构,节点字节序,对齐,类型大小不同,
2.源程序使用的头文件,库文件不同,生成的可执行文件不同,使用的函数接口定义可能不同
3.节点处理能力不同 适合处理的运算不同
其中通信的异构,节点字节序,对齐,可以由底层通信库屏蔽,类型大小需要函数库提供封装支持;
头文件 库文件 可执行文件可以由ide屏蔽,函数接口则由库wraaper;
节点处理能力 运算类型 由库提供接口进行管理及优化。
hetelib及其example在cell上的编译方法:
拷贝之后,需要修改的内容,/home/duanple/hete_show/hete_lib/src
的Makefile.in加入-I/opt/cell/sdk/usr/include/
hete_comm下的compile_config.h的#define PLATFORM_TYPE PLATFORM_CELL_TYPE:
cd hete_comm
vim compile_config.h
example,编译直接先采用
mpicc data_plot.c -Wl,-rpath /usr/lib -I/opt/cell/sdk/usr/include/ -L/opt/cell/sdk/usr/lib -R/opt/cell/sdk/usr/lib -m32 -Wl,-m,elf32ppc /usr/lib/libblas.so /home/duanple/hete_show/hete_lib/src/hetelib.a -lspe2 -lm -lnuma
为何在ps3上测试blas库cblas_daxpy还不如我的pc机跑的快?
查看cellsdk的doc,/opt/cell/sdk/docs/index.html
看BLAS Programmer’s Guide and API Reference可以发现其实目前只有提供了部分blas接口基于spe的优化实现
The following routines have been optimized to use SPEs and are available as PPE
具体支持的函数参考该文档.
如果想得到更优化的性能,必须使用: SPE APIs.
具体方法参考该文档.