Saya mencoba menerjemahkan kode C/C++ ini ke fungsi SIMD Intrinsik.
for(int i=0 ; i < length ; i++)
A[i] = B[C[i]];
Saya dapat menerjemahkan kode di bawah ini (C/C++)
for(int i=0 ; i < length ; i++)
A[i] = B[i];
ke kode SIMD (menggunakan fungsi Intrinsik)
for(int i=0 ; i < length-16 ; i+=16) {
uint8x16_t v0 = vld1q_u8(A+i);
vst1q_u8(A+i, v0);
}
Saya tahu kata kunci itu disisipkan untuk menyelesaikan masalah ini. Tapi saya tidak dapat menemukan solusi.
Terima kasih.
EditFor more information
unsigned char A [32] = {0,}; // Output Array
unsigned char B [20] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; // An array with values to pass to A Array
unsigned int C [32] = {19,15,11,10,5,3,6,4,5,19,10,14,16,14,8,9,10,20,11,1, 0, 3, 5, 19, 20, 11, 13, 9, 30, 31, 7}; // An array with the index information of the B array.
Apakah ada fungsi intrinsik yang dapat membuat bentuk kode berikut?
int length = 32;
For (int i = 0; i < length-8; i+=8)
{
Uint8x8_t v_idx = vld1_u8 (C + i);
Uint8x8_t v = func (A, v_idx); // func (uint8_t, uint32x4_t)
vst1_u8(C+i, v);
}
Akan menghasilkan 20, 16, 12, 11, 6, 4, 7, 5, 6, 6, 20, 11, 15, 17, 15, 9, 10, 11, 21, 12, 2, 1, 4, 6, 20, 21, 12, 14, 10, 31, 32, 8
[Catatan]
A dan B adalah tipe uint8_t * karena merupakan gambar dengan nilai antara 0 dan 255, dan C adalah tipe uint32_t * karena diindeks oleh indeks B.
C
memiliki struktur tertentu. Secara umum ini adalah pertemuan, saya harap tidak. Apa ituC
? - person harold   schedule 04.06.2017C
adalah array yang memiliki nilai indeksB
. - person Byeongju Park   schedule 05.06.2017