我想知道根据不同的字符集破解哈希所需的数学时间.
例如,仅使用7个字母,US-ASCII字母字符,我们知道可以使用26 7个可能的序列.知道每分钟计算机可以生成多少这些可以让我了解生成所有可能的哈希值并破解某个7字符哈希(抛开生日攻击)需要多长时间.
例如,取上面的数字,如果现代四核可以每分钟产生100万个哈希值,那么8031810176 / 1000000 / 60 = 133.86在该范围内找到所有可能的哈希值需要数小时.
此外,具有原生AES的新型Sandy Bridge英特尔芯片如何发挥作用?
我知道GPU比CPU快得多的例子.但存在很难并行化的算法(问题).当CPU可以克服GPU时,你能给我一些例子或测试吗?
编辑:
谢谢你的建议!我们可以对最流行的和最新的cpu和gpu进行比较,例如Core i5 2500k vs GeForce GTX 560 Ti.
我想知道如何比较它们之间的SIMD模型.例如:Cuda更准确地称SIMD为SIMD模型.但是SIMT应该与CPU上的多线程进行比较,后者在MIMD内核之间分配线程(任务)(Core i5 2500k提供4个MIMD内核).另一方面,这些MIMD内核中的每一个都可以实现SIMD模型,但这不是SIMT,我不知道如何比较它们.最后,具有并发内核执行的fermi架构可能被视为具有SIMT的MIMD内核.
背景:
在我用C++编写的应用程序中,我创建了3个线程:
std::queue1.前两个线程占CPU使用率的60-80%,平均每个占35%.
题:
我不明白为什么有些线程占用高CPU.
我将其分析如下:如果操作系统做出决策,如上下文切换,中断和调度,哪个线程应该被授予对系统资源的访问权限,比如CPU时间,那么进程中的某些线程是如何发生的呢?比其他人使用更多的CPU?看起来有些线程在枪口强行从操作系统中获取CPU ,或者操作系统对某些线程有一个真正的软点,所以它从一开始就偏向于它们,为它们提供了所有的资源.为什么它不能公正,并平等地给予他们所有人?
我知道这很天真.但是,如果我按照这一思路思考,我会更加困惑:操作系统根据线程要完成的工作量来访问线程的CPU,但操作系统在执行之前如何计算或预测工作量彻底?
我想知道高CPU使用率的原因是什么?我们如何识别它们?是否可以通过查看代码来识别它们?有什么工具?
我正在使用Visual Studio 2010.
我也怀疑std::queue.我知道标准容器不是线程安全的.但是如果只有一个线程将项目排队到队列中,那么如果只有一个线程从中取消项目是否安全呢?我想它就像一个管道,一方面你插入数据,另一方面,你删除数据,那么为什么它是不安全的,如果它同时完成?但是,这不是本主题中的真正问题,但是,您可以在答案中添加注释,解决此问题.
更新:
在我意识到我的消费者线程正在使用busy-spin之后,我已经使用Sleep修复了3秒钟.这个修复是暂时的,很快我就会使用Event.但即使使用Sleep,CPU的使用率也降至30-40%,有时它会达到50%,从可用性的角度来看似乎并不理想,因为系统不响应其他应用程序用户当前正在使用的.
有什么方法我仍然可以改善高CPU使用率?如前所述,生产者线程(现在使用大多数CPU周期)读取文件,解析其中的数据包(某些格式),并从中生成模式.如果我使用睡眠,那么CPU使用率会降低,但这是个好主意吗?解决它的常用方法有哪些?
有没有办法将os.cpus()信息转换为百分比?就像iostat的输出一样(在CPU部分).
我的代码:
var os = require('os');
console.log(os.cpus());
Run Code Online (Sandbox Code Playgroud)
输出:
[ { model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 5264280,
nice: 0,
sys: 4001110,
idle: 58703910,
irq: 0 } },
{ model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 2215030,
nice: 0,
sys: 1072600,
idle: 64657440,
irq: 0 } },
{ model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 5973360,
nice: 0,
sys: 3197990,
idle: 58773760,
irq: 0 } },
{ model: 'MacBookAir4,2',
speed: 1800,
times:
{ user: 2187650,
nice: 0,
sys: 1042550,
idle: …Run Code Online (Sandbox Code Playgroud) 我正在研究跨平台分析套件,并希望在每次运行的报告中添加有关机器CPU(架构/时钟速度/内核)和RAM(总数)的信息.目前我需要针对Windows和Unix,所以我需要从两个平台获取此信息的方法,任何线索?
编辑:谢谢你的答案,现在我得到了CPU体系结构,核心CPU数量和总内存,但我仍然缺乏CPU的时钟速度任何想法?
我是一般的编程新手所以请在回答我的问题时牢记这一点.
我有一个程序,它采用一个大型3D阵列(10亿个元素)并沿各个轴汇总元素,以生成数据每一侧投影的2D数组.这里的问题是它非常密集,因为程序不断地从ram获取信息,包括读写.
问题是,如果我多线程化程序或者我最终会遇到RAM访问瓶颈,我会获得任何性能提升吗?当我说多线程时,我只是指2或4个核心的多线程,而不是更多.
如果它有帮助,我目前的计算机配置是2.4ghz core2 quad,1033 fsb,4gb ram,667mhz.
提前致谢,
-Faken
编辑:
在我看来,这里的人们对我最初预期的这个问题更感兴趣.我将扩展问题并为感兴趣的人发布一些代码.
首先,有一点关于我的背景,以便你了解我的来源.我是一名机械工程研究生,有些人设法选择一个与机械工程无关的话题.大约5年前,我在介绍性的java(强制)课程中学习了1门课程,直到大约一个月前,我才认真地开始学习论文.我还采取了(再次强迫,仍然不知道为什么)电子和计算机工程课程,我们处理微控制器(8位),它们的内部工作,以及一些ASM编码.除此之外,我对编程几乎一无所知.
这是代码:
int dim = 1000;
int steps = 7 //ranges from 1 to 255
for (int stage = 1; stage < steps; stage++)
for (int j = 0; j < dim; j++)
for (int i = 0; i < dim; i++)
{
sum = 0;
for (int k = 0; k < dim; k++)
if (partMap[(((i * dim) + k) * dim) + j] >= stage)
sum++; …Run Code Online (Sandbox Code Playgroud) 我需要一个示例代码来访问python中的CPU温度.
我正在运行Windows 7,BTW.
我想问一下,在启动过程中是否将GRUB切换到保护模式,或者它是Linux内核.而且我想问一下 - 内核本身(vmlinuz)是ELF还是纯二进制格式?谢谢.
我正在设计TTL串行计算机,我正在努力选择更适合LLVM编译器后端的架构(我希望能够在那里运行任何C++软件).没有MMU,没有乘法/除法,没有硬件堆栈,没有中断.
我有两个主要选择:
1)8位存储器,8位ALU,8位寄存器(~12-16).内存地址宽度为24位.所以我需要使用3个寄存器作为IP,3个寄存器用于任何存储器位置.
毋庸置疑,任何地址计算都会在编译器中实现.
2)24位存储器,24位ALU,24位寄存器(~6-8).平坦的记忆,很好.缺点是由于设计的串行特性,即使我们使用一些布尔运算,每个操作也需要3倍的时钟.24位存储器数据宽度很昂贵.而且通常在硬件中实现起来更困难.
问题是:您认为在这个8位无堆栈硬件上实现所有c ++功能是可能的,还是我需要更复杂的硬件来生成合理质量和速度的代码?
我在互联网上做了一些阅读,有人说Java应用程序是由java虚拟机(JVM)执行的."执行"这个词让我感到困惑.据我所知,操作系统可以执行非Java应用程序(即:用C,C++编写......).在较低级别,这意味着操作系统将二进制程序加载到内存中,然后指示CPU执行内存中的指令.
那么现在有了JVM,会发生什么?据我所知,操作系统首先会调用JVM(包含运行时环境).从那时起,JVM将为应用程序生成一个(或多个)线程.我想知道操作系统的角色是否会再次发挥作用?在我看来,JVM已"绕过"操作系统并直接指示CPU执行应用程序.如果是这样,为什么我们需要操作系统?
再稍微一点,JVM将使用其JIT将应用程序的字节代码编译为机器代码,然后执行这些机器代码.由于它已经是机器码,我们是否还需要JVM?因为操作系统可以指示CPU执行这些机器代码,而不是JVM.我在这里犯了什么错吗?
我想从这里的人们那里学到更多东西.如果我错了,请纠正我.非常感谢!