2

Linux 64 ビット用の Oracle (Sun) Studio 12.2 C/C++/Fortran コンパイラには、gcc で提供されている __sync_fetch_and_add 関数と同等のものがありますか? Intel アトミックのラッパー コードが Sun のドキュメントにも、Sun Studio インストールの .h ファイルにも見つからないようです。つまり、私が検索するのが下手なだけか、それとも存在しない可能性があるかのどちらかがわからないということです。

Test-and-set、Compare-and-swap、Fetch-and-foo などの Sun C/C++ コンパイラを使用して、インテル i7 で利用可能なアトミック ハードウェア関数にアクセスする必要があります。

これは、私がアセンブリ プログラマーではなく、これが GCC コンパイラではなく Sun コンパイラであるため、gcc のオープン ソース実装から asm コードをコピーしても必ずしもうまくいくとは限らず、最終的には 64 ビット コンパイラであり、そのため、簡単に見つかる 32 ビットの例が 64 ビット システムで正しく動作するとは限りません。

背景: 目的は、これらの特定のハードウェア アトミックを必要とするマルチコア用のいくつかの並行プログラムを実装することです。

読んでくれてありがとう。

4

1 に答える 1

4

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

于 2012-02-06T23:36:50.173 に答える