Zgodnie z dokumentacją, Atomic obsługuje T, który jest typu integralnego, typ wyliczeniowy lub typ wskaźnika. Czy Intel TBB obsługuje oficjalnie platformy typu float/debel? Widziałem kilka poprawek here i Rafa Schietekata here, które mogły/nie mogły zostać włączone do najnowszej wersji 4.0. Z łatek, które przeczytałem, jedyną istotną różnicą, jaką zauważyłem, było dodanie reinterpret_cast z typu całkowitego do float/double. Jeśli ktokolwiek mógłby to wyjaśnić, byłbym wdzięczny. Dzięki!Atomowe doubles/float w Intel TBB
Odpowiedz
Możesz łatwo dodać obsługę liczb zmiennoprzecinkowych, budując na liczbach całkowitych 64- i 32-bitowych. Atomowe ładowanie/przechowywanie/wymiana może być zaimplementowane jako bezpośrednie owijarki za pomocą reinterpret_cast, atomowe operacje arytmetyczne mogą być realizowane za pomocą pętli z atomową porównawczą wymianą.
C++ 11 obsługuje atomowe pływaki i duble. Funkcje arytmetyczne, takie jak std::atomic_fetch_add
, są obsługiwane tylko w przypadku typów integralnych.
Jeśli masz kompilator C++ 11, polecam przejść na std::atomic
, więc nie musisz polegać na nieudokumentowanym zachowaniu.
Test dla nie-integralnych typów w test_atomic.cpp został dodany w 2008 (wkrótce po czasie dyskusji z Rafem). W związku z tym, nawet od wczesnego czasu, TBB obsługuje float & double atomics (choć ograniczone tylko do fetch_and_store i compare_and_exchange tylko do odczytu-modyfikacji-zapisu).
- 1. Licencja Intel TBB
- 2. Liczba wątków używanych przez Intel TBB
- 3. pthread kontra intel TBB i ich związek z OpenMP?
- 4. Operacje atomowe w C++
- 5. Jak zbudować OpenCV z TBB?
- 6. Czy + =, | =, & = itd. Atomowe?
- 7. Czy "ConcurrentHashMap.putAll (...)" jest atomowe?
- 8. Java - usuwanie atomowe (niepustego) katalogu
- 9. Jak działają żądania atomowe Django?
- 10. Fałsz Udostępnianie i Zmienne atomowe
- 11. Czy Ruby ma zmienne atomowe?
- 12. "Atomowe" wołanie do cout w MPI
- 13. Atomowe otwarcie nieistniejącego pliku w Perlu
- 14. Operacje atomowe dla shared_ptr w C++ 11
- 15. Jakie operacje są operacje atomowe
- 16. Czy Intel Xeon Phi jest dostępny bez kosztownego kompilatora Intel?
- 17. Optymalizowanie kodu za pomocą Intel® Intel SSE do wektoryzacji
- 18. Przyspieszenie częstotliwości Intel MSR
- 19. Programowanie chipsetów Intel
- 20. Problemy z intrinsics intel
- 21. Emulowanie instrukcji Intel TSX
- 22. Jak dodać dll strony trzeciej w Tridion dla C# TBB?
- 23. Intel Inspektor raportuje wyścig danych w mojej implementacji spinlock
- 24. Wykrywanie trybu C++ 0x w Intel C++?
- 25. Intel HAXM nieobsługiwany w systemie Windows 8
- 26. static_assert i Intel kompilator C++
- 27. Atomowe minimum na x86 przy użyciu OpenMP
- 28. Atomowe zapisywanie do pliku na Linuksie
- 29. Operacje atomowe C++ dla struktur bez blokady
- 30. Czy kwerenda MySQL zawierająca pod-zapytanie atomowe?
Warto również zauważyć, że funkcje arytmetyczne mogą być łatwo i efektywnie emulowane za pomocą 'std :: atomic'. –
Interesujące. Jaki jest najlepszy sposób na zrobienie tego? Czy to pętla porównania i wymiany? (Pobierz aktualną wartość i spróbuj zamienić ją na nowy wynik.Jeśli się nie powiedzie, ponieważ wartość została zmieniona, spróbuj ponownie.) –
Tak, właśnie tak. –