标签: cpu

TLB 中可存储的大页条目数量是否有限制

我正在尝试分析虚拟机在使用大页面时获得的网络性能提升。为此,我通过更改 grub 命令行并重新启动,将虚拟机管理程序配置为具有多个 1G 大页面 (36),并且在启动虚拟机时,我确保将大页面传递到虚拟机。在启动 8 个虚拟机(每个虚拟机有 2 个 1G 大页面)并在它们之间运行网络吞吐量测试时,发现吞吐量大大低于没有大页面运行时的吞吐量。这让我想知道,这是否与我使用的大页面数量有关。使用 TLB 可以引用的 1G 大页面数量是否有限制?如果有,它是否低于常规大小页面的限制?我怎么知道这些信息。在这个场景中,我使用的是 Ivy Bridge 系统,并使用 cpuid 命令,我看到了类似的内容

cache and TLB information (2):
  0x63: data TLB: 1G pages, 4-way, 4 entries
  0x03: data TLB: 4K pages, 4-way, 64 entries
  0x76: instruction TLB: 2M/4M pages, fully, 8 entries
  0xff: cache data is in CPUID 4
  0xb5: instruction TLB: 4K, 8-way, 64 entries
  0xf0: 64 byte prefetching
  0xc1: L2 TLB: 4K/2M pages, 8-way, 1024 entries
Run Code Online (Sandbox Code Playgroud)

这是否意味着我在 TLB 中只能有 4 …

cpu cpu-architecture tlb huge-pages

1
推荐指数
1
解决办法
1251
查看次数

Ubuntu 上如何知道程序是在 GPU 还是 CPU 上执行?

我正在使用 Ubuntu 16.04,并运行我的程序来训练深度学习模型。纪元数看起来很大,但程序太慢了。我想确保我的程序在 GPU 上运行?

我怎么知道呢?

谢谢!

cpu gpu deep-learning

1
推荐指数
1
解决办法
5285
查看次数

在特定核心上运行的进程

我使用任务集将进程固定到特定核心,但还有其他进程共享该核心。是否可以知道哪些进程明确共享哪些核心?例如,获取诸如“核心 0 上运行着进程 1、202、4043 等”之类的信息。

cpu memory-management process cpu-usage taskset

1
推荐指数
1
解决办法
3930
查看次数

Volatile 关键字和 CPU 缓存一致性协议

CPU 已经通过一些协议(如 MESI)保证缓存一致性。为什么我们还需要volatile在某些语言(如java)中保持多线程之间的可见性。

可能的原因是这些协议在启动时未启用,并且必须由某些指令(例如LOCK.

如果确实如此,为什么CPU在启动时不启用该协议?

java cpu caching volatile cpu-cache

1
推荐指数
1
解决办法
1669
查看次数

如果 CPU 频率不增加,那么 CPU 对于非并行代码如何更快?

CPU 仍在“改进”,但在过去 10 年里它们的频率并没有提高很多。

我可以理解晶体管数量随着晶体管越来越小而增加,但我不明白如果频率降低,非并行程序(我认为大多数程序都是非并行的?)如何在新 CPU 上执行得更快不增加。

我可以理解为什么 GPU 使用更多晶体管可以更快,因为它们是并行处理器(这个术语正确吗?)并且它们只执行并行代码。

但大多数软件都是非并行的,所以对我来说,新的 CPU 似乎不会比以前的 CPU 快很多,除非大多数程序可以并行化,但事实并非如此(我不确定,但是可以并行化的典型算法是什么?不并行吗?)。

更大的 L1/L2/L3 缓存大小是否可以让新 CPU 更快?或者还有其他东西,例如新指令或分支东西?

我缺少什么?

parallel-processing cpu performance cpu-architecture

1
推荐指数
1
解决办法
178
查看次数

如何绕过操作系统运行汇编代码?

首先,我不了解现代CPU和操作系统。为此,我将针对intel 8085处理器进行解释。当然,我希望你想象有一个操作系统可以在intel 8085上运行。

我们有这样的汇编代码:

MVI A,16
MVI B,16

ADD B

HLT
Run Code Online (Sandbox Code Playgroud)

这段代码非常简单。当此代码运行时,它会执行以下操作: 将数字 16 加载到 intel 8085 处理器的寄存器 a 和 b 中。然后将这两个寄存器的值相加。

当然,当我们尝试在操作系统中运行这段代码时,很可能什么也不会发生。

我想问的是:如何在操作系统上运行不包含任何系统调用(或任何特定于操作系统)的代码(绕过操作系统)?我不希望操作系统在执行此操作时崩溃。

cpu assembly operating-system 8085

1
推荐指数
1
解决办法
537
查看次数

更改一位每字节消耗的周期是否比对整个处理器字进行加/减/异或运算要少?

假设我更改了一个单词中的一位并添加了另外两个单词。

更改字中的一位是否比更改整个字消耗更少的 CPU 周期?

如果它消耗更少的 CPU 周期,它会快多少?

cpu energy cpu-cycles cpu-architecture

1
推荐指数
1
解决办法
84
查看次数

为什么对已排序数组求和比对未排序数组求和更快?

我有一个ArrayList,其中的数字从 10 MM 到 20 MM

 List<Long> l = new ArrayList<>();
        for (long i = 10_000_000; i < 20_000_000; i++) {
            l.add(i);
        }
Run Code Online (Sandbox Code Playgroud)

为什么sum()函数在排序数组上比在未排序数组上更快?

public class Main {

    public static void main(String[] args) {
        List<Long> l = new ArrayList<>();
        for (long i = 10_000_000; i < 20_000_000; i++) {
            l.add(i);
        }

        System.out.println(sum(l));

        Collections.shuffle(l);
        System.out.println(sum(l));

        Collections.sort(l);
        System.out.println(sum(l));
    }

    static long sum(List<Long> l) {
        long started = System.nanoTime();
        long result = 0;
        for (long v : l) { …
Run Code Online (Sandbox Code Playgroud)

java arrays sorting cpu benchmarking

1
推荐指数
1
解决办法
316
查看次数

更多核心VS更频繁的Java

对于大量多线程的Java服务器应用程序,建议使用更多CPU内核(6个而不是4个)或更高的CPU频率(2.53 Ghz而不是2.4 Ghz).

在我看来,显然更多核心是要走的路,但我想听听第二个意见.

谢谢.

java cpu multithreading multicore frequency

0
推荐指数
1
解决办法
1994
查看次数

与较慢的cpu相比,更快的cpu浪费更多的时间

假设我有一个程序,其中包含添加两个数字的指令,该操作需要10纳秒(常数,由门制造商强制执行).
现在我有3个不同的处理器A,B和C(其中A <B <C就时钟周期而言).

A的一个时钟周期为15纳秒,B为10纳秒,C为7纳秒.

首先,我是按照以下假设纠正的:
1.添加操作需要1个完整的处理器A循环(慢速处理器),并且浪费剩余的5 ns循环.
2.添加操作需要1个完整周期的处理器B浪费时间.
3.添加操作需要2个完整周期(20 ns)的处理器C(快速处理器),浪费20-14 = 7 ns的其余部分.

如果上述假设是正确的,那么这与具有高时钟周期的处理器更快的常规假设不矛盾.
这里最快的处理器C实际上需要2个周期并且浪费7ns,而较慢的处理器A仅需要1个周期.

cpu performance clock computer-architecture

0
推荐指数
1
解决办法
542
查看次数