gcc (ultime versioni: 4.8, 4.9) hanno una clausola "assume" simile a __assume()
integrata supportata da icc? E.g., __assume(n % 8 == 0);
Clausola "Assume" in gcc
risposta
A partire da gcc 4.8.2, non esiste un equivalente di __assume() in gcc. Non so perché - sarebbe molto utile. suggerito da mafso:
#define __assume(cond) do { if (!(cond)) __builtin_unreachable(); } while (0)
Questo è un vecchio trucco, noto almeno fino al 2010 e probabilmente più lungo. Il compilatore di solito ottimizza la valutazione di "cond" perché qualsiasi valutazione per la quale cond è falsa sarebbe comunque indefinita. Tuttavia, non sembra ottimizzare "cond" se contiene una chiamata a una funzione opaca (non in linea). Il compilatore deve supporre che la chiamata opaca potrebbe avere un effetto collaterale (ad esempio, cambiare un globale) e non può ottimizzare la chiamata, anche se potrebbe ottimizzare qualsiasi computazione e ramificazione sul risultato. Per questo motivo, l'approccio macro è una soluzione parziale, nel migliore dei casi.
Oltre a questo problema, anche in gcc 5.2 e 6.1. cond non viene ottimizzato quando l'espressione sottostante è opaca. Anche se cond è racchiuso in una pura funzione, che si penserebbe che il compilatore sarebbe libero di ottimizzare. Inoltre non ho ancora trovato un modo per rilevare se il compilatore ottimizza le cond. Il che significa che è possibile fare del male alle prestazioni usando questa macro facendo in modo che il compilatore aggiunga silenziosamente codice non necessario. Con l'espressione trasparente la macro funziona molto bene però. – user377178
- 1. PasswordBox non si assume stile
- 2. Adattatore RecyclerView che assume valori errati
- 3. ricorsivo git update-index --assume-invariata
- 4. Annullamento git update-index --assume-invariata
- 5. jquery assume ID elemento? comportamento normale?
- 6. git update-index --assume-invariati restituisce l'errore
- 7. DISTINCT clausola in SQLite
- 8. QueryOver IN Clausola?
- 9. clausola ambigua in Rails
- 10. IN clausola e segnaposti
- 11. Ruby Activerecord clausola IN
- 12. Dove clausola IN in LINQ
- 13. differenza tra clausola ON e clausola using in sql
- 14. Perché la funzione std :: thread assume l'esecuzione per valore?
- 15. OrderBy clausola prima della clausola Where - performance?
- 16. Perché std :: istream non assume la proprietà sul suo streambuf?
- 17. git update-index --no-assume-invariato non funziona
- 18. git checkout genera un errore nei file --assume-immutati
- 19. Tipo di dati che assume solo un intervallo di valori
- 20. Chiamare l'assemblaggio in GCC?
- 21. Contatore atomico in gcc
- 22. Clausola dynamic where in dapper
- 23. Clausola NOT EXISTS in Postgresql
- 24. clausola LIKE in CYPHER Query
- 25. Sequelize - subquery in where clausola
- 26. funzione in cui la clausola
- 27. Dichiarazione variabile in clausola if
- 28. Clausola di pianificazione in OpenMP
- 29. Utilizza parametro in clausola simile in oracle
- 30. Come utilizzare una clausola IN in iBATIS?
Vedere: '__builtin_expect'? https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html –
Sembra che sia per la previsione del ramo, ho bisogno di suggerire al vettore che il numero di cicli è un buon numero. – user2052436
Non ho accesso a icc, è lo stesso di Visual C __assume()? (http://msdn.microsoft.com/en-us/library/1b3fsfxw.aspx) –