gpt4 book ai didi

java - 在多核计算机上并行化 LIBSVM - Java

转载 作者:行者123 更新时间:2023-11-30 09:25:09 25 4
gpt4 key购买 nike

我一直在使用 java 版本的 libsvm 来解决许多数据挖掘问题。然而我注意到,即使我们有多核计算机,libsvm 也只使用一个核心,它不会并行化问题。当我在常见问题解答中搜索时,有一个 C++ 解决方案[ http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#f432] 。现有的 java 类如下所示。

@Override
float[] get_Q( int i, int len )
{
float[][] data = new float[1][];
int start, j;
if ( ( start = cache.get_data( i, data, len ) ) < len )
{
for ( j = start; j < len; j++ )
{
data[0][j] = ( float ) ( y[i] * y[j] * kernel_function( i, j ) );
}

}
return data[0];
}

我在 java 中也使用了相同的概念 - 更改 SVC_Q 类中 get_Q 的 for 循环,如下所示。

    @Override
float[] get_Q( int i, int len )
{

float[][] data = new float[1][];
int start, j;
if ( ( start = cache.get_data( i, data, len ) ) < len )
{
ExecutorService executorService = Executors.newFixedThreadPool( Runtime.getRuntime()
.availableProcessors() ); // number of threads

for ( j = start; j < len; j++ )
{
final int count = j;
executorService.submit( new Runnable()
{
@Override
public void run()
{
data[0][count] = ( float ) ( y[i] * y[count] * kernel_function( i, count ) );
}
} );

}
executorService.shutdown();

}
return data[0];
}

尽管现在更改后它使用了我机器中的所有核心,但结果仍在下降。新测试集正确分类实例的百分比从 78% 下降到 58%。而且训练时间也没有减少。所以显然我做得不对。有没有并行化 libsvm 的正确方法?我的代码中犯了什么错误?

最佳答案

如果您不知道如何编写多线程/并行代码,请避免尝试并行化任何代码。

在这种特殊情况下,you need to wait for the executor to finish all of its jobs.在返回结果之前。

但是,这并不意味着 kernel_function 方法是线程安全的。

关于java - 在多核计算机上并行化 LIBSVM - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599416/

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