From 5a6b650d8b461c2ee638e28bb8df845c755025f2 Mon Sep 17 00:00:00 2001 From: Evghenii Date: Tue, 28 Jan 2014 15:56:30 +0100 Subject: [PATCH] restored nonptx atomic_*_local --- examples_ptx/radixSort/radixSort.ispc | 6 ++++++ stdlib.ispc | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/examples_ptx/radixSort/radixSort.ispc b/examples_ptx/radixSort/radixSort.ispc index bb1202ad..3522c33e 100644 --- a/examples_ptx/radixSort/radixSort.ispc +++ b/examples_ptx/radixSort/radixSort.ispc @@ -30,7 +30,13 @@ void countPass( if (reduce_equal(key, &skey) == true) counts[skey] += reduce_add(1); else + { +#ifdef __NVPTX__ + atomic_add_global(&counts[key], 1); +#else atomic_add_local(&counts[key], 1); +#endif + } } #else #endif diff --git a/stdlib.ispc b/stdlib.ispc index 42bb303e..1fccfc03 100644 --- a/stdlib.ispc +++ b/stdlib.ispc @@ -2088,11 +2088,20 @@ static inline TYPE atomic_##NAME##_local(uniform TYPE * uniform ptr, TYPE value) } \ static inline TYPE atomic_##NAME##_local(uniform TYPE * p, TYPE value) { \ TYPE ret; \ + if (__is_nvptx_target) { \ foreach_active (i) { \ uniform TYPE * uniform ptr = (uniform TYPE * uniform)extract((int64)p, i); \ ret = insert(ret, i, *ptr); \ *ptr = OPFUNC(*ptr, extract(value, i)); \ } \ + } else { \ + uniform TYPE * uniform ptrs[programCount]; \ + ptrs[programIndex] = p; \ + foreach_active (i) { \ + ret = insert(ret, i, *ptrs[i]); \ + *ptrs[i] = OPFUNC(*ptrs[i], extract(value, i)); \ + } \ + } \ return ret; \ }