使用 AVX2 对 2 个短整型向量进行向量加法

     2023-02-16     252

关键词:

【中文标题】使用 AVX2 对 2 个短整型向量进行向量加法【英文标题】:Vectorised addition for 2 short int vectors using AVX2 【发布时间】:2018-03-14 23:52:31 【问题描述】:

我在使用 AVX2 指令集对 2 个短(16 位整数)向量类型执行加法运算时遇到问题。 我已经构建了代码,但在添加命令中出现错误,可能是因为语法错误。 我正在使用以下代码创建 2 个向量:

short int si1[16] =1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;
short int si2[16] =1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1;

__m256i i1 = _mm256_load_si256((__m256i*)si1);
__m256i i2 = _mm256_load_si256((__m256i*)si2);

我正在尝试使用以下代码执行添加:

__m256i result = _mm256_add_si256(i1,i2);

我知道对于 16 位整数我们使用标量后缀,但是编译器给出了函数隐式声明添加命令的错误。

【问题讨论】:

所以为了清楚起见,编译器说_mm256_add_epi16 不存在? 嗯,没有_mm256_add_si256()这样的东西。 我认为错误“隐式声明函数”确实意味着该函数/方法不存在。 @Romal 可能,但哪个功能?你已经展示了_mm256_add_si256(它确实不存在也不能存在——即使它确实存在它也不会添加短裤),但是在下一段中你似乎正在走向_mm256_add_epi16(如果那是什么“标量后缀”的意思) 【参考方案1】:

通过人们的 cmets 和我的一些实验,我通过使用未对齐操作解决了这个问题。所以我的代码最终看起来像这样-

short int si1[16] =
         1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ;
short int si2[16] =  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ;

__m256i i1 = _mm256_loadu_si256((__m256i *) si1);
__m256i i2 = _mm256_loadu_si256((__m256i *) si2);

    __m256i result = _mm256_adds_epi16(i2, i1);

这有效并在尝试编译程序时使用 -O2 优化标志(在 gcc 上),以防您使用多线程,因为优化是我遇到一些其他错误的原因(大工作负载的执行时间更长线程与单线程相比)。

【讨论】:

在 AVX2 向量中加载 16 位整数?

