我正在尝试优化应用程序上的几个瓶颈,该应用程序应该运行在各种各样的CPU和架构上(其中一些非常接近嵌入式设备).
然而,由于我的CPU速度,我的分析器的结果并不是很重要.有没有办法(最好是在Windows或Mac OS X下)限制我的CPU速度以进行性能分析?
我曾考虑使用虚拟机,但没有发现任何具有此类功能的虚拟机.
我正在开发一个C#程序,我有一个消耗太多CPU的功能.我想知道一种通过代码(不使用任何外部应用程序)来控制它的方法,并限制CPU使用率的百分比.例如,如果它使用90%的CPU使用率,使我的应用程序仅消耗20%,即使它变慢.它必须在应用程序内自动完成.如果你提供课程,那就太棒了.
我有一个用C#编写的程序,我使用的是VSTS 2008 + .Net 3.5 + Windows Vista Enterprise x86来开发Windows窗体应用程序.
我目前的计算机是双核CPU,我想设置我的程序的CPU亲和力,以便在特定的CPU上运行,并释放另一个CPU来做其他工作.任何想法如何做到这一点?通过编码或配置都可以.
更多的背景是,我的程序是CPU密集型的,所以我不想让它占用我计算机上的所有两个CPU资源,我想释放一个CPU,以便我可以快速浏览网络.:-)
乔治,提前谢谢
我最近考虑了对齐...这是我们通常不必考虑的事情,但我已经意识到某些处理器需要对象沿着4字节边界对齐.这到底意味着什么,以及哪些特定系统具有对齐要求?
假设我有一个任意指针:
unsigned char* ptr
现在,我正在尝试从内存位置检索double值:
double d = **((double*)ptr);
这会导致问题吗?
目前,并行编程有两个主要的硬件环境,一个是多线程CPU,另一个是可以对数据阵列进行并行操作的图形卡.
问题是,鉴于有两种不同的硬件环境,我如何编写一个并行但独立于这两种不同硬件环境的程序.我的意思是我想编写一个程序,无论我有显卡还是多线程CPU或两者兼而有之,系统都应自动选择执行它的方式,显卡和/或多线程CPU中的一个或两个.
是否有允许这样的软件库/语言结构?
我知道有一些方法可以直接定位显卡以运行代码,但我的问题是我们如何在不知道任何硬件知识的情况下编写并行代码,软件系统应该将其安排到显卡或CPU.
如果您要求我对平台/语言更具体,我希望答案是关于C++或Scala或Java.
谢谢
伙计们,我已经编写了20多年的高速软件,并且几乎了解了本书中的每一个技巧,从微型工作台制作合作,分析,用户模式多任务处理,尾递归,你在Linux,Windows上为它提供了非常高性能的东西. , 和更多.
问题是,当CPU密集型工作的多个线程暴露给多核处理器时,我发现自己会感到困惑.
在线程之间(在不同内核上)共享日期的各种方式的微观基准中的性能结果似乎不符合逻辑.
很明显,核心之间存在一些"隐藏的交互",这与我自己的编程代码并不明显.我听说过L1缓存和其他问题,但这些对我来说是不透明的.
问题是:我在哪里可以学到这些东西?我正在寻找一本关于多核处理器如何工作,如何编程以利用其内存缓存或其他硬件架构的深度书,而不是受到它们的惩罚.
任何建议或伟大的网站或书籍?经过大量的谷歌搜索,我空了.
真诚的,韦恩
从昨天开始处理中型项目(大约200个源文件)时,我的Xcode开始表现得非常沉重.项目正确编译并在模拟器和设备中运行.我不使用任何第三方库,除了少数广泛使用的包括(如JSON或facebook ios sdk).
它始终以全速运行CPU,即使它处于空闲状态(没有索引,没有编译,没有编辑).RAM的使用相对正常(300-50MB).
我的机器使用:Core 2 Duo 3.04Ghz CPU,8GB RAM和Vertex OCZ 3 SSD驱动器.
我已尝试在stackoverflow找到的每个建议的解决方案:
什么都没有帮助.在大多数情况下,Xcode会对项目进行一段时间的索引,然后恢复正常性能,但过了一段时间后再次无法使用.两个核心,智能挂起等CPU的CPU回升到95-100%......
我附上了如何看待Xcode进程的截图:

更新: 经过一段时间的希望,我通过移动几个来解决问题
#import "header.h"
从头文件到实现文件的语句,并用前向声明交换它们...问题在一段时间后再次出现.我正在添加控制台日志.奇怪的是,在我退出之后,与Xcode相关的日志出现了,而不是在运行itsef期间.
控制台日志:
5/11/12 9:27:03.777 AM [0x0-0x45045].com.apple.dt.Xcode: com.apple.dt.instruments.backgroundinstruments: Already loaded
5/11/12 9:27:05.571 AM Xcode: Performance: Please update this scripting addition to supply a value for ThreadSafe for each event handler: "/Library/ScriptingAdditions/SIMBL.osax"
5/11/12 9:27:58.168 AM Xcode: ERROR: Failed to create an alert for ID "enabled" based on defaults: 1
Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我为什么Python的multiprocessing.cpu_count()功能会1在调用带有四个ARMv7处理器的Jetson TK1时返回?
>>> import multiprocessing
>>> multiprocessing.cpu_count()
1
Run Code Online (Sandbox Code Playgroud)
Jetson TK1开发板或多或少都是开箱即用的,没有人与cpusets混淆.在同一个Python shell中,我可以打印内容,/proc/self/status它告诉我该进程应该可以访问所有四个核心:
>>> print open('/proc/self/status').read()
----- (snip) -----
Cpus_allowed: f
Cpus_allowed_list: 0-3
----- (snip) -----
Run Code Online (Sandbox Code Playgroud)
还有什么可能导致这种行为cpu_count()?
为了测试Klaus的假设,我使用以下代码来运行一个非常简单的实验:
import multiprocessing
def f(x):
n = 0
for i in xrange(10000):
n = max(n, multiprocessing.cpu_count())
return n
p = multiprocessing.Pool(5)
for i in range(10):
print p.map(f, [1,2,3,4,5])
Run Code Online (Sandbox Code Playgroud)
其中产生了以下输出:
[3, 3, 3, 3, 1]
[4, 3, 3, 3, 3]
[4, 3, 3, 3, 3]
[3, 3, …Run Code Online (Sandbox Code Playgroud) 我有一个我在NodeJS中编写的SOCKS5代理服务器.我正在利用本机net和dgram库来打开TCP和UDP套接字.
它工作正常约2天,所有CPU最大约30%.在没有重新启动的情况下2天后,一个CPU达到100%.之后,所有CPU轮流并一次保持100%的CPU.
我正在使用Cluster来创建实例,例如:
for (let i = 0; i < Os.cpus().length; i++) {
Cluster.fork();
}
Run Code Online (Sandbox Code Playgroud)
这是strace的输出,而cpu是100%:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
99.76 0.294432 79 3733 epoll_pwait
0.10 0.000299 0 3724 24 futex
0.08 0.000250 0 3459 15 rt_sigreturn
0.03 0.000087 0 8699 write
0.01 0.000023 0 190 190 connect
0.01 0.000017 0 3212 38 read
0.00 0.000014 0 420 close
0.00 0.000008 0 612 180 recvmsg
0.00 …Run Code Online (Sandbox Code Playgroud) 指令指针和程序计数器之间有什么基本区别吗?我相信他们都指的是同样的东西,即eip/rip寄存器,尽管到目前为止我做的研究还不是很清楚.