memcpy auf arm
-
hi,
wie kann ich memcpy sagen das es bei -O3 optimierung im asm code nur 1 uint32_t pro befehl kopiert werden darf und nicht z.b. 2 uint32 auf einmal: stmiacs r3!, {r1, r12} ... it stores two 32-bit values
os: ubuntu 14.04
platform: armv7l
compiler: arm-linux-gnueabihf-gcc
compiler version: gcc version 4.8.2 (Ubuntu/Linaro 4.8.2-16ubuntu4)
-
Vermutlich gar nicht?
Gegenfrage: wieso willst du das?Und falls es um Memory-Mapped Register oder ähnliches geht hilft vielleicht ne handgeschriebene Kopierschleife mit
uint32_t volatile*
.
-
ich dachte ich könnte meine im moment verwendete for loop mit etwas fertigen beschleunigen...?
-
ich verwende eine mmap auf /dev/uio0
-
Ah, also eh wie ich vermutet habe. Mir ist da nix bekannt (was aber nicht viel heisst, ich programmiere nicht für UNIX/Linux/BSD/...). Hast du mal geguckt was andere UIO Treiber/Anwendungen verwenden?
Ich vermute auch dass man da nicht viel wird rausholen können. Wenn die Reihenfolge wichtig ist dann muss die CPU sowieso ein 32 Bit Wort nach dem anderen übertragen. Und das Lesen bzw. Schreiben aus/nach
/dev/uio{N}
wird vermutlich sowieso ordentlich langsam sein, da halt MMIO.Wenn Source und Target auf
/dev/uio{N}
liegen, dann könnte ich mir vorstellen dass man da 'was optimieren kann. z.B. wenn es erlaubt ist erstmal nen Haufen Werte von Source zu lesen und dann erst nach Target zu schreiben (aber halt alles als einzelne 32 Bit Zugriffe mit der korrekten Reihenfolge). Könnte mir vorstellen dass das u.U. schneller ist -- ist aber auch nur geraten.
-
ich werde mal rumsehen, danke fuer den tipp. es gibt auch noch die moeglichkeit ein DMA zu verwenden... dann laesst sich zeit rausholen?
ist denn zugriff auf /dev/mem schneller als /dev/uio0 ?
-
cccoder schrieb:
es gibt auch noch die moeglichkeit ein DMA zu verwenden... dann laesst sich zeit rausholen?
Mit DMA lässt sich fast immer die CPU entlasten. Ob der Transfer weniger Zeit braucht ist dann ne andere Frage. Wobei meist wohl auch das gegeben ist.
cccoder schrieb:
ist denn zugriff auf /dev/mem schneller als /dev/uio0 ?
Kommt drauf an was dahinter liegt.
Wenn hinter/dev/mem
immer "normales" RAM liegt, dann sollte der Zugriff zumindest nicht langsamer sein, und in vielen Fällen schneller. Falls hinter bestimmten/dev/mem
Pages allerdings auch memory mapped Register bzw. "onboard" Speicher diverser Steckkarten liegen können, dann kann auch dieser Zugriff recht langsam werden.Hast du schonmal probiert den Hersteller deiner Hardware zu kontaktieren, nachzufragen was der empfohlene Weg ist das Ding anzusprechen wenn man maximale Performance will?