Raspberry Pi 4

4 views
Skip to first unread message

Matti Lehtiniemi

unread,
Mar 24, 2020, 3:09:51 AM3/24/20
to
On tuossa pitkään pitänyt ottaa Linux kakkoskoneeksi , mutta asunnossani
ei ole oikein tilaa toiselle koneelle.On päässyt jopa UNIX -taidot
ruostumaan.

Innostuin sitten ostamaan Powerista 50 eurolla Raspberry Pi 4:n viime
syksynä(2 gigan muistilla).Sain nyt pari kuukautta sitten sen toimimaan
, kun loputkin härpäkkeet tuli kiinasta.

Oikein kiva pikku laite.Aluksi en tosin saanut kuvaa näyttöön , piti
väännellä asennustiedostoja Raspbianiin.Vähän ärsyttävää, luulisi että
noista olisi päästy jo eroon.Nimittäin Linux-nörtteilyistä, eihän
tavalliset käyttäjät osaa noita asennustiedostoja coffata.

Olisiko tämä syy, miksi noita 4 gigan aloituspakkauksia saa
verkkokaupasta noin halvalla ? (26% tarjous)

https://www.verkkokauppa.com/fi/product/65499/nftbb/Raspberry-Pi-4-model-B-aloituspakkaus?gclid=CjwKCAjwvOHzBRBoEiwA48i6AtD7l21-5HBKS58wPixXu3Q8X8m6v_2yF1b8_8WAPRsHS2-R6pakeBoCPc8QAvD_BwE

Tarkoitukseni on opetella ARM -assembleria , jotta saisin
niska-perseotteen näistä nykyisistä Android-tableteista ja
kännyköistä.Kääntäsin androidin sorsista ja tutkisin mitä ihmettä siinä
tapahtuu.
Olen ollut suunnattoman tyytyväinen Samsung -Androidtablettiini.Löhöö
vaan sängyssä ja katsoo streameja tai TV-ohjelmia.Tästä oli paljon
hyötyä Fuengirolassa kun ei tv:stä tullut suomi-kanavia.

Kivasti onnistuin pykäämään makefilen melkein vanhasta muistista ja
as-assemblerilla kääntyi ohjelmat.
ARM:sta löytyi mielenkiintoinen ominaisuus, funktiokutsu ilman
paluuosoitteen laittamista pinoon ! (termi Link Register)
Sehän on kätevää, pienentää ja nopeuttaa ohjelmia.Semmoiset
funktio-kutsut, jotka eivät kutsu muita funktioita voidaan tuolla
tavalla laittaa toimiviksi.

Tietääkö kukaan onko Intelin/AMD:n käskykantaan laitettu tuota ?
Ei varmaankaan ?
Kun Intel Architecturissa joudutaan inline:amaan kamaa, niin sehän vie
muistitilaa ja ennen kaikke prossun cachesta, joka hidastaa konetta.
Entäs itse pino ? sehän sijaitsee eri muistialueella kuin ohjelma ja
saatta aiheuttaa prossun cacheen täyttöongelmia.

Jos tuollaiseen Raspberry Pi 4:seen ostaa nopean USB3-kiintolevyn ,niin
onnistuuko Androidin kääntäminen sorsista ? (ilman että hitaus vituttaa)

Pystynkö laittamaan Androidin ja Raspbianin multiboottaamaan ? Jotta
voisin pelata Androidilla nettipokeria ?

(kannattaa huomata että tuollainen mainio pikkutietokone maksaa yhtä
paljon kuin koko Windows 10 -käyttöjärjestelmä)

Matti

Matti Lehtiniemi

unread,
Mar 24, 2020, 7:59:34 AM3/24/20
to
No ei teidän tarvitse tähän vastata.Laiskoja kun olette, ja pystyn aivan
hyvin katsomaan ja googlaamaan videoita.

> Jos tuollaiseen Raspberry Pi 4:seen ostaa nopean USB3-kiintolevyn ,niin
> onnistuuko Androidin kääntäminen sorsista ? (ilman että hitaus vituttaa)

Aika mainio video tohonkin löytyy:
https://www.youtube.com/watch?v=FM9wuFLufyA

