首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java与C++ -光线追踪

Java与C++ -光线追踪
EN

Stack Overflow用户
提问于 2011-09-17 01:50:48
回答 8查看 5.8K关注 0票数 3

我在Java中创建了简单的光线跟踪器,这是我的一个爱好项目,它很慢。虽然不是很慢,但还是很慢。我想知道我是否可以使用像C或C++这样的低级语言获得任何性能提升,或者差异可以忽略不计,我应该坚持改进“我的”算法?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-09-17 03:17:58

我认为这个问题的答案是肯定的,在99.99%的情况下,非解释型语言会比VM下的相同算法运行得更快。这就是说(我在java和c/c++的图像处理方面做了很多工作,内存和时间都很重要),我认为你应该首先尝试优化你的代码,以下是我的建议:

  • 尝试使用探查器查找代码的瓶颈。我们有时会忽略的许多事情都可以被这些工具所陶醉(比如类型转换、不必要的对象创建、大多数关键函数,这些函数应该首先进行优化)一个分析器必须是你的朋友。

然后(我可以看到一些光线跟踪的例子):

  • 替换为查找表(尽可能长)或approximate functions
  • Try以按阵列而不是按样本处理数据
  • 尝试使用多线程

现在这些都是“好的”,但如果速度对你来说真的很重要,我不会建议使用c或c++语言(即使你可以),但更有可能专注于OpenCL。这可能是可用的最好的工具,也是最适合构建光线跟踪引擎的工具。想象一下,您谈论的不是30%的改进,而是更可能的10000%(速度提高100倍)这是一个java接口:http://jogamp.org/jocl/www/好运:-)

票数 2
EN

Stack Overflow用户

发布于 2011-09-17 01:55:26

这要视情况而定。使用C/C++将允许您访问在Java中不能做的事情。(如SIMD)

换句话说,我会说是的,它通常可以在C/C++中做得更好,但这需要一些工作。首先进行所有的基本(数学/算法)优化。然后再进行微优化。

票数 3
EN

Stack Overflow用户

发布于 2011-09-17 22:19:33

AMD刚刚发布了一个名为Aparapi的开源项目,它可以在运行时将Java字节码转换为OpenCL。如果您的代码不能转换为OpenCL (有一些限制),或者如果您没有可用的OpenCL,那么代码将在线程池中运行。

可能最适合你的需要。

http://aparapi.googlecode.com

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7448508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档