Tag: intel

英特尔Broadwell处理器中出现的重大FMA性能exception

代码1: vzeroall mov rcx, 1000000 startLabel1: vfmadd231ps ymm0, ymm0, ymm0 vfmadd231ps ymm1, ymm1, ymm1 vfmadd231ps ymm2, ymm2, ymm2 vfmadd231ps ymm3, ymm3, ymm3 vfmadd231ps ymm4, ymm4, ymm4 vfmadd231ps ymm5, ymm5, ymm5 vfmadd231ps ymm6, ymm6, ymm6 vfmadd231ps ymm7, ymm7, ymm7 vfmadd231ps ymm8, ymm8, ymm8 vfmadd231ps ymm9, ymm9, ymm9 vpaddd ymm10, ymm10, ymm10 vpaddd ymm11, ymm11, ymm11 vpaddd […]

C代码循环性能

我的应用程序中有一个乘加内核,我想提高它的性能。 我使用Intel Core i7-960(3.2 GHz时钟),并已经使用SSE内部函数手动实现了内核,如下所示: for(int i=0; i<iterations; i+=4) { y1 = _mm_set_ss(output[i]); y2 = _mm_set_ss(output[i+1]); y3 = _mm_set_ss(output[i+2]); y4 = _mm_set_ss(output[i+3]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ss(weight[i+k+l]); x1 = _mm_set_ss(input[i+k+l]); y1 = _mm_add_ss(y1,_mm_mul_ss(w,x1)); … x4 = _mm_set_ss(input[i+k+l+3]); y4 = _mm_add_ss(y4,_mm_mul_ss(w,x4)); } } _mm_store_ss(&output[i],y1); _mm_store_ss(&output[i+1],y2); _mm_store_ss(&output[i+2],y3); _mm_store_ss(&output[i+3],y4); } 我知道我可以使用打包的fp向量来提高性能,而且我已经成功地做到了这一点,但是我想知道为什么单个标量代码无法满足处理器的峰值性能。 这个内核在我的机器上的性能是每个周期约1.6个FP操作,而每个周期最多可以有2个FP操作(因为FP + FP […]

我无法安装英特尔HAXM

所以,我安装了Android Studio,我没有任何问题。 但是,当我试图运行模拟器,它说,英特尔HAXM没有安装。 所以我find了安装程序,运行它,即使它说我的笔记本电脑支持它,它没有启用。 所以我去了,启用了英特尔虚拟化技术(VT-x),但是我仍然得到相同的信息。 我听到有关Hyper-V需要无法使用的东西,但是当我打开/closuresWindowsfunction时,无法在列表中find它。 有人可以帮我弄这个吗? 谢谢

如何在英特尔语法中使用clang生成汇编代码?

正如这个问题所示,用g ++,我可以做g++ -S -masm=intel test.cpp 。 此外,与铿锵声,我可以做clang++ -S test.cpp ,但-masm=intel不支持铛( warning argument unused during compilation: -masm=intel )。 如何获得与clang英特尔语法?

在C#中如何处理非规范化的花车?

只要阅读这篇引人入胜的文章 ,就可以在具有非规格化浮点数(浮点数非常接近于0)的Intel CPU上获得20x-200x的速度减速。 SSE有一个选项将它们舍入为0,当遇到这样的浮点值时恢复性能。 C#应用程序如何处理这个? 有没有启用/禁用_MM_FLUSH_ZERO的选项?

英特尔x86处理器的L1内存caching在哪里logging?

我正在试图分析和优化algorithm,我想了解caching对各种处理器的具体影响。 对于最近的英特尔x86处理器(例如Q9300),很难find有关caching结构的详细信息。 尤其是,大多数网站(包括Intel.com )的后处理器规格不包括对L1caching的任何引用。 这是因为L1caching不存在,或者是由于某些原因认为不重要的信息? 有没有关于消除L1caching的文章或讨论? 运行各种testing和诊断程序(大部分是在下面的答案中讨论的)后,我得出结论,我的Q9300似乎有一个32K L1数据caching。 我还没有find一个明确的解释,为什么这个信息是如此难以通过。 我目前的工作理论是,L1caching的细节现在被英特尔视为商业秘密。

什么是英特尔微代码?

从我读过的内容来看,它用来修复CPU中的错误而不修改BIOS。 根据我对汇编的基本知识,我知道汇编指令被CPU内部分成微码并相应执行。 但是intel以某种方式允许在系统启动并运行时进行一些更新。 任何人有更多的信息? 有没有关于微码可以做什么的文档,以及如何使用它们? 编辑:我读过维基百科的文章:没有弄清楚我怎么可以写一些我自己的,什么使用它会有。

fork:重试:资源暂时不可用

我尝试在我的计算机上安装英特尔MPI基准testing,并收到错误消息: fork: retry: Resource temporarily unavailable 然后,当我运行ls和top命令时,再次收到此错误。 什么是造成这个错误? configuration我的机器: Dell precision T7500 Scientific Linux release 6.2 (Carbon)

在使用intel编译器的Windows和Linux之间的性能差异:看看程序集

我正在Windows和Linux(x86-64)上运行一个程序。 它使用相同的编译器(Intel Parallel Studio XE 2017)进行编译,其版本相同,Windows版本比Linux版本快3倍。 罪魁祸首是对std :: erf的调用,在英特尔math库中解决了这两种情况(默认情况下,它在Windows上静态链接,在Linux上静态链接,但在Linux上使用dynamic链接可提供相同的性能)。 这是一个简单的程序来重现问题。 #include <cmath> #include <cstdio> int main() { int n = 100000000; float sum = 1.0f; for (int k = 0; k < n; k++) { sum += std::erf(sum); } std::printf("%7.2f\n", sum); } 当我使用vTune来分析这个程序时,我发现程序集在Windows和Linux版本之间有点不同。 这是Windows上的呼叫站点(循环) Block 3: "vmovaps xmm0, xmm6" call 0x1400023e0 <erff> Block 4: inc […]

C代码循环的性能

这个问题在这里继续我的问题(根据神秘的build议): C代码循环的性能 继续我的问题,当我使用打包指令,而不是标量指令使用内在函数的代码看起来非常相似: for(int i=0; i<size; i+=16) { y1 = _mm_load_ps(output[i]); … y4 = _mm_load_ps(output[i+12]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ps1(weight[i+k+l]); x1 = _mm_load_ps(input[i+k+l]); y1 = _mm_add_ps(y1,_mm_mul_ps(w,x1)); … x4 = _mm_load_ps(input[i+k+l+12]); y4 = _mm_add_ps(y4,_mm_mul_ps(w,x4)); } } _mm_store_ps(&output[i],y1); … _mm_store_ps(&output[i+12],y4); } 这个内核的testing性能是每个周期大约5.6个FP操作,但是我认为它恰好是标量版本的4倍,即4.1,6 = 6,4个FP操作每个周期。 考虑到重量因素的移动(感谢指出),时间表看起来像: 它看起来像日程安排不会改变,虽然在movss操作之后有一个额外的指令,将标量权值移到XMM寄存器,然后使用shufps在整个vector中复制这个标量值。 考虑到从负载到浮点域的切换延迟时间,似乎权重vector已经准备好用于mulps ,所以这不应该引起任何额外的延迟。 在这个内核中使用的movaps (alignment的,压缩的移动), addps & mulps指令(用汇编代码检查)与标量版本具有相同的延迟和吞吐量,所以这不应该引起任何额外的延迟。 […]