小编kir*_*rbo的帖子

了解CPU缓存和缓存行

我试图了解CPU缓存是如何运行的.让我们说我们有这个配置(作为一个例子).

  • 缓存大小1024字节
  • 缓存行32个字节
  • 1024/32 = 32个缓存行全部在一起.
  • Singel缓存行可以存储32/4 = 8个整数.

1)根据这些配置,标签的长度应为32-5 = 27位,索引大小为5位(2 ^ 5 =高速缓存行中每个字节的32个地址).

如果总缓存大小为1024且有32个缓存行,那么标记+索引存储在哪里?(还有另外4*32 = 128字节.)这是否意味着缓存的实际大小是1024 + 128 = 1152?

2)如果在这个例子中高速缓存行是32字节,这意味着当需要从RAM获取新字节时,32个字节被复制到高速缓存中.我是否正确地假设所请求字节的缓存行位置将由其地址确定?

这就是我的意思是:如果CPU在请求的字节[FF FF 00 08],则可用的高速缓存线将充满了从字节[FF FF 00 00][FF FF 00 1F].我们要求的单字节将处于适当位置[08].

3)如果前面的语句是正确的,是否意味着用于索引的5位在技术上是不需要的,因为所有32个字节都在缓存行中?

如果我出错了,请告诉我.谢谢

c cpu-cache

24
推荐指数
1
解决办法
2万
查看次数

C++快速除法/ mod乘10 ^ x

在我的程序中,我使用了很多整数除以10 ^ x和整数mod函数10.

例如:

unsigned __int64 a = 12345;
a = a / 100;
....
Run Code Online (Sandbox Code Playgroud)

要么:

unsigned __int64 a = 12345;
a = a % 1000;
....
Run Code Online (Sandbox Code Playgroud)

如果我要使用正确的位移>>,那么我将获得模式2^x,这不是我想要的.

有什么办法可以加速整数除法和mod函数的程序吗?

c++

22
推荐指数
5
解决办法
2万
查看次数

Linux,如何捕获屏幕,以及模拟鼠标移动

我需要捕捉屏幕(作为打印屏幕)以便我可以访问像素颜色数据,做一些图像识别,之后我需要在屏幕上生成鼠标事件,如左键单击,拖放(移动鼠标)按下按钮,然后释放它).完成后,图像将被删除.

注意:我需要捕获整个屏幕用户可以看到的所有内容,我需要模拟程序窗口外的点击(如果它有任何区别)

规范:Linux ubuntu语言:C++

性能不是很重要,"打印屏幕"功能每隔约10秒执行一次.该过程的持续时间可长达24小时,因此方法需要稳定并且内存泄漏免费(因为通常:)

我能够在Windows中赢得GDI和一些Windows事件,但我不知道如何在Linux中做到这一点.

非常感谢

c++ linux screen-capture mouseevent

10
推荐指数
1
解决办法
1万
查看次数

"内联"课程的处罚

Visual Studio允许您创建"内联"类(如果我没有错误的名称).所以类头和实现都在一个文件中.

H.文件包含类和函数的定义和声明,根本没有.cpp文件.

所以我想知道这样做是否有任何惩罚?有什么缺点?

非常感谢

c++ class visual-studio

8
推荐指数
2
解决办法
194
查看次数

如何将非静态成员函数传递给glutDisplayFunc

我有一个类,它具有初始化opengl的功能并在单独的线程中运行它.

我的问题是:openGL回调如glutDisplayFunc,glutMotionFunc等接受void(*f)void,我无法传递类成员函数.

周围的方式.1)I可以声明成员函数作为静态的,但在这种情况下,我需要所有使用的成员变量声明为静态的,并最终宣告一整类为静态.

2)我可以使用一些独立的函数并将我的对象声明为全局,但它太糟糕了.

我想知道是否有一些方法,所以我不需要让我的opengl类静态?(使用c ++)

c++ opengl static

6
推荐指数
1
解决办法
5671
查看次数

gnuplot,检查函数是否存在(已定义)

文档演示了如何检查变量是否先前已在gnuplot脚本中定义.

来自doc的示例:

a = 10
if (exists("a")) print "a is defined"
if (!exists("b")) print "b is not defined"
Run Code Online (Sandbox Code Playgroud)