Siinä pikku Raspberry muistikortissa on siis DOS FAT osio ja linux osio.
FAT osiolla vaan laitetaan sopivaan tiedostoon root=/dev/sda tms.

rsync taisi olla komento mitä toi heebo käytti siirtämään linuxin
ulkoiselle USB3 -SDA:lle.
Aika nopeaa ja kätevää.

10-kertainen nopeutus odotettavissa kiintolevyllä, kuulostaa mahtavalta.
Voisi hyvin kuvitella että Linuxin kerneli ja Androidin kääntäminen
onnistuu jossain järkevässä ajassa.

Jos vaikka laittaisi 128 gigan kiintolevylle 64 gigaa Linuxille ja 64
gigaa Androidille.
Nettipankit ja nettipokerit appseina Androidille ja kaikki muu käyttö
Linuxilla.

5 wattia energiankulutus, melkein ilmaista netin käyttöä.
Voisi vitsin vuoksi kokeilla Microsoft Windowsista luopumista vaikka
viikoksi.

Vanha kunnon DOS:sin FDISK -komento on hyvin minullakin vielä muistissa
ja näköjään Linuxissakin vielä.

Matti


Ari Saastamoinen

unread,
Mar 24, 2020, 8:25:55 AM3/24/20
to
Matti Lehtiniemi <matti.le...@remove-me.kolumbus.fi> writes:

> Oikein kiva pikku laite.Aluksi en tosin saanut kuvaa näyttöön ,
> piti väännellä asennustiedostoja Raspbianiin.Vähän
> ärsyttävää, luulisi että noista olisi päästy jo
> eroon.Nimittäin Linux-nörtteilyistä, eihän tavalliset käyttäjät
> osaa noita asennustiedostoja coffata.

Toi koko Raspi on nörtteilyhärpäke, jolla ei-nörtit ei edes tee
mitään, niin onpa yllättävää, että sen käyttöönlaittaminen tarttee
nörtteilyä.

Asenna joku Fedora tai Ubuntu ihan tavalliseen desktoppiin, niin ei
välttämättä tartte koskea ainoaankaan konffaustiedostoon.

> Kun Intel Architecturissa joudutaan inline:amaan kamaa, niin sehän
> vie muistitilaa ja ennen kaikke prossun cachesta, joka hidastaa
> konetta.

Ei inline-juttu välttämättä käytä pinoa - riippuu ihan siitä,
millaisen koodinpätkät yrittää inlinettää. Pienimmillään tollainen
inlinetetty juttu lisää lopputulokseen yhden ainoan
assemblerikomennon.

> Entäs itse pino ? sehän sijaitsee eri muistialueella kuin ohjelma ja
> saatta aiheuttaa prossun cacheen täyttöongelmia.

Kyllä voit halutessasi vaikka ajaa ohjelmia suoraan stakistakin (Ellei
erikseen ole laitettu non-executable stakkia päälle. Vai onko se
nykyään jo oletuksena?)

> (kannattaa huomata että tuollainen mainio pikkutietokone maksaa yhtä
> paljon kuin koko Windows 10 -käyttöjärjestelmä)

Vähemmän

--
Arzka oh3mqu+...@hyper.fi - En halua follareita mailina
1. Valitse sopiva paikka, ei ihmisten tai rakennusten lahella, jossa
paukku voi aiheuttaa hairiota. - Iso-Kiinalaisen kayttoohje

Matti Lehtiniemi

unread,
Mar 24, 2020, 10:59:23 AM3/24/20
to
> Toi koko Raspi on nörtteilyhärpäke, jolla ei-nörtit ei edes tee
> mitään, niin onpa yllättävää, että sen käyttöönlaittaminen tarttee
> nörtteilyä.

Häh, miksi ei ihminen kaipaisi halpaa pientä tietokonetta, joka ei
kuluta juuri lainkaan sähköä ja jonka käyttö on yhtä helppoa kun Windowsin.

En minä tiedä nyky-linuxeista, miksi ne olisivat vaativampia ?
Jos sinä saat tehokkaan 4 gigatavun muistilla varustetun tietokoneen
samalla hinnalla mitä koko Windows-maksaa, miksi et ostaisi sellaista ?
Miksi sitä pitäisi käytää nörtteilyyn, esim ledien tai
kiihtyvyysanturien testaamiseen.Ei kukaan ole käskenyt niin tehdä.

