aN:异步并行计算

时间:2012-07-21 13:15:55

标签: java concurrency parallel-processing hashmap

我在java中使用multhi-threading进行并行计算。可能数据结构是HashMap。我的算法没有任何除法运算和平方根。它是随机梯度下降。即使我得到NaN。我想知道是否有多个访问,读写hashmap,它是否会导致任何未定义的问题?如是, 我怎么会摆脱它?

[编辑]

for(Map.Entry<Integer, ArrayList<Double>>entry: Matrix.entrySet()){
        sum = sum + Math.exp(getScore(contextFeatureVector,entry.getValue()));
    }

getScore方法计算内积。返回值为infinity

[编辑2]

在上述方法中,Matrix为:

  Map<Integer,ArrayList<Double>> Matrix = new ConcurrentHashMap<Integer,ArrayList<Double>>();

我仍然得到NaN。这是因为我获取价值的方式。有人可以用清晰的直觉回答吗?

1 个答案:

答案 0 :(得分:2)

如果您要在其中添加和删除条目,则应该使用java.util.concurrent.ConcurrentHashMap。当你的一个线程删除了另一个线程刚刚获得handel并且将为key调用value时,你将成为NaN。

或者,您可以在添加/删除条目时阻止HashMap对象。

[编辑]  几点想法:

•整数可能在同步时不太可靠。 (除非你的    做额外的工作,确保你没有两个Integer for    相同的值,因此您必须跟踪并重用Integer。)

•NaN意味着您最有可能获得一个数字为零。 •除以0 •计算负数的sqrt。

•NaN!=无穷大

您是否可以在使用它们时记录值到控制台,或者只是找到引发exption的行。也许只是抛弃整个地图。

你现在拥有的这张地图是要走的路,但是你需要确保它能够做到这一点。