我对 IO 的整个概念有点困惑;我想知道 CPU 如何从磁盘(例如 SATA 磁盘)读取数据?
当带有 read()/write() 的程序符合对特定文件的引用并且 CPU 遇到此引用时,它是否直接从磁盘读取(通过内存映射的 IO 端口)?还是先写入 RAM,然后再写回磁盘?
据我所知,Return Stack Buffer仅支持4到16个条目(来自wiki:http://en.wikipedia.org/wiki/Branch_predictor#Prediction_of_function_returns)并且不是键值对(基于ret指令位置的索引) ).这是真的吗?上下文切换发生时RSB会发生什么?
假设我们进入了50个函数,这些函数在返回堆栈缓冲区长度为16的CPU中没有返回,之后会发生什么?这是否意味着所有预测都失败了?你能说明一下吗?这种情况在递归函数调用中是否相同?
谢谢!
我正在构建一台办公室PC,其中最重要的任务是在R中运行蒙特卡罗马尔可夫链(MCMC)估计.显然,这是一项CPU密集型任务,而R仅限于单核.
鉴于预算有限,哪个CPU更适合任务,AMD还是英特尔?特别是,我正在研究英特尔酷睿i3 4130,其中两个内核时钟频率为3.4 Ghz,AMD FX-6300,六个内核时钟频率为3.5 Ghz,解锁倍频器.鉴于R的局限性,在重型计算任务中哪一个在性能方面更好?
谢谢.
编辑:我能在这个问题上找到的唯一信息就是这个FAQ项目:
2.23为什么R从不使用超过50%的CPU?这是对Windows令人困惑的任务管理器的误读.R的计算是单线程的,因此它不能使用多个CPU.任务管理器显示的不是CPU中的使用情况,而是使用占CPU表观总数的百分比.我们说"明显",因为它处理所谓的"超线程"CPU,例如每个核心两个CPU,而大多数现代CPU至少有两个核心.
我是否理解如果R只能使用单个CPU线程,那么英特尔的超线程无关紧要,因此AMD更高的时钟将具有优势?
EDIT2:这里有几个有点相关的基准测试,虽然他们不比较CPU,只是有和没有超线程的速度.
编辑3:这个主题是关于同样的问题,尽管用不同的术语表达.虽然没有太大的决议.
EDIT4:我找到了答案,但由于我怀疑这个问题会重新开放,我会在这里引用它.请参阅我对以下主要帖子的评论.
正确答案是AMD(给出这个特殊选择).如果存在计算困难,例如需要运行非常长的MCMC链,则可以使用JAGS或BUGS与R包,例如BRugs,R2WinBUGS,runjags和rjags.在这种情况下,可以在不同的核心上为相同的参数运行多个链,并在事后组合它们.这个视频解释了它.内核越多,链越多,因此具有六个内核的AMD优于具有4个(超线程)内核的Intel.
例如,在六核AMD上我将同时运行六个链:
library(R2WinBUGS)
re.sim<-bugs(data, inits, parameters, "model.bug", n.chains=6, n.iter=100000,
n.burnin=3000, n.thin=2, debug=F, program="openbugs")
Run Code Online (Sandbox Code Playgroud)
在Intel CPU上,我可以同时运行四个链,并且时钟频率较低.值得注意的是,runjags库允许并行执行,包括多机群集.
我认为那些将这篇文章标记为偏离主题的人认为它是一个非常广泛的问题,而事实上它是一个非常狭隘的问题,需要R的知识,软件R接口,MCMC是什么和做什么,以及如何所有这有关于uzilizing CPU power的结合.我提供的答案根本不是主观的,它与编写复杂的贝叶斯模型直接相关.投票重新开放,标记为偏离主题可能是由于对MCMC所要求的无知,而是集中在"AMD vs"上英特尔"红鲱鱼.
很奇怪处理器/ CPU在执行除零指令时对intel cpu和Linux执行的操作.如何将错误中继到应用程序,以便它可以记录错误或通知开发人员?
谢谢!
我在实验室工作并编写了多线程计算程序,在C++ 11上使用std::thread.现在我有机会在多CPU服务器上运行我的程序.
服务器:
我对多CPU编程一无所知.第一个想法,我想到了运行40个应用程序然后将它们的结果粘合在一起.这是可能的,但我想更多地了解我的机会.
谢谢!
Linux perf工具提供对CPU事件计数器的访问.它允许您指定要计数的事件以及何时计算这些事件.
https://perf.wiki.kernel.org/index.php/Tutorial
默认情况下,事件在用户和内核级别进行测量:
perf stat -e cycles dd if=/dev/zero of=/dev/null count=100000要仅在用户级别进行测量,必须传递修饰符:
perf stat -e cycles:u dd if=/dev/zero of=/dev/null count=100000要测量用户和内核(显式):
perf stat -e cycles:uk dd if=/dev/zero of=/dev/null count=100000
由此,我预计这cycles:u意味着"只运行非内核代码时才计算事件",并且记录的计数不会映射到内核符号,但似乎并非如此.
这是一个例子:
perf record -e cycles:u du -sh ~
[...]
perf report --stdio -i perf.data
[...]
9.24% du [kernel.kallsyms] [k] system_call
[...]
0.70% du [kernel.kallsyms] [k] page_fault
[...]
Run Code Online (Sandbox Code Playgroud)
如果我这样做但使用cycles:uk然后我会报告更多的内核符号,所以事件修饰符确实有效.使用cycles:k几乎只有内核符号生成报告,但它确实包含一些libc符号.
这里发生了什么?这是预期的行为吗?我是否误解了链接文档中使用的语言?
链接文档还包括此表,如果有帮助,则使用略有不同的描述:
Run Code Online (Sandbox Code Playgroud)Modifiers | Description | Example ----------+--------------------------------------+---------- u | monitor at priv level 3, …
我们在生产中看到了这个间歇性问题。CPU 随机固定在 50%(2 核 CPU),并且永远不会回来。唯一的选择是重新启动服务器。\n这就是 Dynatrace 中 CPU 的显示方式
\n\n
\n这就是我们通过 dynatrace 分析时线程转储的样子。
通过我的研究,似乎存在 jdk 缺陷
\n\nCalling \'java.util.zip.Deflater.finish()\' prematurely hangs the application. \nThe application is spinning consuming one cpu\nRun Code Online (Sandbox Code Playgroud)\n\nhttps://bugs.openjdk.java.net/browse/JDK-8060193
\n\n仅当涉及某些多个过滤器时才会随机发生。
\n\n我能够在具有 JDK“1.8.0_201”的 CentOs 虚拟机上使用上述 jira 中的测试类来重现此问题\n这令人惊讶,因为根据文档和票证,此问题已得到修复。
\n\n经过进一步研究,发现jdk中再次打开了类似的缺陷。
\n\nhttps://bugs.openjdk.java.net/browse/JDK-8193682
\n\n现在团队不愿意继续研究它,除非有人可以重现它。\n由于它是在生产中随机发生的,我不确定如何重现它。https://bugs.openjdk.java.net/browse/JDK-8060193中的测试类仍然存在问题。这是否是一个有效的测试用例?\n如果这是有效的,那么每次我们发送压缩数据时都会出现问题。
\n\n关于为什么会发生这种情况以及我们如何解决这个问题有任何指示吗?
\n\n更新:\n在我们正在使用的库之一中,它抛出异常\n格式错误的 UTF-8 字符(意外的非连续字节 0x00,紧接在起始字节 0xfd 之后)
\n\nLastName, First\xe2\x80\x99Name\n正如我们所见,这不是一个常规的撇号。我们可以通过从 word 中复制粘贴来实现这一点,它会自动将常规撇号更正为这个时髦的字符。
\n\n我们的重现器确实抛出了一个错误,但 CPU 并没有卡住。我认为这是在高流量和流量的情况下发生的。 …
我在 AWS Fargate 上以 1 vCPU/2GB 内存任务配置部署了一个节点应用程序。我一直想知道 Node.js 在此设置上运行时与可用 vCPU 的关系。
根据 AWS 文档,vCPU 只是 intel Xeon CPU 核心上的超线程:Fargate 中的 vCPU 真正意味着什么?。那么,如果整个程序仅在一个本身已经是超线程的 vCPU 上运行,那么 libuv 如何运行线程池(默认情况下运行 4 个线程)呢?另外,Node 程序在具有 0.256 vCPU 的较低配置上运行的配置上的行为如何?
此外,Fargate 通过运行配置中指定的任务数量来自动处理扩展;但是,如果我决定使用 PM2 之类的东西在每个任务中运行多个 Node 进程,会发生什么?由于我在 1 个 vCPU 上运行,这是否真的不起作用?
首先,我不知道我是否应该在这里问这个问题,或者在 Electronics StackExchange 中问这个问题,所以如果您认为我应该在那里问这个问题,请告诉我。
我对测量 Intel CPU 中每个 CPU 核心的能耗感兴趣。我已阅读 Intel 的 Intel 64 开发人员手册,据我了解,RAPL 将提供以下方面的能耗估算:
这表明我能期望的最好结果是 CPU 中所有内核的集体能耗值。然而,我也知道“RAPL不是模拟功率计,而是使用软件功率模型”,根据https://01.org/blogs/2014/running-average-power-limit-%E2%80 %93-rapl。
我想知道的是,这个模型的工作方式是已知的还是公开的?并且,是否可以使用 RAPL 或其他接口提供的指标来估计各个核心功耗?我知道,如果英特尔不通过 RAPL 提供此信息,则可能无法获得它,但我想至少找到一个证实这一点的来源。
感谢您的帮助!
假设我在 Windows 计算机上运行(电源)shell。
有没有我可以用来获得的单行:
注意:我只想要一个数字作为命令输出,而不是任何标题或文本。
cpu ×10
linux ×2
architecture ×1
autoscaling ×1
aws-fargate ×1
block ×1
c++ ×1
c++11 ×1
cpu-usage ×1
energy ×1
intel ×1
interrupt ×1
io ×1
java ×1
javascript ×1
msr ×1
node.js ×1
performance ×1
powershell ×1
privileges ×1
r ×1
signals ×1
windows ×1
windows-10 ×1
x86 ×1