【问题标题】:Java raytracer increase CPU usageJava 光线追踪器增加 CPU 使用率
【发布时间】:2017-08-23 05:29:54
【问题描述】:

我尝试在 Java 中实现光线追踪器,一切正常。 有一次,我正在渲染一个场景,并检查了我的程序的 CPU-Usage。 每个虚拟内核都在使用,但总体 CPU 使用率约为 22-23%

我知道当我使用 Cinema4D 渲染某些东西时,每个虚拟内核都被 100% 使用。

我该如何存档?它会让我的光线追踪器运行速度快 4 倍吗? (23% -> 100%)

【问题讨论】:

  • 从技术上讲,您可以用无用的循环燃烧代码淹没您的系统,并使您的 CPU 使用率达到 100%。在此之后不会更快地工作。请注意,CPU 使用率并不意味着您的程序运行得更快或更好。
  • 但是例如:我的电脑上有 8 个虚拟内核。我可以创建 8 个线程并将它们的优先级设置为极高,并让每个线程计算每个像素的像素吗?
  • 这取决于您使用的算法。某些类型的计算并行工作比其他类型更好。如果你不能在你的光线追踪算法中隔离n计算块,它们是相互独立的,那么你的块之间需要的同步可能会耗尽你所有的CPU性能,尽管消耗更多的内存和CPU,你的应用程序会运行得更慢。
  • Re,“......并将他们的优先级设置为极高......”这不是优先级的目的。将优先级设置得更高不会增加可用周期数。
  • 那它有什么用呢?据此:technet.microsoft.com/en-us/library/cc940378.aspx 我的线程获得了更多的处理器时间,这增加了周期数,对吧?

标签: java raytracing


【解决方案1】:

您绝对应该能够达到 100% 的 CPU 使用率,并且在其他条件相同的情况下,这样做应该会导致更快的渲染速度。你显然不是 100% 向我表明你要么没有创建足够的线程,要么你的线程阻塞了某些东西。

我发现最佳点是每个虚拟内核一个渲染线程。您可以使用 API 来检测运行时可用的内核数量,并生成那么多渲染线程。有关这方面的示例,请参阅my java ray tracer

每个虚拟内核都在使用,但总体 CPU 使用率约为 22-23%

我不确定您的意思是什么,但您可能想使用性能分析器深入了解它,以更好地了解您的线程如何使用 CPU。理想情况下,您希望每个线程一直在工作。我使用VisualVM 来可视化进程线程。

【讨论】:

  • 我认为我看待 CPU 使用率的方式有点“老派”。我检查了任务管理器...目前,我只有一个主线程。我现在正在实现多个线程。当我不更改数据时,我还必须检查如何使用多个线程访问相同的变量。一位朋友告诉我,我不必同步我的函数,因为我只读取顶点位置等。
  • 每个虚拟核心一个渲染线程。在我的机器上,我有一个带超线程的四核 proc,所以我使用 8 个内核。
  • 好吧,我实现了多个线程,但是当我只使用一个线程时,我的代码运行速度最快。我应该在三角形中使用“volatile”标识符吗?
  • 在进行任何代码更改之前,我会使用 VisualVM 来确定您的线程到底发生了什么。在不知道问题原因的情况下进行更改只是猜测。
  • 是的。我明天会这样做 :) 谢谢你的帮助和建议!!:)
猜你喜欢
  • 2011-11-18
  • 2021-04-30
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多