<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      zyl910

      優(yōu)化技巧、硬件體系、圖像處理、圖形學(xué)、游戲編程、國際化與文本信息處理。

        博客園 :: 首頁 :: 博問 :: 閃存 :: 新隨筆 :: 聯(lián)系 :: 訂閱 訂閱 :: 管理 ::

      作者: zyl910

      發(fā)現(xiàn).NET8增加了Arm架構(gòu)的多寄存器的查表函數(shù)(VectorTableLookup/VectorTableLookupExtension),這給編寫SIMD向量化算法帶來了方便。

      一、指令說明

      在學(xué)習(xí)Arm的AdvSimd(Neon)指令集時,發(fā)現(xiàn)它的Lookup(查表)功能,類似X86的Sse系列指令集中的字節(jié)Shuffle(換位。如 _mm_shuffle_epi8 )功能。
      而且Arm的Lookup不僅支持單個向量的查表,且支持多個向量的查表。具體來說,是2~4個向量。
      單個向量查表(如 vqvtbl1q_u8)時,只能在 16字節(jié)(128位)的范圍內(nèi)進(jìn)行查表。而使用4個向量查表(如 vqtbl4q_u8 )時,能在 16*4=64字節(jié)(512位)的范圍內(nèi)進(jìn)行查表。

      .NET 5.0開始支持Arm的內(nèi)在函數(shù),但當(dāng)時僅支持單個向量查表。
      現(xiàn)在 .NET 8.0 補(bǔ)上了這個空缺。

      二、API文檔的變化

      對于AdvSimd.Arm64.VectorTableLookup 方法,.NET 5.0 的文檔是只有2個重載。

      VectorTableLookup(Vector128<SByte>, Vector128<SByte>)    // int8x16_t vqvtbl1q_s8(int8x16_t t, uint8x16_t idx)
      VectorTableLookup(Vector128<Byte>, Vector128<Byte>)    // uint8x16_t vqvtbl1q_u8(uint8x16_t t, uint8x16_t idx)
      

      到了.NET 8.0 ,文檔多了6個重載。

      VectorTableLookup(ValueTuple<Vector128<Byte>,Vector128<Byte>,Vector128<Byte>,Vector128<Byte>>, Vector128<Byte>)        // uint8x16_t vqtbl4q_u8 (uint8x16x4_t t、uint8x16_t idx)
      VectorTableLookup(ValueTuple<Vector128<Byte>,Vector128<Byte>,Vector128<Byte>>, Vector128<Byte>)    // uint8x16_t vqtbl3q_u8 (uint8x16x3_t t、uint8x16_t idx)
      VectorTableLookup(ValueTuple<Vector128<Byte>,Vector128<Byte>>, Vector128<Byte>)    // uint8x16_t vqtbl2q_u8 (uint8x16x2_t t、uint8x16_t idx)
      VectorTableLookup(ValueTuple<Vector128<SByte>,Vector128<SByte>,Vector128<SByte>,Vector128<SByte>>, Vector128<SByte>)    // int8x16_t vqtbl4q_s8 (int8x16x4_t t、uint8x16_t idx)
      VectorTableLookup(ValueTuple<Vector128<SByte>,Vector128<SByte>,Vector128<SByte>>, Vector128<SByte>)    // int8x16_t vqtbl3q_s8 (int8x16x3_t t、uint8x16_t idx)
      VectorTableLookup(ValueTuple<Vector128<SByte>,Vector128<SByte>>, Vector128<SByte>)    // int8x16_t vqtbl2q_s8 (int8x16x2_t t、uint8x16_t idx)
      

      可見,2、3、4個向量的查表功能都加上了了。隨后再區(qū)分一下 Byte/SByte 這2種類型,于是共增加了 3*2=6 個重載。

      三、官方說明

      查了一下,發(fā)現(xiàn)在官方博文《Arm64 Performance Improvements in .NET 8》(.NET 8 中的 Arm64 性能改進(jìn))里有說明。
      這一段內(nèi)容的機(jī)器翻譯如下。

      VectorTableLookup 和 VectorTableLookupExtension
      在 .NET 8 中,我們在System.Runtime.Intrinsics.Arm命名空間下添加了兩組新的 API:VectorTableLookup和 VectorTableLookupExtension。
      
            public static Vector64<byte> VectorTableLookup((Vector128<byte>, Vector128<byte>) table, Vector64<byte> byteIndexes);
            public static Vector64<byte> VectorTableLookup(Vector64<byte> defaultValues, (Vector128<byte>, Vector128<byte>) table, Vector64<byte> byteIndexes);
      
      讓我們看一下每個 API 的示例。
      
      // Vector128<byte> a = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
      // Vector128<byte> b = 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160
      // Vector64<byte> index = 3, 31, 4, 40, 18, 19, 30, 1
      
      Vector64<byte> ans = VectorTableLookup((a, b), index);
      
      // ans = 4, 160, 5, 0, 30, 40, 150, 2
      
      在上面的示例中,向量 a 和 b 被視為一個表,共有 32 個條目(16 個來自 a,16 個來自 b),索引從 0 開始。如果索引超出范圍,例如在我們的示例中試圖訪問索引 40,API 將返回該超出范圍索引的值 0。
      
      // Vector64<byte> d = 100, 200, 300, 400, 500, 600, 700, 800
      // Vector128<byte> a = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
      // Vector128<byte> b = 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160
      // Vector64<byte> index = 3, 31, 4, 40, 18, 19, 30, 1
      
      Vector64<byte> ans = VectorTableLookupExtension(d, (a, b), index);
      
      // ans = 4, 160, 5, 400, 30, 40, 150, 2
      
      與 VectorTableLookup相反,當(dāng)使用VectorTableLookupExtension方法時,如果索引超出有效范圍,則結(jié)果中的相應(yīng)元素將由參數(shù)中提供的defaultValues值確定。值得注意的是,這些 API 還有其他變體,它們也在 3 實體和 4 實體元組上運(yùn)行,為各種用例提供了靈活性。
      
      在 dotnet/runtime#85189 中,@MihaZupan 利用此 API 優(yōu)化了 IndexOfAny,顯著提高了 30% 的性能。同樣,在 dotnet/runtime#87126 中,@SwapnilGaikwad 顯著增強(qiáng)了 Guid 格式化器的性能,實現(xiàn)了高達(dá) 40% 的性能提升。這些優(yōu)化表明,利用這一強(qiáng)大的 API 可以大幅提高性能。
      

      四、X86平臺的對應(yīng)

      X86的Sse、Avx系列指令集,僅支持單個向量查表。
      直到Avx512系列指令集的出現(xiàn),它增加了2個向量查表的指令 VPERMI2B

      .NET8.0也增加了對Avx512系列指令集的支持,便支持了該指令。

      對于512位向量,可以使用 Avx512Vbmi 類中的方法。

      PermuteVar64x8x2(Vector512<Byte>, Vector512<Byte>, Vector512<Byte>)    // __m512i _mm512_permutex2var_epi8 (__m512i a, __m512i idx, __m512i b)
      PermuteVar64x8x2(Vector512<SByte>, Vector512<SByte>, Vector512<SByte>)    // __m512i _mm512_permutex2var_epi8 (__m512i a, __m512i idx, __m512i b)
      

      對于128、256位向量,可以使用 Avx512Vbmi.VL 類中的方法。

      PermuteVar16x8x2(Vector128<Byte>, Vector128<Byte>, Vector128<Byte>)    // __m128i _mm_permutex2var_epi8 (__m128i a,__m128i idx,__m128i b)
      PermuteVar16x8x2(Vector128<SByte>, Vector128<SByte>, Vector128<SByte>)    // __m128i _mm_permutex2var_epi8 (__m128i a,__m128i idx,__m128i b)
      
      PermuteVar32x8x2(Vector256<Byte>, Vector256<Byte>, Vector256<Byte>)    // __m256i _mm256_permutex2var_epi8 (__m256i a, __m256i idx, __m256i b)
      PermuteVar32x8x2(Vector256<SByte>, Vector256<SByte>, Vector256<SByte>)    // __m256i _mm256_permutex2var_epi8 (__m256i a, __m256i idx, __m256i b)
      

      參考文獻(xiàn)

      使用范例

      posted on 2024-03-23 22:48  zyl910  閱讀(299)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产乱子伦视频在线播放| 在线国产毛片| Y111111国产精品久久久| 欧美zoozzooz性欧美| 青青草国产精品日韩欧美| 岳阳县| 日韩精品亚洲精品第一页| 亚洲香蕉网久久综合影视| 国产美熟女乱又伦AV果冻传媒| 中文在线天堂中文在线天堂| 欧美精品一区二区三区中文字幕| 国产精品护士| 亚洲欧美日韩一区在线观看| 99久久精品国产亚洲精品| 国产精品三级中文字幕| 国产成人综合95精品视频| 国产高清国产精品国产专区| 五月天天天综合精品无码| 亚洲丰满熟女一区二区蜜桃| 平南县| 亚洲va久久久噜噜噜久久狠狠| 久久精品av国产一区二区| 天堂mv在线mv免费mv香蕉| 国自产在线精品一本无码中文 | 黑山县| 国产普通话对白刺激| 亚洲国产欧美在线看片一国产| 99re在线视频观看| 国产精品无码素人福利不卡| 国产suv精品一区二区883| 久久精品国内一区二区三区| 国产99在线 | 亚洲| 日韩av综合免费在线| 激情综合色综合久久综合| 又大又粗又硬又爽黄毛少妇 | 亚洲欧美卡通另类丝袜美腿| 国产台湾黄色av一区二区| 午夜免费视频国产在线| 国产大尺度一区二区视频| 人妻精品动漫H无码中字| 国产亚洲精品成人aa片新蒲金|