【问题标题】:java concurrency - Is Instruction Level Parallelism(ILP) used underhoodjava并发 - 指令级并行(ILP)是否在底层使用
【发布时间】:2017-01-10 08:39:08
【问题描述】:

Java 或一些类似语言中的并发是通过线程或任务级并行实现的。但在后台,硬件或运行时是否也使用 ILP 来实现最佳性能。
进一步详细说明:在具有多个线程(例如每个核心 2 个)(即每个系统总共 8 个线程)的多核处理器(例如每个系统 4 个)中,java 线程在几个(在这种情况下为 8 个)处理器之一中执行线程。但是,如果系统确定所有或几个其他线程除了保持理想之外什么都不做,硬件或运行时是否可以进行任何合法的重新排序并在相同或其他内核上的其他线程中执行它们并将结果取回(或在 main记忆)
我很担心 java 实现是否允许这样做,或者什至由硬件来独立处理这个问题,即使 JVM 甚至不知道任何事情。

【问题讨论】:

  • Java 语言的实现不止一种,Java 实现的硬件平台也不止一种。它们不必都以完全相同的方式工作:它们只需要忠实地实现 Java 语言规范 (JLS)。 JLS 中没有提及您所询问的内容。

标签: java multithreading concurrency instruction-set happens-before


【解决方案1】:

有点不清楚你在问什么,但我认为这与 Java 没有太大关系。

我认为你在谈论(至少)两件不同的事情:

  1. “ILP”一般用于指代发生在单核内的一组技术(如流水线和分支预测),与线程或多核关系不大。这些技术是 CPU 的透明实现细节,通常不会以您(或运行时)可以直接交互的方式公开。

  2. 如果线程被阻塞,内核调度程序会在内核上和内核上进行交换(即使没有,以确保公平)。

【讨论】:

  • 我明白你在说什么,#1 只是简化了事情。是否有任何参考可以指向 ILP 内部(除了 wiki)(我将非常感谢任何进一步的信息)。所以每个核心都拥有自己的 ILP(如果有的话),这与其他核心 IPL 或操作无关。如果一个线程中只发生一个数据/计算密集型操作,而其他线程实际上什么都不做或处于空闲状态,则其他内核或处理器线程就无法干预或帮助加快计算速度。
  • #2 - 当有多个线程争用相同的资源时,线程从一个处理器(或处理器线程,如果使用 HT)切换到另一个似乎很好。肯定有很多上下文切换,调度程序可能每次都分配一个新的核心或相同的核心。
  • 所以 IPL 是单个/单个内核或单个/单个线程(在 HT 中)的度量,但不是整个多处理器的度量。对吧??
  • 我想你已经回答了。但我只是在想透明实现在这里或一般来说意味着什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多