Windows CE 6.0 menggantikan memcpy Cortex A8

Saya bekerja dengan Freescale i.Mx51 dan ingin mengganti fungsi memcpy Windows CE 6.0 dengan fungsi memcpy berbasis NEON.

Saya temukan di Beranda ARM (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka13544.html) beberapa kode cara kerjanya.

Masalah pertama saya adalah: Di mana saya dapat menemukan kode memcpy di proyek pembuat platform saya dan bagaimana cara mengubah kodenya? Saya menemukan Tutorial (http://blogs.msdn.com/b/ce_base/archive/2007/01/15/replacing-a-coredll-component-in-yamazaki.aspx) untuk menggantikan showerr di coredll tetapi Halaman sudah terlalu tua dan tidak ada Tangkapan Layar lagi.

Saya mencoba melakukan hal yang sama dengan memcpy tetapi saya terhenti tanpa semua tangkapan layar.

Masalah kedua adalah: Apakah saya harus melakukan beberapa hal lagi untuk menyalin beberapa data atau apakah kode assembler ini cukup:

NEONCopyPLD
      PLD [r1, #0xC0]
      VLDM r1!,{d0-d7}
      VSTM r0!,{d0-d7}
      SUBS r2,r2,#0x40
      BGE NEONCopyPLD

Mungkin seseorang pernah melakukan hal yang sama sebelumnya atau mengetahui cara mengubah kode memcpy.

Salam Hormat Jens


person Jens S    schedule 01.09.2014    source sumber
comment
Pada poin terakhir, coba gunakan kode itu ke memcpy 17 byte ke dalam buffer di tumpukan dan lihat apa yang terjadi... ;)   -  person Notlikethat    schedule 02.09.2014
comment
memcpy NEON saya panjangnya 344 baris :)   -  person Jake 'Alquimista' LEE    schedule 02.09.2014


Jawaban (2)


Kode Anda kemungkinan besar akan mogok karena kesalahan penyelarasan.

Anda harus menggunakan vld1.8 dan vst1.8 untuk menghindari hal ini.

Selanjutnya, Anda harus memeriksa ukuran dan kondisi penyelarasan di awal dan mencabang ke bagian yang dioptimalkan secara individual.

Terakhir, sejajarkan tujuan ke 64 byte dan salin 64 byte per iterasi untuk throughput data maksimum.

Anda tidak memerlukan pengetahuan tentang NEON, tetapi aliran kontrol melalui ARM dan perilaku cache.

person Jake 'Alquimista' LEE    schedule 02.09.2014

Anda mungkin dapat menggantinya dengan membangun kembali versi coredll Anda sendiri, tapi ini rumit dan memerlukan pengetahuan yang baik tentang sistem pembangunan. Anda juga harus mempertimbangkan bahwa CE 6 tidak menyimpan register NEON pada sakelar konteks secara default, ini memerlukan beberapa dukungan tambahan di BSP. Mungkin menjelaskan mengapa Anda ingin memcpy iper-optimize pada Windows CE dapat menyebabkan seseorang menyarankan solusi yang lebih baik.

person Valter Minute    schedule 02.09.2014
comment
Ya, saya terjebak pada tutorial ini blogs.msdn.com/b/ce_base/archive/2007/01/15/ langsung saja Perintah yang ingin kita jalankan sederhana – kita ingin mengatur lingkungan lokal, ubah ke direktori tempat sumber perpustakaan "showerr" baru kita berada, dan jalankan pembangunan yang bersih. Langkah-langkah ini dilakukan dengan menggunakan perintah yang kami masukkan ke dalam file batch kami: karena tidak ada tangkapan layar dengan informasinya. Kami melakukan banyak hal dan berharap ini akan mempercepat sistem kami. - person Jens S; 02.09.2014
comment
Untuk mempercepat blitting pada sistem Anda, Anda perlu mengoptimalkan driver tampilan Anda, bukan memcpy. Tidak diperbolehkan bahwa driver tampilan menggunakan memcpy sama sekali. Jika kode Anda sendiri yang menggunakan memcpy untuk mengimplementasikan blitting, maka akan lebih mudah untuk mengubahnya di sana. Mengubah perilaku fungsi ini dapat berdampak pada bagian lain dari sistem dengan masalah penyelarasan, dll. Dan, seperti yang saya katakan di posting saya sebelumnya, CE6 tidak menyimpan register NEON pada sakelar konteks. - person Valter Minute; 03.09.2014