#include #include #define BUFF_SIZE 1024 spe_context_ptr_t spe_ctx; unsigned int ls_offset; // offset (adresa) in local store a bufferului de la SPU // buffer PPU volatile char my_data[BUFF_SIZE] __attribute__ ((aligned(128))); extern spe_program_handle_t spu; int main(int argc, char *argv[]){ int ret; unsigned int tag_id, status; unsigned int entry = SPE_DEFAULT_ENTRY; // rezervam un tag: trebuie sa folosite taguri intre 0-15 (16-31 sunt folosite de kernel) tag_id = 1; // rularea programului SPU: // - creare de context // - incarcarea programului SPU // - rulare // preia de la SPU adresa bufferului lui in Local Store prin mailbox (nu prea eficient) printf("PPU: Tema: scrie un eseu!\n"); while(spe_out_mbox_read(spe_ctx, &ls_offset, 1)<=0); // comanda put pentru a prelua datele in spatiul principal de stocare do{ ret=spe_mfcio_put( spe_ctx, ls_offset, (void*)my_data, BUFF_SIZE, tag_id, 0,0); }while( ret!=0); // asteapta executia comenzii put ret = spe_mfcio_tag_status_read(spe_ctx,0,SPE_TAG_ALL, &status); if(ret!=0){ perror ("Error status was returned"); exit (1); } // sincronizam inainte de a folosi datele __lwsync(); printf("PPU: SPU mi-a trimis lucrarea sa - %s\n", my_data); return (0); }