diff options
author | eb | 2008-03-24 07:46:47 +0000 |
---|---|---|
committer | eb | 2008-03-24 07:46:47 +0000 |
commit | a0eae4b4a9e0635fbb2a983673d1dd942f150ea7 (patch) | |
tree | 5e48b8ac6953d91706fbe601e8a5803a0c903699 /gcell/src/lib/runtime/spu/gc_main.c | |
parent | b1408be636817de8bfb39f154cc3db0d3736434c (diff) | |
download | gnuradio-a0eae4b4a9e0635fbb2a983673d1dd942f150ea7.tar.gz gnuradio-a0eae4b4a9e0635fbb2a983673d1dd942f150ea7.tar.bz2 gnuradio-a0eae4b4a9e0635fbb2a983673d1dd942f150ea7.zip |
Fix for gcell corrrectness/performance problem. Replaces mfc_sync
with appropriate use of tag and fenced get. We could pick up a bit
of additional performance by double buffering the the local store
job descriptor, but that's left for a rainy day.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@8090 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gcell/src/lib/runtime/spu/gc_main.c')
-rw-r--r-- | gcell/src/lib/runtime/spu/gc_main.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/gcell/src/lib/runtime/spu/gc_main.c b/gcell/src/lib/runtime/spu/gc_main.c index ef552f14a..867a21de8 100644 --- a/gcell/src/lib/runtime/spu/gc_main.c +++ b/gcell/src/lib/runtime/spu/gc_main.c @@ -542,9 +542,6 @@ process_job(gc_eaddr_t jd_ea, gc_job_desc_t *jd) int tag = ci_tags + ci_idx; // use the current completion tag mfc_put(jd, jd_ea, sizeof(*jd), tag, 0, 0); - mfc_sync(tag); // FIXME this makes it work, but is expensive - - // Tell PPE we're done with the job. // // We queue these up until we run out of room, or until we can send @@ -593,7 +590,7 @@ main_loop(void) // by somebody doing something to the queue. Go look and see // if there's anything for us. // - if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, &jd)) + if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, ci_tags + ci_idx, &jd)) process_job(jd_ea, &jd); gc_jd_queue_getllar(spu_args.queue); // get a new reservation @@ -608,7 +605,7 @@ main_loop(void) #else // try to get a job from the job queue - if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, &jd)){ + if (gc_jd_queue_dequeue(spu_args.queue, &jd_ea, ci_tags + ci_idx, &jd)){ total_jobs++; gc_log_write2(GCL_SS_SYS, 0x10, jd.sys.job_id, total_jobs); |