كيف يمكنني إعادة ترتيب بيانات المتجهات باستخدام ARM NEONINCICS؟

StackOverflow https://stackoverflow.com/questions/2616274

  •  26-09-2019
  •  | 
  •  

سؤال

هذا يرتبط على وجه التحديد بترميز ARM Neon Simd. أنا أستخدم ARM Neon Instrinsics لوحدة معينة في وحدة فك ترميز الفيديو. لدي بيانات متجهة على النحو التالي:

هناك أربعة عناصر 32 بت في سجل النيون - على سبيل المثال ، Q0 - بحجم 128 بت.

3B 3A 1B 1A

هناك أربعة عناصر أخرى ، 32 بت في سجل النيون الآخر يقول Q1 الذي يبلغ حجمه 128 بت.

3D 3C 1D 1C

أريد أن تكون البيانات النهائية بالترتيب كما هو موضح أدناه:

1D 1C 1B 1A
3D 3C 3B 3A

ما الذي يمكن أن يحققه Instrinsics النيون ترتيب البيانات المطلوب؟

هل كانت مفيدة؟

المحلول

ماذا عن شيء مثل هذا:

  int32x4_t q0, q1;

  /* split into 64 bit vectors */
  int32x2_t q0_hi = vget_high_s32 (q0);
  int32x2_t q1_hi = vget_high_s32 (q1);
  int32x2_t q0_lo = vget_low_s32 (q0);
  int32x2_t q1_lo = vget_low_s32 (q1);

  /* recombine into 128 bit vectors */
  q0 = vcombine_s32 (q0_lo, q1_lo);
  q1 = vcombine_s32 (q0_hi, q1_hi);

من الناحية النظرية ، يجب أن يتجمع هذا إلى تعليمات تحركين فقط لأن VGET_HIGH و VGET_LOW يعتزمان فقط تفسير سجلات 12 بت Q كـ اثنين من السجلات D 64 بت. يجمع VCombine Otoh فقط إلى واحد أو تحركتين (يعتمد على تخصيص التسجيل).

أوه - وترتيب الأعداد الصحيحة في الإخراج يمكن أن يكون الطريق الخطأ بالضبط. إذا كان الأمر كذلك ، فما عليك سوى تبديل الحجج إلى vCombine_S32.

نصائح أخرى

تذكر أن كل سجل Q يتكون من سجلين D ، على سبيل المثال الجزء المنخفض من Q0 هو D0 والجزء العالي D1. في الواقع ، هذه العملية هي مجرد تبديل D0 و D3 (أو D1 و D2 ، فهي غير واضحة تمامًا من عرض البيانات الخاص بك). هناك حتى تعليمات المبادلة للقيام بذلك في تعليمات واحدة!

إخلاء المسئولية: لا أعرف الجوهارات النيون (أنا رمز مباشرة في التجميع) ، على الرغم من أنني سأفاجأ إذا لم يكن من الممكن القيام بذلك باستخدام الجوهارات.

يبدو أنك يجب أن تكون قادرًا على استخدام VTRN التعليمات (على سبيل المثال vtrnq_u32) لهذا.

بيير على حق.

VSWP D0 ، D3

من شأنها أن تفعل.

pierre: قرأت المنشور عن النيون على مدونتك منذ عدة أشهر. لقد فوجئت بسرور بوجود شخص مثلي - كتابة رموز التجميع المحسنة باليد ، كل من ARM و NEON. من الجميل أن أراك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top