To Thumb or Not to Thumb
Contents
Project Name
To Thumb? or Not to Thumb?
Project Description
Fedora-ARM does not use thumb. The purpose of this project is to discover whether thumb provides any significant savings in terms of code size, whether programs compiled to thumb execute more quickly or more slowly than non-thumb programs on common ARM processors, whether a thumb compilation takes more or less time than non-thumb, and whether there are any other factors that would influence the decision to support thumb. Ultimately, this project should make a recommendation on the use of the thumb instruction set for the Fedora-ARM secondary architecture.
Project Leader(s)
I will be working alone for this project.
My name is Tae Hee (Tyler) Lee and I'm taking SBR600 course in 2010 Winter Semester.
Blog @ [[1]]
thlee3 @ FAS2
thlee3 @ irc://irc.mozilla.org/seneca
Tyler.lee @ Open Source Seneca Wiki
thlee3@learn.senecac.on.ca
What I need to learn
- rpmbuild - /usr/lib/rpm/redhat/rpmrc - /usr/lib/rpm/redhat/macros - time - screen - yumdownloader - rpm2cpio
Project Plan
Goals for each release:
- 0.1 Determine whether THUMB gives advantage in file size compared to NON-THUMB.
- 0.2 Compare and contrast file sizes between NON-THUMB, THUMB and THUMB2.
- 0.3 Compare the performance of software compiled with THUMB and NON-THUMB
Test results
Following are the table of file sizes that are produced by rpmbuild in bytes.
w/o Thumb | THUMB | THUMB2 | THUMB / NON-THUMB | THUMB / THUMB2 | |
RPM | 20776 | 20204 | 20328 | 0.9724 | 0.9939 |
Directory | 50892 | 43084 | 42684 | 0.8465 | 1.0093 |
Binary | 38604 | 30796 | 30396 | 0.7977 | 1.0131 |
w/o Thumb | THUMB | THUMB2 | THUMB / NON-THUMB | THUMB / THUMB2 | |
RPM | 422360 | 420788 | 419852 | 0.9962 | 1.0022 |
Directory | 1863679 | 1811467 | 1810431 | 0.9719 | 1.0006 |
Binary | 226464 | 174252 | 173216 | 0.7694 | 1.0060 |
w/o Thumb | THUMB | THUMB2 | THUMB / NON-THUMB | THUMB / THUMB2 | |
RPM | 748180 | 738632 | 736500 | 0.9872 | 1.0029 |
Directory | 2752985 | 2425373 | 2408025 | 0.8810 | 1.0072 |
Binary | 287988 | 233660 | 229712 | 0.8113 | 1.0172 |
w/o Thumb | THUMB | THUMB2 | THUMB / NON-THUMB | THUMB / THUMB2 | |
RPM | 12423104 | 12431184 | 12350600 | 1.0006 | 1.0065 |
Directory | 45780103 | 43891439 | 43730427 | 0.9587 | 1.0037 |
Binary 1 | 4284848 | 3450936 | 3371440 | 0.8054 | 1.0236 |
Binary 2 | 2131228 | 1688860 | 1656092 | 0.7924 | 1.0198 |
w/o Thumb | THUMB | THUMB2 | THUMB / NON-THUMB | THUMB / THUMB2 | |
RPM | 5561088 | 4779800 | 4742828 | 0.8595 | 1.0078 |
Directory | 21295155 | 17055836 | 16987340 | 0.8009 | 1.0040 |
Binary | 5806908 | 3450936 | 3371440 | 0.5943 | 1.0236 |
w/o Thumb | THUMB | THUMB2 | THUMB / NON-THUMB | THUMB / THUMB2 | |
RPM | 744340 | 742784 | 742180 | 0.9979 | 1.0008 |
Directory | 2737195 | 2681159 | 2675975 | 0.9795 | 1.0019 |
Binary | 251844 | 195808 | 190624 | 0.7775 | 1.0272 |
w/o Thumb | THUMB | THUMB / NON-THUMB | |
RPM | 189908 | 189276 | 0.9967 |
Directory | 842194 | 816194 | 0.9691 |
Binary | 117064 | 91064 | 0.7779 |
w/o Thumb | THUMB | THUMB / NON-THUMB | |
RPM | 116560 | 115736 | 0.9929 |
Directory | 263922 | 252086 | 0.9551 |
Binary | 61708 | 49872 | 0.8082 |
w/o Thumb | THUMB | THUMB / NON-THUMB | |
RPM | 49476 | 49232 | 0.9951 |
Directory | 109233 | 103449 | 0.9470 |
Binary | 33024 | 28076 | 0.8502 |
w/o Thumb | THUMB | |
1st Attempt | real 0m33.013s user 0m0.090s sys 0m3.800s |
real 0m45.746s user 0m0.170s sys 0m3.710s |
2nd Attempt | real 0m38.410s user 0m0.150s sys 0m3.860s |
real 0m40.039s user 0m0.130s sys 0m3.760s |
3rd Attempt | real 0m37.572s user 0m0.110s sys 0m3.820s |
real 0m42.034s user 0m0.140s sys 0m3.820s |
4th Attempt | real 0m36.934s user 0m0.150s sys 0m3.670s |
real 0m43.051s user 0m0.100s sys 0m3.830s |
From a test performed on 2011-11-12 by CTyler:
........ -O2.. -g... -g stripped nonthumb 48576 98132 37900 thumb... 40563 93107 29932
Project Details
To be added.
Project News
October 8th, 2010 - Project started
October 14th, 2010 - Major project page update with more information.
Resources
ARM Architecture - http://en.wikipedia.org/wiki/ARM_architecture#Thumb
Introduction to ARM thumb - http://www.eetimes.com/discussion/other/4024632/Introduction-to-ARM-thumb