Articles of 性能

我正在寻找可以在graphics编辑程序中进行的任何优化

嘿哟,这是我第一次在这里问一个问题,所以如果我把事情搞得一团糟,就原谅我 我正在开发类似于openCanvas的程序,早期的程序允许多人在互联网上实时绘制相同的canvas。 OC的确很麻烦,而且有很多限制,所以我想写这个。 我已经设置了canvas,使canvas在所有方向上“无限”地延伸,并由512×512像素块组成,这些像素在被绘制之前不会变得活跃,这应该很容易制作,而且我正在考虑使用Direct3D使硬件加速,从而达到512平方块。 我的问题来了,当我想要使用图层,我不太确定如何快速构build图层,而不使用大量的内存,因为我的目标是128M内存的DirectX9兼容video卡,以及约3.2 ghz的系统的CPU的功率和2至8演出之间的RAM。 我有几种不同的方法,我正在考虑使用,并想知道哪个可能是最好的,如果有什么我可以研究,使其运行更好。 我的第一个想法是通过让所有块上的所有图层都作为纹理来使gfx硬件尽可能多地工作,并且通过locking更改的区域,在CPU上更新它们并解锁它们来更新它们。 当前未被更改的块被拼合成一个纹理,并且单独的图层本身保存在系统内存中,这将减less使用的gfx内存,但是会显着增加系统和gfx内存之间的带宽使用。 我可以看到不断的locking和解锁,可能会减慢系统的速度。 另一个可能的问题是,我听说有人使用200层,我想不出有什么好的方法来优化给定的上述。 我的另一个想法是将系统内存中的纹理完全合成,将它们写入纹理,然后将纹理复制到gfx内存以在每个块中渲染。 这似乎消除了其他方法中的很多问题,但同时我将所有工作都移到了CPU中,而不是平衡它。 但是,只要它仍然很快运行,这并不是什么大问题。 然而,再次,有几百层的问题。 在这种情况下,我可能只能更新实际上正在改变的最终像素,这是我认为像Sai和Photoshop这样的大型程序所做的。 我主要是在寻找build议,可能改善上述的build议,更好的方法,或链接到可能与这样的项目有关的文章。 当我用C ++编写它时,我从其他语言翻译没有麻烦。 谢谢你的时间〜

Phabricator极其缓慢

我正在使用Phabricator进行代码评审,经过修改后,我已经按照自己的意愿设置了更多或更less的代码。 我只是有一个问题,我不能真正find解决办法。 浏览phabricator应用程序是顺利的,没有延误。 但是当我在“ 飞跃行动”中写评论(或者select任何其他行动),然后按下“ 小丑飞行 ” ( Clowncopterize)之后,它会一直持续下去。 右下angular的齿轮(繁忙指示器)持续旋转最多60秒。 我无法弄清楚这是什么原因。 我试图做一个顶端,我没有看到任何严重的: top – 11:40:36 up 9 min, 1 user, load average: 0.04, 0.10, 0.07 Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem: […]

调用clock()时出现分段错误

我想了解使用下面的程序以编程方式caching的影响。 我正在与代码段错误。 我使用GDB(用-g -O0编译),发现它是分段错误 start = clock() (first occourance) 难道我做错了什么? 代码对我来说看起来很好。 有人能指出这个错误吗? #include <stdio.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #define MAX_SIZE (16*1024*1024) int main() { clock_t start, end; double cpu_time; int i = 0; int arr[MAX_SIZE]; /* CPU clock ticks count start */ start = clock(); /* Loop 1 */ for (i = 0; […]

是不可中断的睡眠我的Python程序的原因是真的很慢(如果是这样,我该如何解决这个问题?)?

我有以下select语句(使用sqlite3和pysqlite模块): self.cursor.execute("SELECT precursor_id FROM MSMS_precursor "+ "JOIN spectrum ON spectrum_id = spectrum_spectrum_id "+ "WHERE spectrum_id = spectrum_spectrum_id "+ "AND ROUND(ion_mz,9) = ? AND ROUND(scan_start_time,4) = ? "+ "AND msrun_msrun_id = ?", select_inputValues) 在Python中运行需要55秒。 直接在SQLite命令行上运行它只需要15ms。 现在,我注意到,在这个步骤中,Python程序进入了不间断的睡眠状态( 31283 ndeklein 18 0 126m 24m 3192 D 1.0 0.0 2:02.50 python ,顶级输出中的D),并从100%的CPU下降到1 % 中央处理器。 现在我在查询过程中注意到了,在运行查询时我也查看了顶部输出。 在这段时间内,top也显示它会进入不间断的睡眠状态,虽然它在R和D之间来回切换,只减慢到50%左右(根据D或R状态而变化)。 所以现在我认为这是减慢我的查询速度(请纠正我,如果不间断的睡眠与程序速度无关)。 如果这是真的,我怎样才能确保程序不会进入这种状态? 更新1: […]

