什么是32位或64位机器? 这是处理器体系结构… 32位机器可以用64位机器以相同的方式读取和写入32位数据…。 什么是32位机器可以访问的最大内存? 它是2^32=4Gb (4Gigabit = 0.5千兆字节) 那意味着4Gb ram? 如果我考虑一个64位机器相同的方式,那么我可以有一个16ExbiBytes公羊..这是可能的? 我的观念是对的吗?
我正在研究一个将要运行很长时间的后台程序,并且我有一个外部日志程序( SmartInspect ),我想定期使用一些值来进行debugging,以在debugging时实时监控它。 我知道我可以简单地启动多个程序,比如任务pipe理器,或者IARSN TaskInfo,但是我想把所有的东西放在我自己的程序中,因为我也想添加一些简单的规则,比如程序使用多于X%CPU,在日志中标记这个。 我有一个后台线程,定期向SmartInspect提供一些统计信息,如内存消耗,工作集等。 这个线程是否有可能准确衡量它消耗了多less计算机的CPU资源? 主程序是一个单线程应用程序(除了看门狗线程logging统计),所以如果一种技术被限制在一个线程使用多less,那么这也是一个好主意。 我发现了一些与Linux和C的rusage相关的条目。有没有类似的东西可以用于这个? 编辑:好的,我尝试了性能计数器的方式,但是每次调用时都添加了很多GC数据,所以内存使用和垃圾收集的graphics猛增。 我想我现在就把这个部分留下。
在最后几天,我观察到我无法解释的新工作站的行为。 对这个问题做了一些研究, INTEL Haswell架构和当前Skylake Generation中可能存在一个bug。 在撰写关于可能的错误之前,让我给你一个使用的硬件,程序代码和问题本身的概述。 工作站硬件规范 英特尔至强E5-2680 V3 2500MHz 30Mcaching12核 Supermicro SC745 BTQ -R1K28B-SQ 4 x 32GB ECC Registered DDR4-2133 Ram INTEL SSD 730系列480 GB NVIDIA Tesla C2075 NVIDIA TITAN 有问题的操作系统和程序代码 我目前正在运行Ubuntu 15.04 64位桌面版本,最新的更新和内核的东西安装。 除了使用这台机器开发CUDA内核和东西,我最近testing了一个纯C程序。 该程序正在对相当大的input数据集进行一些修改后的ART 。 所以代码执行一些FFT并花费相当多的时间来完成计算。 我目前无法发布/链接到任何源代码,因为这是正在进行的研究,无法发布。 如果你不熟悉ART ,只是简单的解释一下。 ART是一种技术,用于重build从计算机断层摄影机接收到的数据,以获取可见的图像进行诊断。 所以我们的代码版本重build了像2048x2048x512这样的大小的数据集。 到目前为止,没有什么特别的,也没有涉及火箭科学。 经过几个小时的debugging和修复错误,代码在参考结果上进行了testing,我们可以确认代码的工作原理。 代码使用的唯一的库是标准的math.h 没有特殊的编译参数,没有额外的库的东西,可能会带来额外的问题 。 观察问题 该代码使用一种技术来实现ART,以最小化重构数据所需的投影。 那么我们假设我们可以重build一个包含25个投影的数据片。 代码在12个内核上以完全相同的input数据启动。 请注意,该实现不是基于multithreading,目前启动了12个程序实例。 我知道这不是最好的办法,涉及适当的线程pipe理是非常build议,这已经在改善列表:) […]
我只是想知道是否有一个优雅的方式来设置一个特定的线程进行密集计算的最大CPU负载。 现在我已经find了线程中最耗时的循环(它只是压缩),并使用带有硬编码值的GetTickCount()和Sleep() 。 它确保循环持续一段时间,并且睡眠一定的最小时间。 它或多或less的工作,即保证线程不会使用超过50%的CPU。 但是,行为取决于CPU内核的数量(巨大的劣势),简单的丑陋(更小的缺点:))。 有任何想法吗?
我正在编写一个应用程序,它将运行多个线程,并希望限制这些线程的CPU /内存使用量。 对于C ++有一个类似的问题 ,但是我想尽量避免使用C ++和JNI。 我意识到这可能不会使用更高级别的语言,但我很好奇,看看有没有人有任何想法。 编辑:增加了一个赏金; 我想要一些非常好的,深思熟虑的想法。 编辑2:我需要这个的情况是在我的服务器上执行其他人的代码。 基本上它是完全的任意代码,唯一的保证就是在类文件上会有一个主要的方法。 目前,在运行时加载的多个完全不同的类正在作为单独的线程同时执行。 写它的方式,重构为每个被执行的类创build单独的进程将是一个痛苦。 如果这是通过VM参数来限制内存使用的唯一好方法,那就这样吧。 但是我想知道是否有办法用线程来完成。 即使作为一个单独的过程,我想能够以某种方式限制其CPU使用率,因为如前所述,其中几个将立即执行。 我不想要一个无限循环来占用所有的资源。 编辑3:一个简单的方法来近似对象的大小是与java的Instrumentation类; 具体来说就是getObjectSize方法。 请注意,使用此工具需要一些特殊设置。
从第11章( 性能和可伸缩性 )和JCIP书籍的命名上下文切换部分: 当一个新的线程被切换时,它所需要的数据不太可能在本地处理器caching中,所以上下文切换会导致一连串的caching未命中,因此线程在第一次调度时会运行得更慢一些。 有人可以用一种容易理解的方式解释caching未命中的概念和其可能的相反( caching命中 )吗? 为什么上下文切换会导致很多caching未命中?
有没有一个API来获取Linux中可用的CPU数量? 我的意思是,不使用/ proc / cpuinfo或任何其他系统节点文件… 我发现这个实现使用sched.h: int GetCPUCount() { cpu_set_t cs; CPU_ZERO(&cs); sched_getaffinity(0, sizeof(cs), &cs); int count = 0; for (int i = 0; i < 8; i++) { if (CPU_ISSET(i, &cs)) count++; } return count; } 但是,使用通用库不会有更高的水平吗?
我必须将一个巨大的文件分成许多小文件。 每个目标文件都由偏移量和长度定义为字节数。 我使用下面的代码: private void copy(string srcFile, string dstFile, int offset, int length) { BinaryReader reader = new BinaryReader(File.OpenRead(srcFile)); reader.BaseStream.Seek(offset, SeekOrigin.Begin); byte[] buffer = reader.ReadBytes(length); BinaryWriter writer = new BinaryWriter(File.OpenWrite(dstFile)); writer.Write(buffer); } 考虑到我不得不把这个函数调用大约10万次,速度非常慢。 有没有办法让作家直接连接到读者? (也就是说,实际上没有将内容加载到内存中的缓冲区中。)
在过去的3 – 5年里,我一直在C和CPython工作。 考虑一下我的知识基础。 如果我将一个汇编指令(如MOV AL, 61h用于支持它的处理器,那么处理器内部究竟是什么内容来解释这个代码并将其作为电压信号进行调度? 这样一个简单的指令怎么可能被执行呢? 当我试图想到MOV AL, 61h甚至XOR EAX, EBX包含的大量步骤时,Assembly甚至感觉像是高级语言。 编辑:我读了一些评论,问为什么我把这个作为embedded式时,x86系列是不常见的embedded式系统。 欢迎来到我自己的无知。 现在我认为,如果我对此一无所知,也可能有其他人对此毫无所知。 考虑到你们所有人的努力,对于我来说,select一个最喜欢的答案是困难的,但是我感到不得不作出决定。 没有伤害的感觉,家伙。 我经常发现,我对计算机了解得越多,我越是意识到自己真的知道了。 感谢您打开我的想法微码和晶体pipe逻辑! 编辑#2:感谢这个线程,我只是理解为什么XOR EAX, EAX比MOV EAX, 0h更快。 🙂
我知道一些显着的x64架构(更高的可寻址RAM地址等)的收益…但是: 如果我的程序没有真正需要在本地64位模式下运行,该怎么办? 我应该移植它吗? 是否有可预见的结束32位支持的最后期限? 我的应用程序能够像原生x64代码一样运行得更快/更好/更安全吗?