ARM islemciyi C ile 32 bit kullanma

Başlatan bunalmis, 06 Nisan 2007, 01:13:25

mp3dragon

@bunalmis,

mode geçişlerinde yaşanacak gecikme nedir hiç bir litaratürde gözüme çarpmadı, hatta thumb ve ARM modlarındaki performans ile ilgili bile bir ayrıntılı açıklama veya test görmedim. bu tamamen koşturulan kodun ne olduğu ile alakalı.
yaklaşık 54 - 55 mips de çalışan bir işlemcide oluşacak 15 - 20 ns lik zamanlama hatalarının dikkate alınacağı program herhalde çok sık karşılaşılmaz; ki böyle bir durumda zaten zırt pırt mode değiştirmek yerine kod alanından fedakarlık edip doğrudan ARM modunu kullanmak daha mantıklı.

Keil yukarıda verdiğim linkte bu konu ile ilgili olarak kendilerinin bir ölçüm yapmadığını, philipsinde kendilerine bir döküman vermediğini ancak philipsin çoğu uygulama için thumb modunu tavsiye ettiğini belirtmiş.

Konunun çok ileri uygulamalarda incelenmesi gerekebilir ama başlangıç seviyesinde fazla detaya takılmamak gerektiği kanaatindeyim.
İyilik Yap, Denize At, Balık Bilmezse, Halik Bilir.

kurumahmut

ROM dan fatch edilecek kodun ARM mı thumb mı olduğuna Anlık Program Durum Yazmacı (CPSR-Current Program Status Register) nın 5.bitine göre karar veriliyor. İşlemcinin 32bit olduğu düşünüldüğünde geçişin bir bitin değişim süresi kadar olduğu söylenebilir. Çünkü ARM / thumb modları arası geçişi yapmanın espirisi fatch olayının nasıl olacağını belirtse gerek yani romdan 32bit mi 16bit mi komutlar okuyacağım. Okuyan birimde hep aynı olduğunu düşünürsek geçişin gecikmesi registerın bi bitinin değişimi kadar olduğu söylenebilir. Ancak daha doğru bilgi için araştımak gerekir.

NOT: CPSR yazmacının 5.bitine yani T bitine direk olarak yazılması sakıncalıdır. Bu bitin nasıl değiştirildiği C deki hali dışında yani gerçekte nasıl yapıldığı sorusuna cevap bulunduğunda bitin değişim süresi geçiş süresini verecektir...

ARM ile ilgili stajım da bir çalışma yapmıştım e-dergi nin 2.sayısında yazılmasını planlamıştık Göktuğ ile. Aslında temelleri içeren bir yazı var elimde ama buna bir giriş ve sonuç gibi eklentiler yapılmalı ve geliştirilmeli. Bir süre ARM ile uğraşamayacağım için bu dökümanı başkasına verip dergi için geliştirmesini sağlayabiliriz. Yada olduğu kadarıyla foruma koyabilirim.???

kurumahmut

http://www.embedded.com/shared/printableArticle.jhtml?articleID=15200241

There are several ways to enter or leave the Thumb state properly.


Thumb Up başlığını inceleyin... Bi de bunun kullanılan Compiler da nasıl yaptığına bakmak gerek...


EK:
http://www.cs.cornell.edu/courses/cs414/2001fa/armcallconvention.pdf

Each subroutine pointer encodes the instruction set of its target in its least-significant bit    
(1 => Thumb, 0 => ARM).    

İlk linkte dallanma sırasında bir ekleme yaplarak thumb moda geçiliyordu. Bu kaynakta da sebebini açıklamış.

Bu konuda anahtar kelimeler

APCS ARM Procedure Call Standard
TPCS Thumb Procedure Call Standard
ATPCS ARM-Thumb Procedure Call Standard

Benzer başka bir dökümanda
http://www.arm.com/miscPDFs/8031.pdf



iyi çalışmalar

z

@kurumahmut

Alıntı Yap
"ROM dan fatch edilecek kodun ARM mı thumb mı olduğuna Anlık Program Durum Yazmacı (CPSR-Current Program Status Register) nın 5.bitine göre karar veriliyor. İşlemcinin 32bit olduğu düşünüldüğünde geçişin bir bitin değişim süresi kadar olduğu söylenebilir. Çünkü ARM / thumb modları arası geçişi yapmanın espirisi fatch olayının nasıl olacağını belirtse gerek yani romdan 32bit mi 16bit mi komutlar okuyacağım. Okuyan birimde hep aynı olduğunu düşünürsek geçişin gecikmesi registerın bi bitinin değişimi kadar olduğu söylenebilir. Ancak daha doğru bilgi için araştımak gerekir."

Ornegin 4 asamali pipeline yaparak hiz artirimi yapan islemcilerde pipelining'i bozarsan (pipeline penalty deniyor) artik islemci 4 komut icin yapilmis on hazirligi kaldirip atiyor ilk islenecek kodu isliyor ve pipeliningi yeniden baslatiyor. Bu penalti bugune dek ugrastigim bazi islemcilerde bazi komut dizilimlerinde kolayca olusuyordu. Haliyle hiz ibresi buralarda dusuyor.

ARMda durum ne bilmiyorum eger mod gecisinde boyle bir durum oluyorsa sik sik mod gecisleri zaman kritik uygulamalarda sikinti yaratacaktir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

controller

Alıntı yapılan: "mp3dragon"

