问题标签 [icc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
makefile - 使用英特尔编译器编译 VLC2.0 - 无效使用 __builtin_va_arg_pack
我正在尝试在 Ubuntu 11.10 上编译 VLC2.0,并且被这个错误难住了。我已经使用英特尔最新的编译器套件成功编译了 contrib/ 中的所有依赖项。但是,编译 posix/filesystem.c 时出现错误
配置 VLC:-
我编辑了makefile中的一些标志;相关标志现在是:
在制作阶段,我收到此错误:
在网上环顾四周后,我看到一些邮件列表提到优化标志会导致 gcc 出现此错误,特别是与内联有关的标志,这就是我添加-ipo -finline -finline-limit=1000
到 CFLAGS 的原因。但这似乎并不能解决问题。
谁能帮我解决这个问题??我试图找出使用的确切编译命令,以便手动编译 filesystem.lo,但我找不到make
打印使用的确切命令的方法,即使使用make -d
. 我确实设法编译了 filesystem.c,但它生成了一个 ELF 64 位可执行文件,而不是一个 libtool 目标文件......
非常感谢任何帮助!
附言。如果其他人在这里是因为他们想尝试使用 icc 编译 VLC2,我遇到了 musepack 和 libvpx 的问题,但是一些 Makefile 修复程序解决了这个问题。我很乐意应要求分享我的更改。
c - 检查是否内联特定函数 - 英特尔编译器
我有 C/C++ 二进制库(*.dll、*.sys)它们包含的 obj 文件和它们的符号(pdb),但没有源代码或映射文件。
根据符号,它们是由英特尔编译器(用于 Windows)构建的。
有什么方法可以检查特定函数是否内联?
提前致谢。
c++ - 具有限制指针的 OpenMP 因 ICC 失败而 GCC/G++ 成功
我使用乘法循环中的隐式 openMP 指令为CRS中的稀疏矩阵实现了一个简单的矩阵向量乘法。
完整的代码在 GitHub 中:https
://github.com/torbjoernk/openMP-Examples/blob/icc_gcc_problem/matxvec_sparse/matxvec_sparse.cpp
注意:很丑;-)
为了控制私有和共享内存,我使用了限制指针。%u
在 64 位 Linux 上使用 GCC 4.6.3 编译它可以正常工作(除了两个关于命令和命令unsigned int
的警告printf
,但这不是重点)。
但是,在 64 位 Linux 上使用 ICC 12.1.0 编译它失败并出现以下错误:
有问题的变量和指针的定义
和 openMP 指令定义为
用 g++ 编译:
用icc编译:
- 使用 GCC/ICC 是否有错误?
- 这是我的代码中的设计问题导致未定义的行为吗?
如果是这样,哪条线路是/正在导致它? - 只是ICC和GCC之间的不一致吗?
如果是这样,实现编译器独立性和兼容性的好方法是什么?
c - 警告使用 ICC 和 printf 以及千位分组格式(撇号)
我需要显示一些数以千计的分组(在这种情况下,使用句点作为分隔符)。所以,我使用 printf 标志'
来实现这样的事情。
gcc
一切顺利,但如果我使用,icc
那么我会收到以下警告:
警告 #269:无效的格式字符串转换
尽管该数字确实以所需的格式打印。
例如,如果我们编译这个简单的程序:
然后我们得到这个警告:
尽管一切都按预期工作:
所以我的问题是:
- 如何抑制此警告?
- 与编译器
'
一起使用 printf 和朋友作为标志是否安全?icc
更新:
我刚刚意识到抑制269
警告的一个奇怪技巧是使用格式定义一个变量,并将该变量传递给printf
:
更新:
因为使用撇号 withprintf
是 XSI 扩展(如@Dave 所述),为了使代码更具可移植性,遵循C-FAQ 问题 12.11中的建议并使用他们的commaprint
.
c++ - 如何从通过模板继承的类中提取 typedef 的信息?
我有一个关于从通过模板继承的类中提取 typedef 信息的问题。为了说明我的问题,请考虑以下简单示例:
C 类将一个类(B1 或 B2)作为模板参数。B1 和 B2 都有一个名为 A 的 tyepdef(分别是 A1 和 A2 类)。在编译时,C 类应该能够确定“B”类正在使用两个“A”类中的哪一个。当我用 g++ 编译时,上面的代码运行良好。但是,当我使用 Intel 的 icpc 编译它时,出现以下错误:
有没有其他方法可以达到类似的效果?当然,我的实际代码要复杂得多,我希望以这种方式构造类是有原因的。还有一些原因我想用 icpc 而不是 g++ 编译。
提前致谢。卡尔
c++ - 三角矩阵转换和自动并行化
我在ICC(11.1;旧的,但对此无能为力)中玩了一点自动并行化,我想知道为什么编译器不能并行化内部循环以进行简单的高斯消除:
我们只写入依赖于私有行(和 col)变量的数组,并且行保证大于枢轴,所以编译器应该很明显我们没有覆盖任何东西。
我正在编译-O3 -fno-alias -parallel -par-report3
并获得很多依赖项 ala:assumed FLOW dependence between matrix line 75 and matrix line 73.
或者assumed ANTI dependence between matrix line 73 and matrix line 75.
仅第 75 行也是如此。编译器有什么问题?显然我可以准确地告诉它如何处理一些编译指示,但我想了解编译器可以单独获得什么。
dynamic-linking - 在 Linux 英特尔编译器 (icc) 中面临与 mkl 的链接问题
这是linux中的命令行:
运行此命令后:我得到了一长串未定义的参考错误。我也在 eclipse 中尝试过,但也无法解决那里的链接问题。如果有人帮助我运行这样的小代码,我会很高兴:
我的服务器
已安装 ICC 64 位。
提前致谢。
c++ - 最简单的 TBB 示例
有人可以给我一个TBB示例如何:
- 设置活动线程的最大计数。
- 执行彼此独立并以类的形式呈现的任务,而不是静态函数。
linker - 使用 icc 链接到 gsl 时出现 intel_sse2 问题
我的程序链接到 PETSc 和 gsl,两个库都是用 icc 编译的。这是链接命令:
MPICH_CC
设置为 icc,因此mpicc
调用 intel 编译器。
当我尝试链接到 gsl.so
文件时,出现以下错误:
此错误的原因可能是什么?gsl 与 intel 编译器不兼容吗?
c - 循环展开对内存绑定数据的影响
我一直在使用一段受内存密集限制的代码。我试图通过手动实现缓存阻塞、sw 预取、循环展开等在单个内核中对其进行优化。即使缓存阻塞显着提高了性能。但是,当我引入循环展开时,性能会大大下降。
我在所有测试用例中都使用带有编译器标志 -O2 和 -ipo 的 Intel icc 进行编译。
我的代码与此类似(3D 25 点模板):
当我在最内层循环(维度 i)上进行循环展开并分别以展开因子 2、4、8 分别在 x、y、z 方向上展开时,我在所有 9 种情况下都会出现性能下降,即在方向 x 上展开 2,展开在 y 方向上展开 2,在 z 方向上展开 2,在 x 方向上展开 4 ... 等等。但是当我在最外面的循环(维度 k)上执行循环展开 8 倍(也有 2 和 4)时,我获得 v.good 性能改进,甚至比缓存阻塞更好。
我什至尝试使用 Intel Vtune 分析我的代码。这似乎是主要由于远程 DRAM 服务的 1.LLC 未命中和 2.LLC 负载未命中造成的瓶颈。
我无法理解为什么展开最内层最快的循环会导致性能下降,而展开最外层、最慢的维度会带来性能提升。然而,后一种情况的这种改进是当我使用 icc 编译时使用 -O2 和 -ipo 时。
我不确定如何解释这些统计数据。有人可以帮助阐明这一点。