Компилятор Sun эквивалентен gcc __sync_fetch_and_add? иначе Oracle Studio 12.2 - PullRequest
2 голосов
/ 05 мая 2011

Имеется ли в компиляторе Oracle (Sun) Studio 12.2 C / C ++ / Fortran для Linux 64-разрядная версия, эквивалентная функции __sync_fetch_and_add, предоставляемой в gcc? Я не могу найти код обертки для Intel Atomics в документации Sun или файлы .h в моей установке Sun Studio. Это означает, что я либо плохо разбираюсь в поисках, либо, возможно, его не существует, не знаю, какой именно.

Мне нужен доступ к любым элементарным аппаратным функциям, доступным на Intel i7 с использованием компиляторов Sun C / C ++, таким как Test-and-set, Compare-and-swap, Fetch-and-foo.

Это осложняется тем фактом, что я не программист на ассемблере, и что это компилятор Sun, а не компилятор GCC, поэтому копирование кода asm из реализации открытого исходного кода gcc не обязательно будет работать, и, наконец, это 64 битный компилятор и аппаратное обеспечение, поэтому легко найти 32-битные примеры не обязательно будут работать в 64-битной системе.

Справочная информация: Цель состоит в том, чтобы реализовать несколько параллельных программ для многоядерных систем, которые требуют именно этих аппаратных компонентов.

Спасибо за чтение.

1 Ответ

4 голосов
/ 07 февраля 2012

Из документации Oracle вам необходимо включить atomic.h и использовать один из следующих:

uint_t atomic_add_int_nv(volatile uint_t *target, int delta);
uint64_t atomic_cas_64(volatile uint64_t *target, uint64_t cmp, uint64_t newval);
void atomic_or_32(volatile uint32_t *target, uint32_t bits);

... и т. Д.

http://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hr06/index.html

...