腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
文章/答案/技术大牛
搜索
搜索
关闭
发布
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
(964)
视频
沙龙
1
回答
明确
告诉
GCC
9.2
取消
切换
循环
以
允许
自动
矢量化
、
、
、
、
我正在从事一个项目,需要
自动
向量化的大
循环
。编译时一定要用到
GCC
。很容易看出,控制流依赖于一个可以从内部
循环
检出的条件,但
GCC
并没有执行任何
循环
取消
切换
。
循环
取消
切换
可以手动完成,但请注意,这是问题的最小情况,实际
循环
有数百行,执行手动
循环
取消
切换
将导致大量代码冗余。我正在试图找到一种方法来迫使
GCC
为不同
浏览 18
提问于2020-04-12
得票数 0
1
回答
编译器通常在没有
明确
要求时发出向量(SIMD)指令吗?
、
、
、
、
我注意到微软的实验实现提到VC++编译器不支持
矢量化
,这让我感到惊讶--我认为现代C++编译器能够推理
循环
的向量化,但显然VC++编译器/优化器无法生成SIMD代码,即使被
明确
告知也是如此。似乎缺乏
自动
矢量化
支持与Quora上的答案相矛盾,这意味着编译器将在可能的情况下进行
矢量化
。因此,我的问题是:如果没有
明确
要求,当前编译器是否会
自动
向量化我的代码?(为了使这个问题更加具体,让我们把范围缩小到支持SIMD的英特尔x86 CPU,以及最新版本
浏览 13
提问于2017-06-03
得票数 5
回答已采纳
2
回答
GCC
/CLang
自动
矢量化
中对齐负载/存储的对齐属性
、
、
、
众所周知,
GCC
/CLang利用SIMD指令很好地实现了
循环
的
自动
矢量化
.另外,已知存在标准C++属性,除其他用途外,该属性还
允许
对堆栈变量,例如,以下代码: #include <iostream> int main() {因此,我们可以理解,我们的64位阵列xor操作是由
GCC
自动
矢量化
使用AVX-512寄存器,
循环
也展开。我的问题是如何
告诉</em
浏览 0
提问于2021-11-20
得票数 2
回答已采纳
2
回答
具有全局变量的意外性能
、
、
、
dtime += omp_get_wtime(); return 0;如果char* buff是一个
自动
变量); return 0;如果我将buff更改为短指针,则性能很快,不取决于ncols是静态的还是ncols是
自动
的为什么buff是一个
自动
变量而不是全局或静态变量使代码更快? 为什么当buf
浏览 4
提问于2015-06-09
得票数 7
回答已采纳
2
回答
英特尔编译器
自动
矢量化
中现有
矢量化
函数与现有标量函数的对应
、
、
、
一般说来,我想使用ICC
循环
自动
矢量化
。早些时候,我使用了显式向量化
循环
和函数。据我所知,英特尔编译器
允许
有标量和相应的
矢量化
功能,通过_declspec(vector_variant())功能。cc[1000] = { 0 }; cc[i] = plus(aa[i], bb[i]);我希望ICC使用
矢量化
的函数,用于
自动
矢量化
浏览 1
提问于2018-02-05
得票数 0
3
回答
GCC
暗示“
矢量化
”
、
、
我想让
GCC
把下面的代码
矢量化
。-fopt-info
告诉
我
GCC
现在不是。我认为问题在于W的跨越式访问,或者可能是k的向后递增。Yp[(k+1)*width + j];123 Yp[k*width + i] *= DF(Ap[k*width + i]);125 }有什么好的方法让这个
矢量化
吗?你能给我提供进一步的信息吗? 我的索引方法是个坏主意( k*wi
浏览 7
提问于2016-01-18
得票数 2
回答已采纳
1
回答
编译器真的使用我的"omp声明simd“函数吗?
、
、
看看我为4D点产品构建的:double dot(double x0, double y0, double z0, double w0, double x1, double y1, double z1, double w1) return x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;{ double y[SIMD]; double z[SIMD
浏览 2
提问于2019-07-19
得票数 0
回答已采纳
2
回答
如何使clang
矢量化
一个简单的
循环
?
、
、
、
、
我有以下
循环
:float* ap; s尽管启动了优化,但当我查看程序集输出时,clang (我使用的是Xcode)似乎没有将
循环
向量化:Ltmp353:Ltmp354:L
浏览 0
提问于2019-04-06
得票数 3
1
回答
我怎样才能更好地与
GCC
进行
矢量化
?
、
、
、
、
add_pd(tenth,_mm256_mul_pd(v,_mm256_add_pd(one,_mm256_mul_pd(half,v)))); }
GCC
4.7.2 (与-O3 -mavx一起)将
循环
版本
矢量化
,但对展开
循环
使用标量操作。三个版本的(规范化)次数分别为3.3次(
循环
,
自动
矢量化
),1.2次(展开,标量),1次(手动avx)。展开版本和手动向量化函数之间的性能差异很小,但是我想强制
矢量化<
浏览 6
提问于2016-10-09
得票数 4
4
回答
朴素矩阵乘法的优化(ICC与
GCC
)
、
、
、
、
代码是用-O3在
GCC
4.4.6 (与-mtune=native)和IntelCompiler13.0.1上编译的,
GCC
上的速度要差得多(对于所使用的样本数据来说是2倍以上)。乍一看,看起来ICC在将计算
矢量化
方面做得更好,但我不能破译的更多。(这主要是为了学习,因为我不可能在生产中使用它!)c[i + n * j] += a[i + n * k] * b[k + n * j]; // Line 14 }}
GCC
-_Z2mmiPdS_S
浏览 6
提问于2014-02-05
得票数 6
回答已采纳
4
回答
使用OpenMP停止
GCC
的
自动
矢量化
、
、
、
我一直在努力让我的代码能够被
GCC
自动
矢量化
,然而,当我包含-fopenmp标志时,它似乎停止了所有
自动
矢量化
的尝试。我正在使用ftree-vectorize -ftree-vectorizer-verbose=5对其进行
矢量化
和监控。如果我不包括标志,它就会开始给我很多关于每个
循环
的信息,如果它是
矢量化
的,为什么不是。当我尝试使用omp_get_wtime()函数时,编译器会停止,因为它不能被链接。一旦包含了这个标志,它就会简单地列出每个函数,并<e
浏览 7
提问于2013-02-14
得票数 6
回答已采纳
5
回答
允许
struct字段溢出到下一个字段
、
、
、
、
然而,在用-O2编译时(在
gcc
4.9.4上,但也可能在其他版本上),会发生一些有趣的事情。 编译器标识代码可能溢出数组code,限制
循环
展开为1迭代。在这种情况下,有没有办法阻止
gcc
展开
循环
?我知道我可以完全防止
循环
展开,但是我仍然对其他情况下的
循环
展开感兴趣。我还怀疑编译器所做的分析可能会影响
循环
展开以外的传递。
gcc
假设我在访问数组时不会溢出,所以我真正想要的是
告诉
编译器不要接受这个假设(通过提供一些编译器选项)。我还知道将
浏览 7
提问于2020-07-02
得票数 10
5
回答
现代编译器如何使用mmx/3dnow/sse指令?
、
、
、
、
像
gcc
这样的通用编译器实际使用这些指令(或其子集)的频率是多少,还是主要用于手工编码的汇编器?编译器如何检测在哪里适合使用SIMD指令?
浏览 3
提问于2009-05-18
得票数 20
回答已采纳
5
回答
自动
矢量化
的实际应用?
、
、
、
有没有人利用了
gcc
可以做的
自动
矢量化
?在现实世界中(而不是示例代码)?是否需要对现有代码进行重构才能利用它?在任何生产代码中,是否有大量的案例可以通过这种方式进行
矢量化
?
浏览 1
提问于2009-01-03
得票数 4
回答已采纳
3
回答
gcc
内存对齐杂注
、
、
、
、
gcc
是否有内存对齐杂注,类似于英特尔编译器中的#pragma vector aligned?我想
告诉
编译器使用对齐的加载/存储指令来优化特定的
循环
。为了避免可能的混淆,这与结构打包无关。
浏览 1
提问于2010-04-22
得票数 8
回答已采纳
1
回答
有人能帮我看一下这个
GCC
自动
矢量化
C
循环
的x64汇编代码吗?
、
、
、
、
有人能
告诉
我组装代码是做什么的吗?为什么它使每件事都是16比4的因子?
浏览 12
提问于2022-02-22
得票数 1
2
回答
如果-否则如何帮助优化冗余?
、
、
、
、
我正在阅读Python的numpy库的源代码,并找到了以下代码片段。它似乎对向量(numpy.ndarray)执行元素级操作。例如,numpy.multiply([1,2,3],[4,5,6])将得到结果[4,10,18]。 UNARY_LOOP { \ tout * out = (tout *)op1; \ } #define UNARY_LOOP_FAST(tin, tout
浏览 4
提问于2017-02-09
得票数 4
回答已采纳
1
回答
为什么
gcc
/clang不在可能的情况下将128位SIMD本质向量化为256位呢?
、
、
、
、
int* b, size_t n) { a[i] = a[i] + b[i];} a[i] = _mm_add_epi32(a[i], b[i]);} 使用相同的CFLAGS,clang和
gcc
都拒绝将其
矢量化
为256位()。因此,天真代码(
自动
向量化)每次迭代处理的元素是手动向量化SSE2代码的
浏览 13
提问于2022-07-23
得票数 1
回答已采纳
1
回答
如何确定我的服务器正在使用哪个asm
、
、
、
、
int i = 4;} 21 .ident "
GCC
: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4" 22 .section .note.GNU-stack,"",@
浏览 1
提问于2020-04-07
得票数 1
回答已采纳
4
回答
“虚”
循环
优化中的局部变量声明
、
、
、
here return 0;现在,my_arrays是临时数组,不是数据成员,只是用来填充类成员……显然,调用该函数的开销是不必要的……有没有办法(好吧,我尽量避免把它们作为类成员)
告诉
编译器
浏览 0
提问于2011-05-08
得票数 2
回答已采纳
点击加载更多
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
热门
标签
更多标签
云服务器
ICP备案
对象存储
云直播
实时音视频
活动推荐
运营活动
广告
关闭
领券