...,但我无法这样做。这是我的尝试。它给出了以下错误:使用“int”类型初始化“__m256”类型时不兼容的类型__m256结果=_mm256_load_epi16((__m256*)&in 查看详情

使用 Cuda 进行 128 位向量加法,性能问题

】使用Cuda进行128位向量加法,性能问题【英文标题】:128-bitvectoradditionwithCuda,performanceissue【发布时间】:2020-08-2503:42:47【问题描述】:我想添加带有进位的128位向量。我的128位版本(下面代码中的addKernel128)比基本的32位版本... 查看详情

使用线程对向量进行排序

】使用线程对向量进行排序【英文标题】:Sortingavectorusingthreads【发布时间】:2010-03-0302:48:10【问题描述】:C++STL中定义的向量是可重入的还是线程安全的?我可以在不使用互斥锁的情况下使用两个线程并在向量的两半上工作(... 查看详情

使用整数向量的向量对整数向量进行基数排序

】使用整数向量的向量对整数向量进行基数排序【英文标题】:Radixsortingavectorofintsusingavectorofintvectors【发布时间】:2013-08-1620:00:31【问题描述】:我最近尝试为一对整数向量实现基数排序(其中仅当第一个元素相等时才考虑第... 查看详情

使用 std::sort 对具有特定标准的二维向量进行排序

】使用std::sort对具有特定标准的二维向量进行排序【英文标题】:Sortinga2Dvectorwithspecificcriteriausingstd::sort【发布时间】:2017-04-1621:24:35【问题描述】:我遇到了一个关于使用库algorithm中的std::sort对二维向量(矩阵)进行排序的编... 查看详情

使用 AVX2 高效计算 std::complex<float> 向量的绝对值

】使用AVX2高效计算std::complex<float>向量的绝对值【英文标题】:Efficientlycomputeabsolutevaluesofstd::complex<float>vectorwithAVX2【发布时间】:2018-12-0309:53:56【问题描述】:对于某些实时DSP应用程序,我需要计算复值向量的绝对值。... 查看详情

最快的步幅 2 聚集

...her【发布时间】:2020-07-1111:58:48【问题描述】:我知道在使用AVX2进行快速步幅3收集时存在问题。我想知道最快的步幅2收集序列是什么,假设我想将长度为16向量的所有奇数元素加载到ymm0。特别是,我想知道的相对收益和成本使... 查看详情

对向量元素进行排序[关闭]

...s[closed]【发布时间】:2014-08-2522:36:33【问题描述】:如何使用sort()函数从第i个索引到第j个索引对向量元素进行排序。假设我有一个向量,它的元素是3,1,2,4,5,7,6,10,9.我想从第i个索引排序到第j个索引。我已经这样做了:#include<a... 查看详情

『线性空间整数线性基和异或线性基』(代码片段)

线性空间定义线性空间是一个关于一下两个运算封闭的向量集合:(1.)向量加法(a+b),其中(a,b)为向量(2.)标量乘法(k*a),其中(a)为向量,(k)为常数基础概念(1.)给定若干个向量(a_1,a_2,...,a_n),若向量(b)能够通过(a_1,a_2,...,a_n)经过向量... 查看详情

Matlab:如何使用另一个向量按其中一个列对结构进行排序

】Matlab:如何使用另一个向量按其中一个列对结构进行排序【英文标题】:Matlab:Howtosortastructbyoneofitscolumnsusinganothervector【发布时间】:2020-03-1217:07:10【问题描述】:如何以其中一个列等于某个向量的方式对结构进行排序?下面... 查看详情

使用 weka API 对高维 int 向量进行分类的最佳方法是啥?

】使用wekaAPI对高维int向量进行分类的最佳方法是啥?【英文标题】:What\'sthebestwaytoclassifyahighdimensionalint-vectorwiththewekaAPI?使用wekaAPI对高维int向量进行分类的最佳方法是什么?【发布时间】:2013-09-1614:30:05【问题描述】:我有一... 查看详情

使用回调开关对向量进行 C++ 冒泡排序

】使用回调开关对向量进行C++冒泡排序【英文标题】:C++bubblesortonvectorusingcallbackswitch【发布时间】:2020-10-2703:43:00【问题描述】:我一直在尝试对取自多行文本文件的int数据向量进行冒泡排序。我已经设法从向量中分离出数据... 查看详情

如何在两个 AVX2 向量之间交换 128 位部分

】如何在两个AVX2向量之间交换128位部分【英文标题】:Howtoswap128-bitpartsbetweentwoAVX2vectors【发布时间】:2020-05-1809:44:20【问题描述】:问题:我有4个256位AVX2向量(A、B、C、D),我需要在它们各自的128位部分以及两个不同的向量... 查看详情

详解矩阵求导法则

文章目录1.向量对标量求导1.1kronecker(克罗内克尔)delta1.2标量对向量求导1.2.1向量内积对向量的求导1.2.1二次型的求导2.向量对向量求导2.1矩阵与向量的乘积对向量求导2.2Hessian矩阵1.向量对标量求导  之所以将向量对标量求导和标... 查看详情

详解矩阵求导法则

文章目录1.向量对标量求导1.1kronecker(克罗内克尔)delta1.2标量对向量求导1.2.1向量内积对向量的求导1.2.1二次型的求导2.向量对向量求导2.1矩阵与向量的乘积对向量求导2.2Hessian矩阵1.向量对标量求导  之所以将向量对标量求导和标... 查看详情

C++ 使用比较器对字符串向量的向量进行排序。请帮我理解

】C++使用比较器对字符串向量的向量进行排序。请帮我理解【英文标题】:C++Sortavectorofvectorofstringswithcomparator.Pleasehelpmeunderstand【发布时间】:2013-03-0312:45:35【问题描述】:我正在尝试对字符串向量的向量进行排序,但我不明白... 查看详情

使用 std::sort 对对象向量进行排序

】使用std::sort对对象向量进行排序【英文标题】:SortinganVectorofObjectswithstd::sort【发布时间】:2019-05-3015:49:48【问题描述】:我是C++新手。我想对向量Konto类型的向量“Konten”进行排序。我搜索了一个解决方案并找到了std::sort函数... 查看详情

使用 Accelerate 框架对向量进行编码

】使用Accelerate框架对向量进行编码【英文标题】:codingwithvectorsusingtheAccelerateframework【发布时间】:2012-04-2016:03:30【问题描述】:我第一次使用Accelerate框架,目标是在iOS应用程序中实现一些矢量化代码。我从来没有尝试过在Objec... 查看详情