ppu端代码ppu.c:
#include <stdlib.h> #include <pthread.h> #include <libspe2.h> #define N 1 extern spe_program_handle_t signal; void *my_spe_thread(void *arg) { unsigned int entry = SPE_DEFAULT_ENTRY; spe_context_ptr_t ctx = *((spe_context_ptr_t *)arg); printf("The spe_thread id is %lu/n",pthread_self()); spe_context_run(ctx, &entry, 0, NULL, NULL, NULL); pthread_exit(NULL); } int main() { pthread_t pts[N]; spe_context_ptr_t spe[N]; int i; spe[0] = spe_context_create(0,NULL); spe_program_load(spe[0], &signal); pthread_create(&pts[0], NULL, (void *)my_spe_thread, &spe[0]); spe_signal_write(spe[0], 1, 10); for(i =0; i<N; i++) { pthread_join(pts[i], NULL); spe_context_destroy(spe[i]); } return 0; }
解释:向spu端发送信号函数spe_signal_write()中,第二个参数是信号寄存器号,是unsigned int型的;第三个参数是要用32位的信号寄存器传的数据。
spu端代码signal.c:
#include <stdio.h> #include <spu_intrinsics.h> int main(unsigned long long speid, unsigned long long argp, unsigned long long envp) { // while(spu_stat_signal1() == 0); // unsigned int msg = spu_read_signal1(); unsigned int sn_value = spu_readch(SPU_RdSigNotify1); printf("%u", sn_value); }
解释:spu_readch函数的返回值是从ppu端传过来的值。spu端的信号需要用头文件spu_intrinsics.h。