add missing barriers

should fix issue #597
This commit is contained in:
Grazvydas Ignotas 2015-08-16 15:37:02 +02:00
parent c2323dd4d2
commit d3e2f0a1af
2 changed files with 13 additions and 1 deletions

View File

@ -425,6 +425,10 @@ static int blas_thread_server(void *arg){
main_status[cpu] = MAIN_FINISH;
#endif
// arm: make sure all results are written out _before_
// thread is marked as done and other threads use them
WMB;
thread_status[cpu].queue = (blas_queue_t * volatile) ((long)thread_status[cpu].queue & 0); /* Need a trick */
WMB;
@ -775,7 +779,12 @@ int exec_blas(BLASLONG num, blas_queue_t *queue){
stop = rpcc();
#endif
if ((num > 1) && queue -> next) exec_blas_async_wait(num - 1, queue -> next);
if ((num > 1) && queue -> next) {
exec_blas_async_wait(num - 1, queue -> next);
// arm: make sure results from other threads are visible
MB;
}
#ifdef TIMING_DEBUG
fprintf(STDERR, "Thread[0] : %16lu %16lu (%8lu cycles)\n",

View File

@ -1153,6 +1153,9 @@ void blas_memory_free(void *free_area){
printf(" Position : %d\n", position);
#endif
// arm: ensure all writes are finished before other thread takes this memory
WMB;
memory[position].used = 0;
#ifdef DEBUG