内存规格--MHz还是MT/s?

说到内存的频率,大家脑海里会自然浮现3200MHz、3600MHz这种规格,以MHz频率做单位来定义内存的性能规格一直是大家的常识。但是,不知道大家有没有这样的疑惑,为什么内存频率CPU-Z和BIOS显示的频率与厂商宣传的不同,又或者和Windows的任务管理器显示的不一样?

实际上,这样的问题有一定的历史根源。

要了解这个问题,我们要先来理解DDR内存的工作原理。DDR内存的电平信号可沿时钟信号的上沿和下沿进行两次信号传输,1秒周期内的时钟信号高低电平切换一次计算为1Hz,1MHz=1000KHz=1000000Hz等于1秒内高低电平信号切换100万次。MT/s全称 Million Transfers Per Second意为每秒百万次传输,1T/s和1Hz,这两个单位前者指的是每秒做了一次传输,后者指每秒1时钟周期。又因为DDR信号每个时钟信号可以传输2次,所以实际的传输速率为1Hz=2T/s,1MHz=2MT/s。

第一代DDR内存频率是DDR 133MHz,那个时代DDR内存并非RAM的唯一选择,为了有效宣传DDR内存其双倍速率的特性,当时的市场发明了“effective clock rate(等效频率)”的概念,将时钟频率乘以2代表实际的传输频率,单位仍是MHz。这实际上混淆了时钟频率和传输速率两个概念,但市场和消费者对于“MHz”这个单位具有更高的接受度,所以这种混淆的概念一直沿用至今。我们也看到过不少玩家对频率和时钟频率的区别感到困惑,因为两者的规格单位均为MHz。

但在DDR5发布后,JEDEC的态度有了一些变化,内存性能规格的单位选择了MT/s为主,英特尔和金士顿、美光、威刚、芝奇等PC行业的领头企业也纷纷跟进该策略,将内存性能的衡量单位改为了MT/s。内存实际上和固态属于一个次元的东西,都是储存类产品,你什么时候见过固态用clock frequency来标称性能?没有吧。而MT/s和Mbps、Gbps是一类性能指标,使用MT/s能更准确的表达内存的性能。

简单说,MT/s可以与等效频率直接画等号,但因为等效频率本身就是一个不精准的表达,所以正确的说法应该是1MHz=2MT/s,即DDR内存(包含DDR-DDR5)的传输速率是时钟频率的2倍。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的B/S架构实现的代码用例,使用Java语言和Spring框架: 1. 前端代码(HTML、CSS、JavaScript): ```html <!DOCTYPE html> <html> <head> <title>B/S Architecture Example</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> </head> <body> <div class="container mt-5"> <h1>B/S Architecture Example</h1> <div class="form-group"> <label for="input-text">Enter some text:</label> <input type="text" class="form-control" id="input-text" placeholder="Type something..."> </div> <button type="button" class="btn btn-primary" onclick="sendText()">Send</button> <hr> <div id="output"></div> </div> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@3.2.0/dist/tf.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder@4.2.0/dist/universal-sentence-encoder.min.js"></script> <script src="app.js"></script> </body> </html> ``` 2. 后端代码(Java + Spring): ```java package com.example.bsaexample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.tensorflow.Tensor; import org.tensorflow.Tensors; import org.tensorflow.framework.ConfigProto; import org.tensorflow.framework.GPUOptions; import org.tensorflow.framework.Session; import org.tensorflow.framework.Session.Runner; import org.tensorflow.framework.TensorShape; import java.util.Arrays; @SpringBootApplication @RestController public class BsaExampleApplication { public static void main(String[] args) { SpringApplication.run(BsaExampleApplication.class, args); } @PostMapping(value = "/predict", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public String predict(@RequestBody String input) { GPUOptions gpuOptions = GPUOptions.newBuilder().setVisibleDeviceList("0").build(); ConfigProto configProto = ConfigProto.newBuilder().setGpuOptions(gpuOptions).build(); try (Session session = Session.create(configProto.toByteArray())) { Tensor<String> inputTensor = Tensors.create(new String[] { input }); Runner runner = session.runner().feed("input", inputTensor).fetch("output"); Tensor<Float> outputTensor = runner.run().get(0).expect(Float.class); float[] output = outputTensor.copyTo(new float[1][512])[0]; return Arrays.toString(output); } catch (Exception e) { e.printStackTrace(); return "Error: " + e.getMessage(); } } } ``` 3. 前后端交互代码(JavaScript): ```javascript async function sendText() { const input = $("#input-text").val(); if (input.trim() !== "") { $("#output").text("Loading..."); const output = await predict(input); $("#output").text(output); } } async function predict(input) { const model = await tf.loadGraphModel("model/model.json"); const encoder = await use.load(); const encodedInput = await encoder.embed([ input ]); const inputTensor = tf.tensor(encodedInput); const outputTensor = model.execute({ "input": inputTensor }); const output = await outputTensor.array(); return output; } ``` 这个例子实现了一个简单的文本编码预测功能,用户在前端输入一段文本,通过JavaScript调用后端的REST API进行计算,后端使用TensorFlow进行计算并返回结果。这个例子还包括了一些常见的开发框架和库,如Spring、Bootstrap、jQuery、TensorFlow.js和Universal Sentence Encoder。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值