gpt4 book ai didi

java - 南 : Aynchronous parallel computing

转载 作者:行者123 更新时间:2023-12-02 07:41:02 28 4
gpt4 key购买 nike

我正在使用java中的多线程进行并行计算。可能的数据结构是HashMap。我的算法没有任何除法运算和平方根。它是随机梯度下降。即便如此,我还是得到了NaN。我想知道 HashMap 中是否存在多重访问、读写,是否会导致任何未定义的问题?如果是,我该如何摆脱它?

[编辑]

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

getScore 方法计算内积。返回值为无穷大

[编辑2]

在上述方法中,矩阵为:

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

我仍然得到NaN。这是由于我访问值的方式造成的吗?有人能以清晰的直觉回答吗?

最佳答案

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

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

[编辑] 几点想法:

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

• NaN 表示您最有可能得到的数字为零。• 除以 0• 计算负数的sqrt。

• NaN != 无穷大

您可以在使用值时记录值到控制台吗?或者只是找到抛出exption的行。也许只是把整个 map 都倒掉。

您现在拥有的这张 map 是可行的方法,但您需要确保它能够完成其任务。

关于java - 南 : Aynchronous parallel computing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11592499/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com