CN110837483B - 张量维度变换的方法以及装置 - Google Patents
张量维度变换的方法以及装置 Download PDFInfo
- Publication number
- CN110837483B CN110837483B CN201910939477.9A CN201910939477A CN110837483B CN 110837483 B CN110837483 B CN 110837483B CN 201910939477 A CN201910939477 A CN 201910939477A CN 110837483 B CN110837483 B CN 110837483B
- Authority
- CN
- China
- Prior art keywords
- dimension
- tensor
- data
- dma
- arrangement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/781—On-chip cache; Off-chip memory
Abstract
本发明提供了一种张量维度变换的方法,包括如下步骤:1)构建DMA读取原始张量数据的维度排布;2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;4)用DMA按照步骤3)中维度交换后的维度排布将数据读取片内缓存中的数据写到目标张量的相应位置。
Description
技术领域
本发明涉及芯片设计领域,尤其涉及一种张量维度变换的方法以及装置。
背景技术
人工智能算法中大部分都存在大量张量维度变换。现有技术中的SOC内部硬件模块内部没有张量维度变换的处理单元,张量维度变换都是使用CPU来实现的。使用CPU实现张量变换的流程:
1逐个计算出张量中的各个元素的目标位置;
2将元素逐个复制到目标位置。
CPU实现张量变换需要大量的运算去计算出元素的目标位置,然后读写数据,运行效率很低。
发明内容
本发明所要解决的技术问题是,提供一种张量维度变换方法,能够提高计算速度,节约系统资源。
为了解决上述问题,本发明提供了一种张量维度变换的方法,包括如下步骤:1)构建DMA读取原始张量数据的维度排布;2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;4)用DMA按照步骤3)中维度交换后的维度排布读取片内缓存中的数据写到目标张量的相应位置。
本发明还提供了一种用于张量维度变换的装置,包括执行器和片内缓存,所述执行器操作所述片内缓存,执行如下步骤:1)构建DMA读取原始张量数据的维度排布;2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;4)用DMA按照步骤3)中维度交换后的维度排布读取片内缓存中的数据写到目标张量的相应位置。
本发明将原本由CPU直接计算进行张量变换和展开的过程,变为借助于专用的硬件矢量处理单元和片内缓存实施,节省了系统资源,提高了计算效率。
附图说明
附图1A与附图1B所示是本发明一具体实施方式的实施步骤示意图。
附图2A-2D所示是本发明一具体实施方式所采用的原始张量以及变换后张量的结构示意图。
附图3所示是本发明附图1的具体实施方式的中内外层循环的张量示意图。
附图4所示是本发明又一具体实施方式的实施步骤示意图。
具体实施方式
下面结合附图对本发明提供的张量维度变换的方法以及装置的具体实施方式做详细说明。
附图1A所示是本发明一具体实施方式的实施步骤示意图,包括:1)构建DMA(Direct Memory Access,直接内存存取单元)读取原始张量数据的维度排布;2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;4)用DMA按照步骤3)中维度交换后的维度排布读取片内缓存中的数据写到目标张量的相应位置。附图1B所示是上述步骤展开后的实施步骤示意图。
参考步骤1),构建DMA读取原始张量数据的维度排布。
本步骤又可以包括如下详细步骤:
A.根据片内缓存的宽度和张量维度变换的顺序确定维度拆分规则和对原始张量实行维度拆分。附图2A所示是本具体实施方式所采用的原始张量的结构示意图,为一个N+1维张量,各个维度的维度数分别为Di(i的取值从0到N)。在本具体实施方式的叙述中,以右侧为内,以左侧为外。
B.根据拆分后的维度排布确定片内缓存每行能写入的原始张量的维度组作为第一维度组,根据拆分后的维度排布确定片内缓存每行能写入的目标张量的维度组作为第二维度组。在本具体实施方式中,第一维度组是第K维至第N维,第二维度组是第M维至第L维。
C.构建读取原始张量数据的维度排布:第一维度组排在最内侧,第二维度组排在第一维度组的外侧,将剩下的维度按照原来的顺序依次排在第二维度组的外侧。在本具体实施方式中,以第一维度组和第二维度组都是在原始张量中的连续维度作为实施,在其他的具体实施方式中,无论是第一维度组还是第二维度组都可以是在原始张量中不连续的几个维度。这些需要变换的维度组是由外部的命令在本方法实施之前预先确定的,本具体实施方式的实施目的是为了对其进行快速有效的变换,而不涉及如何确定需要变换的维度组。
参考步骤2),用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中。
本步骤又可以包括如下详细步骤:
A.根据步骤1)中的维度排布,确定DMA每批可以直接读入数据元素的个数;根据片内缓存的大小,确定DMA读入数据的次数。附图2B所示是本步骤对原始张量进行操作的示意图。上方为原始张量,下方为重排后的张量。以右侧为内,以左侧为外。第一维度组和第二维度组无论是连续维度还是不连续维度,张量元素在第一维度组以及第二维度组的组内排列顺序不变。
B.根据步骤1)中的维度排布,DMA读取数据到片内缓存时依赖于两个循环,内层循环是从DMA可以直接读取的最高维度到片内缓存能放下的最高维度,外层循环包含比内层循环更高的所有维度。根据这两层循环中各个维度上对应的值,计算出DMA从原始张量中读取数据的位置。
C.DMA从B中计算出来的原始张量的位置处读取数据到片内缓存中。DMA每读取一次数据,内层循环的最低维加一,当这个维度上的值达到该维的维度值后向高一维进位并将循环中对应的这个维度上的值清零,DMA读满片内缓存区后,向外层循环进位。
附图2C所示是本步骤对原始张量进行操作的示意图。写入维度的顺序保持与原始张量中维度的排布顺序相同。如果第一维度组和第二维度组是连续维度且中间不夹其他维度,则将第二维度组外侧的维度接续写入即可;如果第一维度组和第二维度组之间夹有其他维度,则优先写入两者之间的维度至第二维度组的外侧;如果第一或第二维度组是不连续维度,则对于组内夹有的维度,按照在原始张量中的顺序进行排入或写入。总之,本步骤的写入宗旨,是保证其余维度在变换后张量中的内外相对位置,与原始张量中的内外相对位置保持不变。
参考步骤3),在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布。附图2D所示是本步骤对重排后张量进行变换的示意图。由于本步骤中两个维度组的位置都是确定的,因此只需要进行数据对调就可以,无需复杂算法。
本步骤又可以包括如下详细步骤:
A.根据目标张量的维度排布顺序,确定是否需要在第一维度组内进行维度交换,如果需要则利用硬件矢量处理单元进行维度交换。
B.利用硬件矢量处理单元,将第一维度组和第二维度组各作为一个整体按照二维矩阵转置的方式,对片内缓存中的数据做转置,这样实现了第一维度组和第二维度组进行交换。
C.根据目标张量的维度排布顺序,确定是否需要在第二维度组内进行维度交换,如果需要则利用硬件矢量处理单元进行维度交换,这样就形成了一个新的维度排布。
参考步骤4),用DMA按照步骤3)中维度交换后的维度排布将数据读取片内缓存中的数据写到目标张量的相应位置。多维张量的展开成张量元素的算法是从内层到外层,根据维度数Di分别依次进位读取每个维度数上的数值,是二维矩阵展开算法在高维度情况下的进一步应用,展开后将每一次读取的张量元素结果复制到指定的目标位置。
A.DMA在从片内缓存中读取数据写到目标张量中指定的位置时依赖于一个循环,这个循环包括比DMA每次可以直接读取数据的最高维度更高的所有维度,根据这个循环中的值,可以计算出DMA当前从片内缓存中读取的这批数据要写到目标张量的位置;
B.DMA从片内缓存中读取数据写到目标张量中的指定位置,DMA每读取一次数据,这个循环的最低维上加一,当最低维度上的值达到该维度的维度值后向高一维进位并将该维度上的值清零。
附图3所示是上述步骤对后续维度分成内层维度和外层维度进行操作的示意图。两层循环用来计算这一批的数据的起始地址和可以读入的批次数量,内层循环中以读取单元为单位,DMA按照读取数据的维度排布将数据读入片内缓存,外层循环首先计算出可以读的批次数量,如果发现还有数据没有处理完,就触发内层循环,读取数据过程中内层循环向外侧循环进位,直到当前可以读的批次全部读完后触发外层循环。两个循环相互触发,直到所有数据被处理完。
本步骤中DMA从片内缓存读取数据写到目标张量的位置时参照的维度排布,与步骤2)中DMA从原始张量中读取数据到片内缓存时参照的维度排布不同,原因在于步骤3)中做过维度交换,在这个维度交换的过程中改变了数据在片内缓存中的排布。这个维度交换是由硬件矢量处理单元批量化处理而非CPU完成的,因此节省了系统资源,提高了计算效率。
附图4所示是本发明又一具体实施方式的装置结构示意图,包括执行器和片内缓存,所述执行器操作所述片内缓存,执行如下步骤:1)构建DMA读取原始张量数据的维度排布;2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;4)用DMA按照步骤3)中维度交换后的维度排布读取片内缓存中的数据写到目标张量的相应位置。
以上步骤的具体解释参见前述具体实施方式。具体操作请参阅前一具体实施方式的步骤1-4以及具体解释。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种张量维度变换的方法,其特征在于,包括如下步骤:
1)构建DMA读取原始张量数据的维度排布;
2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;
3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;
4)用DMA按照步骤3)中维度交换后的维度排布读取片内缓存中的数据写到目标张量的相应位置。
2.根据权利要求1所述的方法,其特征在于,步骤1)进一步包括如下步骤:
A.根据片内缓存的宽度和张量维度变换的顺序确定维度拆分规则和对原始张量实行维度拆分;
B.根据拆分后的维度排布确定片内缓存每行能写入的原始张量的维度组作为第一维度组,根据拆分后的维度排布确定片内缓存每行能写入的目标张量的维度组作为第二维度组;
C.构建读取原始张量数据的维度排布:第一维度组排在最内侧,第二维度组排在第一维度组的外侧,将剩下的维度按照原来的顺序依次排在第二维度组的外侧。
3.根据权利要求1所述的方法,其特征在于,步骤2)进一步包括如下步骤:
A.根据步骤1)中的维度排布,确定DMA每批可以直接读入数据元素的个数;根据片内缓存的大小,确定DMA读入数据的次数;
B.根据步骤1)中的维度排布,DMA读取数据到片内缓存时依赖于两个循环,内层循环是从DMA可以直接读取的最高维度到片内缓存能放下的最高维度,外层循环包含比内层循环更高的所有维度;根据这两层循环中各个维度上对应的值,计算出DMA从原始张量中读取数据的位置;
C.DMA从B中计算出来的原始张量的位置处读取数据到片内缓存中,DMA每读取一次数据,内层循环的最低维加一,当这个维度上的值达到本维度的维度值后向高一维进位并将循环中对应的这个维度上的值清零,DMA读满片内缓存区后,向外层循环进位。
4.根据权利要求1所述的方法,其特征在于,步骤3)进一步包括如下步骤:
A.根据目标张量的维度排布顺序,确定是否需要在第一维度组内进行维度交换,如果需要则利用硬件矢量处理单元进行维度交换;
B.利用硬件矢量处理单元,将第一维度组和第二维度组各作为一个整体按照二维矩阵转置的方式,对片内缓存中的数据做转置,这样实现了第一维度组和第二维度组进行交换;
C.根据目标张量的维度排布顺序,确定是否需要在第二维度组内进行维度交换,如果需要则利用硬件矢量处理单元进行维度交换,这样就形成了一个新的维度排布。
5.根据权利要求1所述的方法,其特征在于,步骤4)进一步包括如下步骤:
A.DMA在从片内缓存中读取数据写到目标张量中指定的位置时依赖于一个循环,这个循环包括比DMA每次可以直接读取数据的最高维度更高的所有维度,根据这个循环中的值,可以计算出DMA当前从片内缓存中读取的这批数据要写到目标张量的位置;
B.DMA从片内缓存中读取数据写到目标张量中的指定位置,DMA每读取一次数据,这个循环的最低维上加一,当最低维度上的值达到该维度的维度值后向高一维进位并将该维度上的值清零。
6.一种用于张量维度变换的装置,包括执行器和片内缓存,其特征在于,所述执行器操作所述片内缓存,执行如下步骤:
1)构建DMA读取原始张量数据的维度排布;
2)用DMA按照步骤1)构建的维度排布将张量数据读入片内缓存中;
3)在片内缓存中,通过硬件矢量处理单元实现维度交换,同时会形成新的张量维度排布;
4)用DMA按照步骤3)中维度交换后的维度排布读取片内缓存中的数据写到目标张量的相应位置。
7.根据权利要求6所述的装置,其特征在于,步骤1)进一步包括如下步骤:
A.根据片内缓存的宽度和张量维度变换的顺序确定维度拆分规则和对原始张量实行维度拆分;
B.根据拆分后的维度排布确定片内缓存每行能写入的原始张量的维度组作为第一维度组,根据拆分后的维度排布确定片内缓存每行能写入的目标张量的维度组作为第二维度组;
C.构建读取原始张量数据的维度排布:第一维度组排在最内侧,第二维度组排在第一维度组的外侧,将剩下的维度按照原来的顺序依次排在第二维度组的外侧。
8.根据权利要求6所述的装置,其特征在于,步骤2)进一步包括如下步骤:
A.根据步骤1)中的维度排布,确定DMA每批可以直接读入数据元素的个数;根据片内缓存的大小,确定DMA读入数据的次数;
B.根据步骤1)中的维度排布,DMA读取数据到片内缓存时依赖于两个循环,内层循环是从DMA可以直接读取的最高维度到片内缓存能放下的最高维度,外层循环包含比内层循环更高的所有维度,根据这两层循环中各个维度上对应的值,计算出DMA从原始张量中读取数据的位置;
C.DMA从B中计算出来的原始张量的位置处读取数据到片内缓存中,DMA每读取一次数据,内层循环的最低维加一,当这个维度上的值达到本维度的维度值后向高一维进位并将循环中对应的这个维度上的值清零,DMA读满片内缓存区后,向外层循环进位。
9.根据权利要求6所述的装置,其特征在于,步骤3)进一步包括如下步骤:
A.根据目标张量的维度排布顺序,确定是否需要在第一维度组内进行维度交换,如果需要则利用硬件矢量处理单元进行维度交换;
B.利用硬件矢量处理单元,将第一维度组和第二维度组各作为一个整体按照二维矩阵转置的方式,对片内缓存中的数据做转置,这样实现了第一维度组和第二维度组进行交换;
C.根据目标张量的维度排布顺序,确定是否需要在第二维度组内进行维度交换,如果需要则利用硬件矢量处理单元进行维度交换,这样就形成了一个新的维度排布。
10.根据权利要求6所述的装置,其特征在于,步骤4)进一步包括如下步骤:
A.DMA在从片内缓存中读取数据写到目标张量中指定的位置时依赖于一个循环,这个循环包括比DMA每次可以直接读取数据的最高维度更高的所有维度;根据这个循环中的值,可以计算出DMA当前从片内缓存中读取的这批数据要写到目标张量的位置;
B.DMA从片内缓存中读取数据写到目标张量中的指定位置,DMA每读取一次数据,这个循环的最低维上加一,当最低维度上的值达到该维度的维度值后向高一维进位并将该维度上的值清零,如果有必要,在存储数据的过程中依次向更高维产生进位。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910939477.9A CN110837483B (zh) | 2019-09-30 | 2019-09-30 | 张量维度变换的方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910939477.9A CN110837483B (zh) | 2019-09-30 | 2019-09-30 | 张量维度变换的方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110837483A CN110837483A (zh) | 2020-02-25 |
CN110837483B true CN110837483B (zh) | 2021-07-23 |
Family
ID=69574680
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910939477.9A Active CN110837483B (zh) | 2019-09-30 | 2019-09-30 | 张量维度变换的方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110837483B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111767508B (zh) | 2020-07-09 | 2024-02-23 | 地平线(上海)人工智能技术有限公司 | 计算机实现张量数据计算的方法、装置、介质和设备 |
CN115577760B (zh) * | 2021-07-14 | 2023-06-02 | 华为技术有限公司 | 一种数据处理方法、系统及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109886399A (zh) * | 2019-02-13 | 2019-06-14 | 上海燧原智能科技有限公司 | 一种张量处理装置及方法 |
CN109885628A (zh) * | 2019-03-20 | 2019-06-14 | 上海燧原智能科技有限公司 | 一种张量转置方法、装置、计算机及存储介质 |
CN110046116A (zh) * | 2019-04-23 | 2019-07-23 | 上海燧原智能科技有限公司 | 一种张量填充方法、装置、设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11055063B2 (en) * | 2016-05-02 | 2021-07-06 | Marvell Asia Pte, Ltd. | Systems and methods for deep learning processor |
US10796220B2 (en) * | 2016-05-24 | 2020-10-06 | Marvell Asia Pte, Ltd. | Systems and methods for vectorized FFT for multi-dimensional convolution operations |
US20190130270A1 (en) * | 2017-10-27 | 2019-05-02 | Wave Computing, Inc. | Tensor manipulation within a reconfigurable fabric using pointers |
CN109522254B (zh) * | 2017-10-30 | 2022-04-12 | 上海寒武纪信息科技有限公司 | 运算装置及方法 |
-
2019
- 2019-09-30 CN CN201910939477.9A patent/CN110837483B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109886399A (zh) * | 2019-02-13 | 2019-06-14 | 上海燧原智能科技有限公司 | 一种张量处理装置及方法 |
CN109885628A (zh) * | 2019-03-20 | 2019-06-14 | 上海燧原智能科技有限公司 | 一种张量转置方法、装置、计算机及存储介质 |
CN110046116A (zh) * | 2019-04-23 | 2019-07-23 | 上海燧原智能科技有限公司 | 一种张量填充方法、装置、设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
《Compactification of Affine Transformation Filter Using Tensor Decomposition》;Kohei Kawai等;《2018 25th IEEE International Conference on Image Processing (ICIP)》;20181231;2162-2166 * |
《基于广义协方差张量分解的欠定盲辨识算法》;骆忠强等;《电子科技大学学报》;20161130;893-897 * |
Also Published As
Publication number | Publication date |
---|---|
CN110837483A (zh) | 2020-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11321423B2 (en) | Operation accelerator | |
Lu et al. | SpWA: An efficient sparse winograd convolutional neural networks accelerator on FPGAs | |
US20220043886A1 (en) | Hardware Implementation of Convolutional Layer of Deep Neural Network | |
US20210390368A1 (en) | Buffer Addressing for a Convolutional Neural Network | |
US11960934B2 (en) | Systems and methods for improved neural network execution | |
US20180260709A1 (en) | Calculating device and method for a sparsely connected artificial neural network | |
WO2017185389A1 (zh) | 一种用于执行矩阵乘运算的装置和方法 | |
CN108388537B (zh) | 一种卷积神经网络加速装置和方法 | |
KR102448018B1 (ko) | 메모리를 테스트하는 방법, 장치, 전자 기기, 저장 매체 및 프로그램 | |
CN106846235A (zh) | 一种利用NVIDIA Kepler GPU汇编指令加速的卷积优化方法及系统 | |
CN110837483B (zh) | 张量维度变换的方法以及装置 | |
Finkbeiner et al. | In-memory intelligence | |
US20220253716A1 (en) | Neural network comprising matrix multiplication | |
CN113330466A (zh) | 涉及混合量子机器、量子信息技术的方面和/或其他特征的系统和方法 | |
CN114995782B (zh) | 数据处理方法、装置、设备和可读存储介质 | |
EP4216112A1 (en) | Quantum error correction | |
Nakano | Optimal parallel algorithms for computing the sum, the prefix-sums, and the summed area table on the memory machine models | |
CN112348182A (zh) | 一种神经网络maxout层计算装置 | |
KR20230081697A (ko) | 팽창 컨볼루션 계산 가속화 방법 및 장치 | |
CN112416433A (zh) | 一种数据处理装置、数据处理方法及相关产品 | |
US20230021204A1 (en) | Neural network comprising matrix multiplication | |
KR102642333B1 (ko) | 인공 신경망의 데이터의 주소를 생성하는 방법 및 장치 | |
US20220365891A1 (en) | Accelerator and electronic device including the same | |
KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
US8707240B2 (en) | Structured placement for bit slices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 361005 1501, zone a, innovation building, software park, Xiamen Torch High tech Zone, Xiamen, Fujian Patentee after: Xingchen Technology Co.,Ltd. Address before: Room 1501, zone a, innovation building, software park, torch hi tech Zone, Siming District, Xiamen City, Fujian Province, 361000 Patentee before: Xiamen Xingchen Technology Co.,Ltd. |