Bazı kodları yazıyorum ve SIMD intrinsics SSE2/3 kullanarak hızlandırmaya çalışıyorum. Benim kodum böyle bir doğaya sahip, bu yüzden bir veriyi bir XMM kaydına yüklemem ve bir çok defa hareket etmem gerekiyor. Oluşturulan assembler koduna baktığımda, GCC'nin XMM0 ve XMM1'de başka bir şeyi yeniden yüklemek için verileri belleğe geri çekmeye devam ettiği görülüyor. X86-64 için derledim, bu yüzden 15 kaydım var. GCC neden sadece iki tane kullanıyor ve daha fazla kullanmasını istemek için ne yapabilirim? Bir kayıtta "değeri" tutabileceğim bir yol var mı? "Kayıt" anahtar kelimemi değişken tanımıma ekledim, ancak oluşturulan derleme kodu aynı.GCC, intrinsics kullanırken ikiden fazla SIMD kaydı kullanmak için nasıl kullanılır?
cevap
Evet, yapabilirsiniz. Explicit Reg Vars, bir değişkeni belirli bir kayda bağlamak için gereken sözdizimini anlatır.
Denedim kayıt * __m128i v0 asm ("xmm7"); << ama derleyici bundan hoşlanmaz >> hata: beklenen '=', ',', ';', 'asm' veya '__attribute__' önce 'asm' <<. – florin
#include
Her intrinsik için ayrı ayrı yazmaçları belirttiğiniz noktaya ulaşıyorsanız, derleme dizini de yazabilirsiniz, özellikle de gcc'nin birçok durumda gereksiz yere iç karartıcılıktan kaçınma alışkanlığı vardır.
- 1. gcc, simd intrinsics ve hızlı matematik kavramları
- 2. Bu GCC kodunun eşdeğerini almak için MSVC intrinsics nasıl kullanılır?
- 3. İkiden fazla yineleyici nasıl sıkıştırılır?
- 4. ikiden fazla vektörlere Matlab
- 5. iOS'ta ARM intrinsics nasıl kullanılır?
- 6. mongodb İkiden fazla tarih
- 7. İkiden fazla HashSets arasındaki kesişimi nasıl hesaplarım?
- 8. Paramiko kaydı nasıl kullanılır?
- 9. İkiden fazla miras için nonvirtual arabirim deyimi mi?
- 10. JPA İfade SQL ikiden fazla sütun
- 11. C# Zip'de ikiden fazla genel liste nasıl birleştirilir?
- 12. Neden kodum ikiden fazla veri alanı saklamıyor?
- 13. Log4c'yi kullanarak günlük kaydı nasıl kullanılır?
- 14. gcc argümanı kaydı x86-64 üzerinde dökülüyor
- 15. nasıl SIMD vektör
- 16. gcc inline simd montaj hatası: kısa tip movdqu talimatı
- 17. SSE intrinsics için Neon eşdeğeri
- 18. gcc newlibc uygulamasının özel işlevlerini kullanmak için nasıl zorlayabilirim?
- 19. NEONU intrinsics
- 20. Twitter Bootstrap ScrollSpy işlevini kullanmak için nasıl kullanılır
- 21. gcc march = native varsayılan olarak nasıl kullanılır?
- 22. Mac'te gcc ile openGL nasıl kullanılır?
- 23. Ne gcc seçeneği, SSE intrinsics için anında işlenenlerle döngü açmayı sağlar?
- 24. Ortak SIMD teknikleri
- 25. Bu "adım tabanlı" python sohbet sunucusunu ve istemciyi ikiden fazla örneği desteklemesi için nasıl geliştirebilirim?
- 26. ARM Neon intrinsics kullanarak 128-bit rotasyon
- 27. GCC optimize std :: bağı sadece okunabilirlik için kullanılır mı?
- 28. birden fazla SPF kaydı: gmail ve Mailgun
- 29. SIMD std :: nth_element Uygulaması
- 30. Gcc ile birden fazla __attribute__ birden fazla gc
Aynı sorunu yaşıyorum, ARM ile. Kullandığım sözdizimi AFAICT doğru - GCC belgelerinde belirtilenle eşleşiyor. Ancak, aynı hatayı alıyorum ... En son KİK'lerin bu bağlamda takıldığını merak ediyorum. –
Ah - özür dilerim - yorum aslında florin'in aşağıdaki cevaba yaptığı açıklamada açıkladığı problemle ilgili olarak (asm ("regname") kullanarak bir hata üretir). –
Bu davranışın ortak bir nedeni optimizasyonlar (-O1, -O2 veya -O3) sağlayan, optimizasyonlar olmadan intrinsik kullanırken bellek her zaman floş olacak ve esas olarak sadece 2-3 simd registerları kullanacaktır – jtaylor