1、在任意目录下新建文件夹hello,在此文件夹下建立ppu.c、Makefile文件和文件夹spu。
此文件夹下的Makefile:
解释:DIR,PROGRAM_ppu,IMPORTS,INSTALL_DIR,INSTALL_FILES,CELL_TOP这些变量都是在make.footer中定义的。运行程序的主要的Makefile文件就是make.footer,我们在ppu端和spu端写的Makefile文件都是在包括make.footer文件的基础上为变量赋几个值。写多线程程序必须加参数-lpthread。
ppu.c文件:
解释:pts[N]是线程号。spe[N]是指向线程上下文的指针,一般取spe_context_create函数的返回值。pthread_create函数中的第四个参数&spe[i]是最值得注意的一点,它是线程要执行的函数中传的参数,也就是说这个实参会传给函数void *my_spe_thread(void *arg)中的形参arg。这里的arg之所以是void *类型,是为了适应不同类型的地址传给它,在函数中最好再将arg强制类型转换成自己所需要的类型。spe_context_run函数中的参数arg就是传进来的指针。这里的传参是也可以传结构体的。pthread_join函数是用来线程同步的。
2、在spu文件夹下建立文件hello.c、Makefile。
Makefile文件:
hello.c文件:
解释:这里面hello.c文件中的形参speid, argp, envp其实是多余的。
在执行时,需要非常注意的一点是:可能是Makefile的原因,make时需要先运行spu文件夹下的Makefile文件,再运行hello文件夹下的Makefile文件。若指运行hello文件夹下的Makefile文件,会出现错误,不知为什么。
出现的错误是:make: *** 没有规则可以创建" ppu"需要的目标" spu/lib_hello.a" 。停止。
程序在运行时出现段错误,不知为什么,希望高人指点。