用于复杂对象的普通Java线程池与Aparapi GPU

时间:2014-12-12 12:49:24

标签: java multithreading aparapi

我正在评估是否为我的程序使用带有四核处理器的Java线程池或Aparapi GPU框架。

虽然GPU上的增益会很好,但四核处理器和GPU之间的速度差异并不是算法的淘汰标准。 另一方面,我的程序结构很好,有很多复杂的对象 - 如果我理解正确的话--Aparapi不支持原始数据类型之外的并行化。

对于那些对复杂对象的两种方法都有经验的人,您是否建议将对象重构为Aparapi的原始数据类型或坚持使用Java线程池? 我是否正确理解对于Java线程池,它可以处理的对象类型没有限制?

1 个答案:

答案 0 :(得分:1)

ExecutorService这样的ThreadPoolExecutor只是执行从队列中提取的作业(Runnables)的工作线程池,因此除了通常的并发问题之外,对象没有限制数据竞赛和死锁。

如果速度对您非常重要,那么将对象转换为原始数据类型数组并处理这些数组应该是引入并发后的第一个优化。如果之后你想要移动到gpu那么你已经处于原始数据结构的层面。