标签: cpu

std :: pow的性能 - 缓存未命中?

我一直在努力优化我的数字程序,并且遇到了一些神秘的问题.我循环执行数千个浮点运算的代码,其中1个调用pow- 然而,该调用占用了5%的时间......这不一定是关键问题,但它很奇怪,所以我想要了解发生了什么.

当我查找缓存未命中时,VS.NET 2010RC的分析器报告几乎所有缓存未命中都发生在std::pow......所以......那是什么?有更快的替代方案吗?我试过了powf,但那只是稍快一点​​; 它仍然是异常缓存未命中数的原因.

为什么像pow这样的基本功能会导致缓存未命中?

编辑:这不是托管代码. /Oi内在函数已启用,但编译器可以选择忽略它.更换pow(x,y)exp(y*log(x))具有类似的性能-刚才所有的高速缓存未命中都在日志功能.

c++ cpu profiling caching

7
推荐指数
1
解决办法
2233
查看次数

如何触发访问冲突异常

有时错误可能导致内存访问冲突异常.

这个异常究竟是如何触发的?幕后有什么机制?

它是否需要来自CPU(从哪个CPU开始?)/从OS(从什么版本开始?)/从编译器(从什么版本开始?)的支持

编辑:

我想要更好地理解的一个特定场景:

以下代码可能会导致访问冲突异常.

TCHAR* czXXX= _T("ABCDEFG");
czXXX[0]= 'A';
Run Code Online (Sandbox Code Playgroud)

我猜czXXX指向一个只读内存块,但究竟发生了什么?

c++ windows compiler-construction cpu visual-c++

7
推荐指数
2
解决办法
6690
查看次数

字节与短对比Int(以及无符号变化)在C#中?

有人告诉我,只要内存大小不是一个大问题,最好使用int而不是字节或短,因为它实际上更容易处理一个int(CPU需要做额外的东西)使用字节和短路).在C#中这是真的吗?

c# memory cpu types

7
推荐指数
1
解决办法
3130
查看次数

为什么尽可能避免指令分支?

我经常读到,从一个perf的角度看,在汇编指令级别的分支是不好的.但我还没有真正理解为什么会这样.所以为什么?

cpu assembly programming-languages system

7
推荐指数
1
解决办法
1091
查看次数

理论上知道你需要一个微控制器有多强大,运行你的程序?

有了大量的微控制器,甚至不同级别的arduinos提供比上一个更多的功能,是否有一种数学方式或某种方式来了解您需要多少处理能力,只需通过分析,运行您的程序设计为了选择合适的微型?

没有反复试验.即不只是尝试它,如果太慢,购买下一个芯片.

algorithm processing cpu microcontroller

7
推荐指数
1
解决办法
126
查看次数

堆,堆栈和数据段是否在同一个汇编程序中?

据我所知,汇编程序分为两个代码2)数据.现在,当我们编码时,比如说c\c ++,代码被加载到内存中,然后CPU开始执行代码,一个指令,作为汇编程序.我的问题是:1.c代码存储在哪里?我的意思是,当我在Visual Studio中运行程序时,代码是否加载到其中一个 - 堆,堆栈......?2.所以内存实际上分为堆栈,堆和日期段,但是当CPU执行程序时,作为汇编程序,它们都是1个具有相同数据区的汇编程序或者它们形成在中,比方说2或3个汇编程序从一个跳到另一个?

**让我添加这个问题,也许它会澄清我的意图:当我启动一个C程序时,代码(机器指令)被加载到内存中.所以,这是一个装配程序.但记忆分裂是如何发生的?我的意思是,堆栈,数据段等不同的内存部分如何修改汇编程序?

heap cpu assembly stack

7
推荐指数
2
解决办法
5966
查看次数

如何在硬件上执行类型转换?

在C中,有时我们为算术运算转换数据类型,例如:

int a = (int)b + (int)c;
Run Code Online (Sandbox Code Playgroud)

类型转换对CPU有什么影响?类型转换编译成什么指令(x86)?类型转换会损害CPU管道吗?

c cpu

7
推荐指数
1
解决办法
187
查看次数

英特尔编译器生成的代码比MSVC慢68%(提供完整示例)

我有C++代码处理来自一个1800元素阵列的三个连续值.由ICC 14.0编译的代码比MSVC生成的代码慢约68%(1600对2700 CPU周期).我不明白为什么.有人可以帮忙吗?即使我设置英特尔编译器-O3开关,它也不会改变时序.CPU是Ivy Bridge.

#include <iostream>

int main(){
        int data[1200];

        //Dummy-populate data
        for(int y=0; y<1200; y++){
            data[y] = y/2 + 7;
        }

        int counter = 0;

        //Just to repeat the test
        while(counter < 10000){

            int Accum = 0;
            long long start = 0;
            long long end = 0;
            int p = 0;

            start = __rdtsc();

            while(p < 1200){
                unsigned int level1 = data[p];  
                unsigned int factor = data[p + 1];
                Accum += (level1 * factor);
                p = p + 2; …
Run Code Online (Sandbox Code Playgroud)

c++ cpu optimization performance icc

7
推荐指数
1
解决办法
411
查看次数

有没有办法计算java中的指令数量

我想知道我的java代码消耗了多少指令来执行.我正在寻找一个开始指令计数的api,最后应该返回最终的指令总数

例如:

public static void main()
{
  int a=0;
  int b=0;
  int c=0;
  startCountinst();
  if(a==b)
  {
     c++;
  }
  int n = stopCountinst();
}
Run Code Online (Sandbox Code Playgroud)

最后,n应表示调用后执行的指令总数startCountinst().在java中可以计算指令吗?

java cpu instruction-set

7
推荐指数
1
解决办法
2910
查看次数

为什么引用(python)pyglet.image中的类会导致Windows上的CPU负载过重?

我正在使用python的pyglet模块(Windows上的python 3).当我引用pyglet.image中的任何类时,python的CPU使用率会跳起来并且在我退出python之前不会下降.例如:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.
C:\Anaconda3>python.exe
Python 3.4.3 |Anaconda 2.3.0 (64-bit)| (default, Mar  6 2015, 12:06:10) [MSC v.1
600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyglet #No problem!
>>> pyglet.image.ImageData #Heavy CPU load until I exit python
<class 'pyglet.image.ImageData'>
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?为什么提这个类(甚至没有实例化它)会导致如此高的CPU负载?

我测试的系统:

  • 带有Anaconda python 3.4.3的Windows 7桌面和通过'pip install pyglet'安装的pyglet:高CPU使用率(我的问题)

  • 与Anaconda python 3.4.3相同的Win7桌面,但通过'pip install hg + https://bitbucket.org/pyglet/pyglet ' 安装了pyglet :高CPU使用率.

  • 来自python.org的python …

python windows debugging cpu pyglet

7
推荐指数
1
解决办法
234
查看次数