In base alla documentazione, un atomico supporta T che è di tipo integrale, tipo di enumerazione o un tipo di puntatore. Il supporto Intel TBB galleggia/raddoppia ufficialmente? Ho visto alcune patch here e da Raf Schietekat here, che potrebbe/non essere stato incorporato nell'ultima versione 4.0. Dalle patch che ho letto, l'unica grande differenza che ho notato è stata l'aggiunta di reinterpret_cast dal tipo intero a float/double. Se qualcuno potesse chiarirlo, lo apprezzerei. Grazie!Doppio atomico/float in Intel TBB
risposta
È possibile aggiungere facilmente il supporto per numeri in virgola mobile che si basano su numeri interi atomici a 64 e 32 bit. Carichi/depositi/scambi atomici possono essere implementati come wrapper diretti usando reinterpret_cast, le operazioni aritmetiche atomiche possono essere implementate usando un ciclo con scambio di confronto atomico.
C++ 11 supporta i galleggianti atomici e i doppi. Le funzioni aritmetiche come std::atomic_fetch_add
sono supportate solo per i tipi interi, tuttavia.
Se si dispone di un compilatore C++ 11, si consiglia di passare a std::atomic
in modo da non dover fare affidamento su comportamenti non documentati.
Il test per i tipi non integrali in test_atomic.cpp è stato aggiunto nel 2008 (subito dopo la discussione con Raf). Quindi, anche in anticipo rispetto al tempo della domanda, TBB supporta la doppia atomica fluttuante & (sebbene limitata solo alle operazioni fetch_and_store e compare_and_exchange read-modify-write).
- 1. Licenza Intel TBB
- 2. Intel TBB: pool di grafici
- 3. Come funziona scalable_allocator di Intel TBB?
- 4. Intel TBB per Android e iOS
- 5. pthread vs intel TBB e la loro relazione con OpenMP?
- 6. Come si installa Intel TBB su OS X?
- 7. più semplice TBB esempio
- 8. OpenCV TBB IPP Funzioni OpenMP
- 9. doppio? = doppio? + doppio?
- 10. Come posso creare OpenCV con TBB?
- 11. Intel Xeon Phi è utilizzabile senza un costoso Compilatore Intel?
- 12. Assemblaggio in linea Intel in stile gcc
- 13. Libreria standard Intel (C++)
- 14. Compilatore Intel C++ in alternativa a Microsoft?
- 15. Intel HAXM non supportato in Windows 8
- 16. Formato doppio in C#
- 17. Prestazioni MKL su Intel Phi
- 18. static_assert e Intel C++ compilatore
- 19. CPUID su processori Intel i7
- 20. Intel SGX Threading e TCS
- 21. Emulazione di istruzioni Intel TSX
- 22. Intel OpenCL vs. Khronos OpenCL
- 23. Installazione Intel HAXM non riuscita
- 24. Accesso modello di pagina metadati da un Razor TBB
- 25. Come installare TBB dal sorgente su Linux e farlo funzionare
- 26. usa il doppio più veloce del float?
- 27. Hash a doppio in Java
- 28. Ottimizzare doppio loop in pitone
- 29. Converti doppio in stringa C++?
- 30. Usa doppio punto (: :) in #define
Vale anche la pena notare che le funzioni aritmetiche possono essere emulate facilmente ed efficientemente con 'std :: atomic'. –
Interessante. Qual'è il miglior modo di farlo? È un ciclo di confronto e scambio? (Recupera il valore corrente e prova a scambiarlo con il nuovo risultato. Se fallisce perché il valore è stato modificato, riprova.) –
Sì, è così. –