但是,是否可以检查先前是否已定义过某个功能?

换句话说,有没有办法做到以下几点:

f(x) = 2*x 
if (exist("f(x)") print "Function is defined"
Run Code Online (Sandbox Code Playgroud)

谢谢!

gnuplot

5
推荐指数
1
解决办法
1039
查看次数

在rsh中转义管道字符

我正在尝试运行此bash命令,但无法绕过“ |” 管道字符

rsh -l user machine "echo "PORTS = 123|456|789" >> conf.cfg"

获得:

bash: 456 >> conf.cfg: No such file or directory

bash: 789: command not found

您知道我如何回显PORTS = 123|456|789到远程文件吗?

谢谢!

bash rsh

4
推荐指数
1
解决办法
1万
查看次数

C++,使用一个字节来存储两个变量

我正在研究棋盘的表示,我打算将它存储在32字节数组中,其中每个字节将用于存储两个部分.(这样每件只需要4位)

以这种方式执行此操作会导致访问板的特定索引的开销.您是否认为,此代码可以优化或完全不同的访问索引方法可以使用?

C++

char getPosition(unsigned char* c, int index){
    //moving pointer
    c+=(index>>1);

    //odd number
    if (index & 1){
        //taking right part
        return *c & 0xF;
    }else
    {
        //taking left part
        return *c>>4;
    }
}


void setValue(unsigned char* board, char value, int index){
    //moving pointer
    board+=(index>>1);

    //odd number
    if (index & 1){
        //replace right part
                 //save left       value only 4 bits
        *board = (*board & 0xF0) + value;
    }else
    {
        //replacing left part
        *board  = (*board & 0xF) + (value<<4);
    } …
Run Code Online (Sandbox Code Playgroud)

c++ performance pointers chess

3
推荐指数
1
解决办法
1531
查看次数

将bash脚本输出到文件中(不带>>)

也许这很简单,但我不知道.我有一个在cron中指定的工作,它偶尔会调用一个脚本.

类似的东西: 1 1 * * * bash script.sh

现在,当脚本启动时,它会读取配置并意识到所有输出都需要附加到日志文件中.

简单的解决方案是更新cron任务,1 1 * * * bash script.sh >> log 但是假设在这个阶段不知道文件的名称和位置.

所以我提出了有效的解决方案,但我不喜欢它.脚本顶部的代码:

source config.sh

N=$#
LAST_ARG=${!N}
if [ "$LAST_ARG" != "log" ]
then
  bash \`basename $0\` \`echo $@ log\` >>  "$LogFile"
  exit
fi
Run Code Online (Sandbox Code Playgroud)

我递归地启动相同的脚本,附加参数和日志文件的方向.那么Parent实例刚刚关闭.

当然有必要有更好的方法吗?

谢谢

bash

2
推荐指数
1
解决办法
2639
查看次数

gnuplot多列计算统计信息

我有一个简单的9列文件。我不会为每列计算某些统计数据,然后将其绘制(使用gnuplot)。

1)这是我如何计算除第一列以外的每一列的统计信息。

stats 'data' every ::2 name "stats"
Run Code Online (Sandbox Code Playgroud)

2)在输出屏幕中,我可以看到操作成功。请注意,列数/记录数为8

* FILE: 
  Records:      8
  Out of range: 0
  Invalid:      0
  Blank:        0
  Data Blocks:  1

* COLUMNS:
  Mean:          6.5000       491742.6625
  Std Dev:       2.2913          703.4865
  Sum:          52.0000       3.93394e+06
  Sum Sq.:     380.0000       1.93449e+12

  Minimum:       3.0000 [0]   490312.0000 [2]
  Maximum:      10.0000 [7]   492643.5000 [7]
  Quartile:      4.5000       491329.5000
  Median:        6.5000       491911.1500
  Quartile:      8.5000       492252.2500

  Linear Model: y = 121.8 x + 4.91e+05
  Correlation:  r = 0.3966
  Sum xy:       2.558e+07
Run Code Online (Sandbox Code Playgroud)

3)现在,我可以通过添加_x和_y来访问前两列的统计信息

print stats_median_x …
Run Code Online (Sandbox Code Playgroud)

plot gnuplot

2
推荐指数
1
解决办法
3441
查看次数