Joskushan UNIXissa oli päänsärkyä vaativia ohjelmia ,kuten vi tai
Emacs.Tässä Raspbianissa on Mousepad, joka on täsmälleen yhtä helppo
kuin Windowsin Notepad.

Siinä on heti aloitusnäytössä nettiselain, voi klikata suoraan.Sitten
voi mennä youtubeen katsomaan videoita.Onko se jotenkin helpompaa
Windowsissa ?

> Asenna joku Fedora tai Ubuntu ihan tavalliseen desktoppiin, niin ei
> välttämättä tartte koskea ainoaankaan konffaustiedostoon.

Ei siis ole tilaa kämpässä toiselle koneelle.

> Ei inline-juttu välttämättä käytä pinoa - riippuu ihan siitä,
> millaisen koodinpätkät yrittää inlinettää. Pienimmillään tollainen
> inlinetetty juttu lisää lopputulokseen yhden ainoan
> assemblerikomennon.

Siis inlineä joudutaan käyttämään kun ei ole huippunopeaa Link
Registeriä.Kääntäjä optimoi ne inlinetetyt funktiorivit koodiin.
ARM:ssa niitä ei _tarvitse_ laittaa monessa tapauksessa.Vie vähemmän
muistia.
Sitten ARM:ss on muistin säästämiseksi joku THUMB -systeemi, johon en
ole kunnolla vielä perehtynyt.32 -bittisen koodin sijaan käytetään
16-bittistä,mikä säästää sekin muistia ja tekee prossun cachen
toiminnasta optimoidumpaa.

> Kyllä voit halutessasi vaikka ajaa ohjelmia suoraan stakistakin (Ellei
> erikseen ole laitettu non-executable stakkia päälle. Vai onko se
> nykyään jo oletuksena?)

Siis pino. Minne työnnetään kamaa PUSH:lla ja otetaan POP:lla.Onhan se
eri paikassa kuin koodi.En nyt tiedä modernien prossujen toiminnasta, en
tiedä onko tällä oleellista merkitystä.

sudo apt-get install moria
sudo apt-get install glhack

Pikku hiljaa tässä palautellaan UNIX -ja Linux -taitoja.
Kyllä mä väitän että näillä asioilla on merkitystä.Ihan
persetuntumaltakin oma Samsung Androidini toimii yllättävänkin nopeasti
nettiselaus-käytössä.


Matti

Mikko Tuumanen

unread,
Mar 24, 2020, 12:18:49 PM3/24/20
to
Matti Lehtiniemi <matti.le...@remove-me.kolumbus.fi> kirjoitti 24.03.2020:
> Oikein kiva pikku laite.Aluksi en tosin saanut kuvaa näyttöön , piti
> väännellä asennustiedostoja Raspbianiin.Vähän ärsyttävää, luulisi että

Raspberrypin näyttöliitännän kansssa on tosiaan omituisuuksia, joita
ei ole pc:lle linuxia asennettaessa.

HDMI-johdon päässä olevan näytön tunnistus tehdään bootissa ja sen
jälkeen ei ole mitään ei ole helppoa tapaa selvittää onko johto
irronnut tai mahdollisesti toinen näyttö vaihdettu tilalle.

Löytyy näyttöjä, joiden kanssa raspberry ottaa käyttöön väärän
näyttötilan ja joutuu säätämään asetuksia.


Mikko Tuumanen

unread,
Mar 24, 2020, 12:29:19 PM3/24/20
to
Matti Lehtiniemi <matti.le...@remove-me.kolumbus.fi> kirjoitti 24.03.2020:
> Häh, miksi ei ihminen kaipaisi halpaa pientä tietokonetta, joka ei
> kuluta juuri lainkaan sähköä ja jonka käyttö on yhtä helppoa kun Windowsin.

Yllättävän moni ei nykyään halua edes sitä windowsia, vaan hoitaa
kaikki tietotekniset asiansa kännykällä.