如何测量TCP背压?

我正在试图调查与通过TCP套接字发布日志到中央服务器的代码的性能问题。 一个假设是,发行商正在经历套接字层面的背压。 有没有办法从操作系统获得背压指标? 我相信答案是针对操作系统的。 就我而言,我使用的是Ubuntu 14.04和默认的Canonical提供的3.13内核。 我想我可以通过缩放正在发布的消息量并测量等待套接字写入完成所花费的相对时间量来检测背压。 但似乎这是一个普遍的问题,find一个通用的方法来衡量它。 (但是,在我的Googlesearch中,我所发现的只是关于连接过程中阻塞的讨论以及关于背压如何工作的解释。)

如何确保数据到达存储器,绕过内存/caching/缓冲IO?

在Linux中,如何确保我的系统write()调用(和类似的write-IO调用/变体)到达非易失性存储,绕过内存/caching/缓冲IO?

如何在dtrace中查找参数

代码 dtrace -n 'syscall::read:entry /execname != "dtrace"/ { @reads[execname, fds[arg0].fi_pathname] = count(); }' dtrace: description 'syscall::read:entry ' matched 1 probe ^C bash /proc/1709/psinfo 1 loader /zp/space/f2 1 nscd /etc/user_attr 1 bash /export/home/mauroj/.bash_history 2 loader /zp/space/f3 2 nscd /etc/group 2 su /etc/default/su 8 su /devices/pseudo/sy@0:tty 9 bash /dev/pts/5 66 Xorg /devices/pseudo/conskbd@0:kbd 152 gnome-terminal /devices/pseudo/clone@0:ptm 254 dtrace代码fds[arg0].fi_pathname […]

哪些perf事件可以使用PEBS?

我想知道哪些事件可以在我的CPU(桑迪桥)上有精确的修饰符。 英特尔软件开发人员手册(表18-32。英特尔微体系结构代码名称Sandy Bridge的PEBS性能事件)仅包含以下事件: INST_RETIRED , UOPS_RETIRED , BR_INST_RETIRED , BR_MISP_RETIRED , MEM_UOPS_RETIRED , MEM_LOAD_UOPS_RETIRED , MEM_LOAD_UOPS_LLC_HIT_RETIRED 。 SandyBridge_core_V15.json列出了PEBS> 0的相同事件。 不过有一些使用perf 例子 ,在cycles事件中增加:p 。 我可以在我的机器上成功运行perf record -e cycles:p 。 也perf record -e cycles:p -vv — sleep 1打印precise_ip 1 。 那么这是否意味着CPU_CLK_UNHALTED事件实际上使用了PEBS? 是否有可能获得完整的事件列表,支持:p ?

在Linux上,access()比stat()更快吗?

我假设access()只是stat()的一个包装,但是我一直在用googlesearch, 发现了一些关于用更便宜的访问调用取代stat调用的轶事 。 假设你只是想检查一个文件是否存在,访问速度更快? 它是完全不同的文件系统?

什么是“高度非自愿的背景”开关意味着什么?

我用 C语言重写了一部分代码。使用getrusage(2) C APItesting资源使用情况。 在更改代码之前: user time (ms): 21503 system time (ms): 372 involuntary context switches: 20 改变之后: user time (ms): 25589 system time (ms): 80732 involuntary context switches: 821 我看到很多involuntary context switches都是在我重写的代码中完成的。 我的问题不是关于如何减less上下文切换。 但.. 当“非自愿的上下文切换”更多时会发生什么? 它会以什么方式影响系统? PS:没有任何东西正在写入磁盘上没有活动。 它只是多次ping服务器。 更新: 增加了系统和用户的时间。 程序是multithreading的。 两种情况下都会产生相同数量的线程(3k线程)。 只有C中的底层API正在被重写。