4..THUMB modunda yazılan programlar ARM yapısı gereği yaklaşık %30 hızlı çalışır ve daha az yer kaplar.


sanırım burada bir yanlış anlaşılma olmuş.

Alıntı yapılan: "kurumahmut"

ARM / Thumb mode kodun saklanması ile alakalı bir seçimdir. Eğer kodları 16bit olarak saklarsanız. Tekrar 32bite genişletileceğinden yaklaşık %30 hız kaybı yaşarsınız. Ancak ROM da kapladığı alan daralacağından daha fazla kodu işlemciye gömebilirsiniz. Thumb modu kullanmadan kodunuzu derlerseniz 32bite genişletme prosedürü uygulanmayacağından kodunuz gene yaklaşık %30 daha hızlı çalışacaktır. Ancak bu seferde ROMu müsrif kullanacaksınızdır.

bence doğrusu @kurumahmut arkadaşımızın dediği gibi olacak. çünkü;

Alıntı Yap
Although the ARM7 is a 32-bit processor, it has a second 16-bit instruction set caled
THUMB. The THUMB instruction set is realy a compressed form of the ARM instruction
set. This alows instructions to be stored in a 16-bit format, expanded into ARM instructions and
then executed. Although the THUMB instructions wil result in lower code performance
compared to ARM instructions
, they wil achieve a much higher code density. So, in order
to build a reasonably-sized application that wil fit on a smal single chip microcontroler, it
is vital to compile your code as a mixture of ARM and THUMB functions. This process is
caled interworking and is easily supported on al ARM compilers. By compiling code in the
THUMB instruction set you can get a space saving of 30%, while the same code compiled
as ARM code wil run 40% faster.



hem daha hızlı çalışıp hem de daha az yer kaplayacaksa kim ARM moduna ihtiyaç duyarki?
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

nthere

Alıntı:

Although the ARM7 is a 32-bit processor, it has a second 16-bit instruction set caled
THUMB. The THUMB instruction set is realy a compressed form of the ARM instruction
set. This alows instructions to be stored in a 16-bit format, expanded into ARM instructions and
then executed. Although the THUMB instructions wil result in lower code performance
compared to ARM instructions, they wil achieve a much higher code density. So, in order
to build a reasonably-sized application that wil fit on a smal single chip microcontroler, it
is vital to compile your code as a mixture of ARM and THUMB functions. This process is
caled interworking and is easily supported on al ARM compilers. By compiling code in the
THUMB instruction set you can get a space saving of 30%, while the same code compiled
as ARM code wil run 40% faster.



hem daha hızlı çalışıp hem de daha az yer kaplayacaksa kim ARM moduna ihtiyaç duyarki?


Konuyu çok iyi toparlamıssınız fakat son cümleniz sanırımki yanlış.
THUMB instruction set you can get a space saving of 30%, while the same code compiled as ARM code wil run 40% faster.
Ben yanlış anlamadıysam aynı kaynak kodunu thumb komut setine göre derlediğimizde %30 yer kazancı sağlıyoruz, fakat Arm komut seti ile derleme yaptığımızda %30 yer kazancı yerine thumba göre %40 hız kazancı elde ediyoruz.

controller

Alıntı yapılan: "enderpiyale"Alıntı:

Although the ARM7 is a 32-bit processor, it has a second 16-bit instruction set caled
THUMB. The THUMB instruction set is realy a compressed form of the ARM instruction
set. This alows instructions to be stored in a 16-bit format, expanded into ARM instructions and
then executed. Although the THUMB instructions wil result in lower code performance
compared to ARM instructions, they wil achieve a much higher code density. So, in order
to build a reasonably-sized application that wil fit on a smal single chip microcontroler, it
is vital to compile your code as a mixture of ARM and THUMB functions. This process is
caled interworking and is easily supported on al ARM compilers. By compiling code in the
THUMB instruction set you can get a space saving of 30%, while the same code compiled
as ARM code wil run 40% faster.



hem daha hızlı çalışıp hem de daha az yer kaplayacaksa kim ARM moduna ihtiyaç duyarki?


Konuyu çok iyi toparlamıssınız fakat son cümleniz sanırımki yanlış.
THUMB instruction set you can get a space saving of 30%, while the same code compiled as ARM code wil run 40% faster.
Ben yanlış anlamadıysam aynı kaynak kodunu thumb komut setine göre derlediğimizde %30 yer kazancı sağlıyoruz, fakat Arm komut seti ile derleme yaptığımızda %30 yer kazancı yerine thumba göre %40 hız kazancı elde ediyoruz.

@enderpiyale

aynı şeylerden bahsediyoruz, benim son cümlemde bir yanlışlık yok. ben son cümlemi thumb mod için yazdım. yani daha da açık hali;

"thumb mod ile derlenen kod hem daha hızlı çalışıp hem de daha az yer kaplayacaksa kim ARM mod ile derlenmiş koda ihtiyaç duyar ki?"
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

nthere

@controller

Benimde demek istediğim thumb mod sadece az yer kaplıyor hızlı çalışmıyor. Hızlı olan ARM

controller

Alıntı yapılan: "enderpiyale"@controller

Benimde demek istediğim thumb mod sadece az yer kaplıyor hızlı çalışmıyor. Hızlı olan ARM

@enderpiyale

ben farklı birşeymi söylüyorum, benimde son cümlemde vurgulamak istediğim bu zaten. okuduğuzu anlamakta güçlük çekiyorsunuz galiba.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.