Nörtteilyn lisäksi raspberrypitä käytetään jonkin verran pienissä
yrityksissä, joilla ei ole varaa tehdä/teettää sopivampaa rautaa
itse. Raspin kaltaisia pikkukoneita löytyy markkinoilta runsaasti,
mutta hyvin monen kohdalla on epäilys siitä, saako niitä enää
ensi viikolla vai loppuuko tuotanto, vaihtuuko näytönohjain yllättäen,
tuplaantuuko hinta jne.

Matti Lehtiniemi

unread,
Mar 24, 2020, 2:07:41 PM3/24/20
to
> Yllättävän moni ei nykyään halua edes sitä windowsia, vaan hoitaa
> kaikki tietotekniset asiansa kännykällä.

Näkö voisi olla hyvä syy käyttää Raspbia kännykän sijaan.
Iso ruutu, iso fontti.Se on ainakin minun strategia näkökyvyn säästämiseksi.

> ensi viikolla vai loppuuko tuotanto, vaihtuuko näytönohjain yllättäen,
> tuplaantuuko hinta jne.

Yllättävän kalliita nuo Raspin kaltaiset ovat kiinasta ostettuina.
Käyttääkö aurinkopaneeli-porukka noita tietokoneinaan Kiinassa ?
Pikku-tietokone 5 Wattia ja näyttö ehkä 10 Wattia ?
Ei tarvitse kummallista aurinkopaneelia.

Matti


Ari Saastamoinen

unread,
Mar 25, 2020, 3:57:05 AM3/25/20
to
Matti Lehtiniemi <matti.le...@remove-me.kolumbus.fi> writes:

> Häh, miksi ei ihminen kaipaisi halpaa pientä tietokonetta, joka ei
> kuluta juuri lainkaan sähköä ja jonka käyttö on yhtä helppoa kun
> Windowsin.

Justiinhan sä purnasit nimenomaan siitä, että se ei ollut yhtä
helppokäyttöinen.

> Joskushan UNIXissa oli päänsärkyä vaativia ohjelmia ,kuten vi tai
> Emacs.Tässä Raspbianissa on Mousepad, joka on täsmälleen yhtä
> helppo kuin Windowsin Notepad.

Sekä vi(m) että emacs on molemmat paljon parempia ja monipuolisempia
softia kuin notepad.

> Siis inlineä joudutaan käyttämään kun ei ole huippunopeaa Link
> Registeriä.Kääntäjä optimoi ne inlinetetyt funktiorivit koodiin.

Niinhän toi kääntäjä tekee. Noi kääntäjät on yllättävän fiksuja (Ja
olen lähes varma, että ainakaan et osaa nykyprosessoreille käsin
optimoida koodista parempaa kuin mitä kääntäjä tuottaa jos se koodi on
yhtään monimutkaisempi) Tosin inlineassembleria kääntäjä EI SAA
optimoida, mutta kyllä ne sinne koodin sekaan menee ilman, että niitä
varten tarttee tehdä funktiokutsu.

> Sitten ARM:ss on muistin säästämiseksi joku THUMB -systeemi, johon
> en ole kunnolla vielä perehtynyt.32 -bittisen koodin sijaan
> käytetään 16-bittistä,mikä säästää sekin muistia ja tekee
> prossun cachen toiminnasta optimoidumpaa.

Toi on vähän vastaava kuin x86-lutikoissa on se vanha DOS-moodi (en
muista, mikä sen oikea nimi on) ja sitten toi i386-moodi mitä noi
kaikki modernit käyttikset käyttää.

> Siis pino. Minne työnnetään kamaa PUSH:lla ja otetaan POP:lla.Onhan
> se eri paikassa kuin koodi.En nyt tiedä modernien prossujen
> toiminnasta, en tiedä onko tällä oleellista merkitystä.

Kyllä sama paikka, vaikka ei taideta nykylutikoissa enää käyttää
push/pop:ia, vaan käytetään epäsuoraa movea stackpointterin avulla.

Ari Saastamoinen

unread,
Mar 25, 2020, 4:01:14 AM3/25/20
to
Matti Lehtiniemi <matti.le...@remove-me.kolumbus.fi> writes:

> Näkö voisi olla hyvä syy käyttää Raspbia kännykän sijaan.
> Iso ruutu, iso fontti.Se on ainakin minun strategia näkökyvyn säästämiseksi.

Jos kerran toi on kriteeri, niin mikset sä sitten siihen kännykkään
laita isoa näyttöä? On se silti näppärämpi käyttää kännykkää isolla
näytöllä (ja näppiksellä) kuin jotain erillistä härpäkettä. Toi
kännykkä on sitten jotain raspia näppärämpi ottaa mukaan lähtiessä, ja
samat softat pysyvät edelleen käynnissä yms.

Matti Lehtiniemi

unread,
Mar 25, 2020, 5:00:55 AM3/25/20
to
>
> Niinhän toi kääntäjä tekee. Noi kääntäjät on yllättävän fiksuja (Ja
> olen lähes varma, että ainakaan et osaa nykyprosessoreille käsin
> optimoida koodista parempaa kuin mitä kääntäjä tuottaa jos se koodi on
> yhtään monimutkaisempi) Tosin inlineassembleria kääntäjä EI SAA
> optimoida, mutta kyllä ne sinne koodin sekaan menee ilman, että niitä
> varten tarttee tehdä funktiokutsu.

Mun mielestä se inlineaa ihan c++ -koodiakin.
Eli jos mulla on vaikka vektorien yhteenlaskua

vektori laske_yhteen(vektori a, vektori b)
{
return vektori(a.x+b.x, a.y+b.y, a.z+b.z);
}
niin se automaattisesti inilieaa tuon x86:sessa.
Jos tuon tekee ARM- kääntäjä, niin se ei laita mitään pinoon, vaan
kaikki tapahtuu rekistereissä ja funktiota kutsutaan.
Vektori a:n pointteri laitetaan rekisteriin R1, vektori b:n pointteri
R2:seen , ja paluuosoite LR:ään , eli Link Registeriin.

Tietysti inlinetetty versio on aavistuksen nopeampi, mutta toisaalta jos
noita vektorien yhteenlaskuja on algoritmissa paljon, niin silloin
ilnlinetys vie muistia paljon, mikä kuluttaa prossan välimuistia, eli
cachea.
Silloin inlinetetty x86 systeemi saattaa muuttuakin hitaammaksi
verrattuna ARM-versioon.

> Toi on vähän vastaava kuin x86-lutikoissa on se vanha DOS-moodi (en
> muista, mikä sen oikea nimi on) ja sitten toi i386-moodi mitä noi
> kaikki modernit käyttikset käyttää.

Tossa ARM:ssa se pysyy siinä 32-bittisessä moodissa.Siinä on joku flag
joka ilmoittaa että se suorittaa seuraavaksi 16-bittisiä käskyjä.Eli se
systeemi ei ole rakennettu yhteensopivuutta varten, vaan kuluttamaan
vähemmän muistia.

>> Siis pino. Minne työnnetään kamaa PUSH:lla ja otetaan POP:lla.Onhan
>> se eri paikassa kuin koodi.En nyt tiedä modernien prossujen
>> toiminnasta, en tiedä onko tällä oleellista merkitystä.
>
> Kyllä sama paikka, vaikka ei taideta nykylutikoissa enää käyttää
> push/pop:ia, vaan käytetään epäsuoraa movea stackpointterin avulla.

Niin ne funtioiden sisäiset muuttujat ja ulkoiset parametrit luettaan
Base pointerilla, x86:ssa EBP
Esim [EBP+4]

Base pointteri osoittaa siihen kohtaan pinoa, missä stack pointeri oli
silloin kun funktiota kutsuttiin.

Matti

Ari Saastamoinen

unread,
Mar 25, 2020, 5:14:12 AM3/25/20
to
Matti Lehtiniemi <matti.le...@remove-me.kolumbus.fi> writes:

> Tossa ARM:ssa se pysyy siinä 32-bittisessä moodissa.Siinä on joku
> flag joka ilmoittaa että se suorittaa seuraavaksi 16-bittisiä
> käskyjä.Eli se systeemi ei ole rakennettu yhteensopivuutta varten,
> vaan kuluttamaan vähemmän muistia.

Ei toi moodin vaihtaminen kauhean kevyt operaatio inteleissäkään oo.
Mä olen ymmärtänyt, että sen voisi vaihtaa ainoastaan toiseen
suuntaan.

Matti Lehtiniemi

unread,
Mar 25, 2020, 1:36:27 PM3/25/20
to
vektori laske_yhteen(vektori a, vektori b)
{
   return vektori(a.x+b.x, a.y+b.y, a.z+b.z);
}

Testasin mitä gnu-projekti c++ -kääntäjä, eli g++ tuottaa tuolle
assembleria.Käytin O3 -optimointivipua.

Tuotti tämmöisen:

Z12laske_yhteenR7vektoriS0_:
.fnstart
.LFB1534:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
push {r4, r5, lr}
ldmib r2, {r4, lr}
ldr r3, [r1]
ldr ip, [r1, #4]
ldr r5, [r2]
ldr r1, [r1, #8]
add r2, r3, r5
add ip, ip, r4
add r1, r1, lr
stm r0, {r2, ip}
str r1, [r0, #8]
pop {r4, r5, pc}

On tuossa pushia ja pop:ia .Ei vaikuta kovin optimoidulta.
Ensimmäisellä rivillä oleva link register laitetaan pinoon joka sitten
pop:ataan viimeisellä rivillä suoraan pc:hen ,eli program counteriin.

Milläköhän c++ -kääntäjällä esim Samsungini Android on käännetty ?
Tossahan olisi melkoinen kilpailuetu sille firmalle, joka käyttää
tehokkainta mahdollista kääntäjää.

Jos jotakuta kiinnostaa saman testaus x86 -arkkitehtuurissa, niin laitan
tämä viestin loppuun vektori.cpp ohjelman ja vektori.s assemblerin mitä
ARM:lle generoitiin.
Tämä on oikeastaan pelkkää c:tä, c++ -spesifisiä juttuja en viitsinyt
laittaa selkeyden lisäämiseksi.

Olipa muuten kätevää siirtää tuo raspberry Pi:ltä PC:lle.
5 sekuntia siitä kun huomasin ettei mulla ole raspissa ftp:tä, niin
kirjoitin
sudo apt-get install ftp
Ja viiden sekunnin kulutta siitä mulla oli ftp :)

Matti

Aluksi vektori.cpp

#include <iostream>
using namespace std;

struct vektori
{
int x,y,z;
};

vektori laske_yhteen(vektori &a ,vektori &b)
{
vektori v;
v.x = a.x+b.x;
v.y = a.y+b.y;
v.z = a.z+b.z;
return v;
}

int main()
{
vektori a,b,u;
a = {14, 20 ,30};
b = {20, 30 ,40};
u = laske_yhteen(a,b);
cout << u.x <<" " << u.y << " " << u.z << endl;
return 1;
}

Sitten siitä generoitu assembler-ohjelma:


.arch armv6
.eabi_attribute 28, 1
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 2
.eabi_attribute 34, 1
.eabi_attribute 18, 4
.file "vektori.cpp"
.text
.align 2
.global _Z12laske_yhteenR7vektoriS0_
.arch armv6
.syntax unified
.arm
.fpu vfp
.type _Z12laske_yhteenR7vektoriS0_, %function
_Z12laske_yhteenR7vektoriS0_:
.fnstart
.LFB1534:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
push {r4, r5, lr}
ldmib r2, {r4, lr}
ldr r3, [r1]
ldr ip, [r1, #4]
ldr r5, [r2]
ldr r1, [r1, #8]
add r2, r3, r5
add ip, ip, r4
add r1, r1, lr
stm r0, {r2, ip}
str r1, [r0, #8]
pop {r4, r5, pc}
.cantunwind
.fnend
.size _Z12laske_yhteenR7vektoriS0_, .-_Z12laske_yhteenR7vektoriS0_
.section .text.startup,"ax",%progbits
.align 2
.global main
.syntax unified
.arm
.fpu vfp
.type main, %function
main:
.fnstart
.LFB1535:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
push {r4, r5, r6, lr}
.save {r4, r5, r6, lr}
mov r1, #34
ldr r0, .L6
bl _ZNSolsEi
ldr r4, .L6+4
mov r2, #1
mov r1, r4
mov r5, r0
bl
_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
mov r0, r5
mov r1, #50
bl _ZNSolsEi
mov r2, #1
mov r1, r4
mov r5, r0
bl
_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
mov r1, #70
mov r0, r5
bl _ZNSolsEi
bl _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
mov r0, #1
pop {r4, r5, r6, pc}
.L7:
.align 2
.L6:
.word _ZSt4cout
.word .LC2
.fnend
.size main, .-main
.align 2
.syntax unified
.arm
.fpu vfp
.type _GLOBAL__sub_I__Z12laske_yhteenR7vektoriS0_, %function
_GLOBAL__sub_I__Z12laske_yhteenR7vektoriS0_:
.fnstart
.LFB2024:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
push {r4, lr}
ldr r4, .L10
mov r0, r4
bl _ZNSt8ios_base4InitC1Ev
mov r0, r4
ldr r2, .L10+4
ldr r1, .L10+8
pop {r4, lr}
b __aeabi_atexit
.L11:
.align 2
.L10:
.word .LANCHOR0
.word __dso_handle
.word _ZNSt8ios_base4InitD1Ev
.cantunwind
.fnend
.size _GLOBAL__sub_I__Z12laske_yhteenR7vektoriS0_,
.-_GLOBAL__sub_I__Z12laske_yhteenR7vektoriS0_
.section .init_array,"aw"
.align 2
.word _GLOBAL__sub_I__Z12laske_yhteenR7vektoriS0_
.bss
.align 2
.set .LANCHOR0,. + 0
.type _ZStL8__ioinit, %object
.size _ZStL8__ioinit, 1
_ZStL8__ioinit:
.space 1
.section .rodata.str1.4,"aMS",%progbits,1
.align 2
.LC2:
.ascii " \000"
.hidden __dso_handle
.ident "GCC: (Raspbian 8.3.0-6+rpi1) 8.3.0"
.section .note.GNU-stack,"",%progbits




Tauno Voipio

unread,
Mar 25, 2020, 3:18:55 PM3/25/20
to
Hei,

Lisääpä GNU-kääntäjän komentoriville -Os, ja yritä uudelleen.

--

-TV

Matti Lehtiniemi

unread,
Mar 25, 2020, 4:46:45 PM3/25/20
to
Tauno Voipio kirjoitti 25.3.2020 klo 21.18:
> Hei,
>
> Lisääpä GNU-kääntäjän komentoriville -Os, ja yritä uudelleen.
>

Joo, tosiaan hävis push ja pop.Pitääkin olla tarkkana noiden
optimointien kassa.
Ajattelin että kun -O3 on iso luku että se on tehokkain optimointi
-Os tuottaa nopeampaa kamaa.

Toi on sellaista assembleria mitä minä haluaisin nähdä.Kaikki tapahtuu
rekistereissä.Eikös kun kaikki tapahtuu rekistereissä ,silloin voi
käyttää THUMBia tehokkaasti ?

No joo, olen tässä ARM:n tutkimisessa vasta hyvin alussa.En suoraan
sanottuna osaa tota assembleria edes kunnolla lukea vielä.
Varmaan kannattaisi hankkia se ulkoinenen nopea SSD ja kääntää kerneli
ja Android ennen kun lähtee ihmettelemään tarkemmin Assya.

Tuosta kuitenkin näkee ,että nuo lukuisat monikäyttöiset rekisterit ovat
hyvä valinta.Siinä on rakenteellinen etu x86:seen nähden, ja
mahdollistaa esim. nopean nettisurffaamisen 1.6 Ghz hyvin halvalla
ARM-prossulla.

_Z12laske_yhteenR7vektoriS0_:
.fnstart
.LFB1513:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
ldr ip, [r1]
str lr, [sp, #-4]!
ldr lr, [r2]
add ip, ip, lr
str ip, [r0]
ldr lr, [r2, #4]
ldr ip, [r1, #4]
ldr r2, [r2, #8]
ldr r1, [r1, #8]
add ip, ip, lr
add r1, r1, r2
str ip, [r0, #4]
str r1, [r0, #8]
ldr pc, [sp], #4

Tauno Voipio

unread,
Mar 26, 2020, 4:11:04 AM3/26/20
to
Jos haluat nähdä Thumb-koodia, lisää komentoon
-mthumb, mutta tulos ei varmaan suostu toimimaan
Pi:ssä eikä linkity raspbianin kirjastoihin.

Vielä parempaa koodia saa, kun lisää prosessoriksi
jonkun Cortex-version ha Thumb -koodin.

--

-TV

Matti Lehtiniemi

unread,
Mar 26, 2020, 4:13:49 AM3/26/20
to
Otetaan tuosta assemblerista rivit 2 ja viimeinen rivi
str lr, [sp, #-4]!
ldr pc, [sp], #4

Miksi ei ole laitettu :
push lr
pop pc

Onko noilla kahdella tavalla joku ero ?

ensimmäinen [sp, #-4]! on siis pre-indexed addressing.
toinen [sp], #4 on post indexed addressing.

https://azeria-labs.com/memory-instructions-load-and-store-part-4/

Pino siis kasvaa ARM:ssa alaspäin, niin kuin Commodore 64:ssa ?

Eli

Tauno Voipio

unread,
Mar 26, 2020, 8:17:52 AM3/26/20
to
Lisääpä sille GCC:lle -Wa,-ahlms=minun.lst ja tee koko käännös,
niin näet binäärikooditkin.

Ei-Thumb -koodissa assembleri kääntää push- ja pop -käskyt
samoiksi kuin näit, jos kohteena on vain yksi rekisteri.
Monen rekisterin kohdalla on ldmia ja stmia sp-rekisterin avulla.

Yhden rekisterin kohdalls ldr ja str ovat nopeampia.

--

-TV

Matti Lehtiniemi

unread,
Mar 31, 2020, 11:54:35 AM3/31/20
to
> vektori laske_yhteen(vektori a, vektori b)
> {
>    return vektori(a.x+b.x, a.y+b.y, a.z+b.z);
> }

Koodasin yhtä toista tärkeämpää projektia Visual C++:lla, ajattelin
testata huvin vuoksi että mitä Microsoftin Visual c++ kääntäjä vuodelta
2008 tuottaa tästä.
Tuotti hillittömän pitkän assy-listauksen, mutta onnistuin löytämään
tuon koodinpätkän kaiken tauhkan seasta.(löytyi riviltä 1040)

Kyllä tuo on mun mielestä selvästi hitaampaa kamaa kuin mitä gcc ARM:lle
tuotti.
Käytin tuossa O2 vipua (optimize for speed)
Hieman yllätti ettei tuossa käytetä EBP,base pointeria, mutta suoraan
SP:stä tietysti nopeampi.
Olisiko tuorein Visual C++ parempi optimoija ?
Näytti tuottavan defaulttina 32-bittistä koodia 64:n sijaan.

_TEXT SEGMENT
$T19708 = 8 ; size = 4
_a$ = 12 ; size = 4
_b$ = 16
?laske_yhteen@@YA?AUvektori@@AAU1@0@Z PROC ; laske_yhteen, COMDAT
; File d:\ohjelmointi\omat\raspi\vektori.cpp
; Line 12
mov ecx, DWORD PTR _a$[esp-4]
mov edx, DWORD PTR _b$[esp-4]
mov eax, DWORD PTR $T19708[esp-4]
push esi
mov esi, DWORD PTR [ecx]
add esi, DWORD PTR [edx]
mov DWORD PTR [eax], esi
; Line 13
mov esi, DWORD PTR [ecx+4]
add esi, DWORD PTR [edx+4]
; Line 14
mov ecx, DWORD PTR [ecx+8]
add ecx, DWORD PTR [edx+8]
mov DWORD PTR [eax+4], esi
mov DWORD PTR [eax+8], ecx
pop esi
; Line 16
ret 0

Ketuttaa, toinen näyttö hyytyi.Projektini siirtää Raspbian ulkoiselle
nopealle kovalevylle hidastui(40 euroa) , kun pitää ensin ostaa uusi
näyttö ja etsiä jostain sille rahat.
Näyttö toimi 12 vuotta ja kerrran vaihdoin siihen konkat.

En kyllä suoraan sanottuna tiedä kuinka paljon tuo on Raspia
hitaampi,kun en tiedä miten nopeita/hitaita nuo muistihaut on .
Ehkäpä asia on pikemminkin niin ,että ARM pääsee samaan nopeuteen
halvemmalla prossun rakenteella.

Selittäisi myös miksi Intelin Atom on hävinnyt kilpailussa ARM:lle.

Matti
Reply all
Reply to author
Forward
0 new messages