C 让一个进程使用所有进程能力

C 让一个进程使用所有进程能力,c,linux,multithreading,neural-network,cpu,C,Linux,Multithreading,Neural Network,Cpu,这个问题非常笼统,因此这里有一个更详细的信息: 我目前运行Ubuntu14.04,目前正在使用神经网络。为了找到最佳参数,我想训练许多不同的参数化网络,看看哪一个效果最好 网络及其训练序列是用c语言编写的,我有一个4核处理器。如果我运行这个程序,它会一个接一个地训练每个网络 现在,系统监视器告诉我,该程序正在使用大约25%的总过程功率。我如何才能改进这一点,什么是平等使用所有内核和100%cpu(和gpu)的最佳方法 目前我正在使用编译标志-pthread,但我想还有更多的可能性。是的,问题是一

这个问题非常笼统,因此这里有一个更详细的信息: 我目前运行Ubuntu14.04,目前正在使用神经网络。为了找到最佳参数,我想训练许多不同的参数化网络,看看哪一个效果最好

网络及其训练序列是用c语言编写的,我有一个4核处理器。如果我运行这个程序,它会一个接一个地训练每个网络

现在,系统监视器告诉我,该程序正在使用大约25%的总过程功率。我如何才能改进这一点,什么是平等使用所有内核和100%cpu(和gpu)的最佳方法


目前我正在使用编译标志
-pthread
,但我想还有更多的可能性。

是的,问题是一般性的。答案也是如此:学习并发编程。线程,或。尤其是使用OpenMP,您可以通过在右
for
循环之前添加单个
#pragma
来将程序转换为多线程程序


可以采用不同的方法,让四个培训中的每一个都按照不同的流程进行。策略是使用main的参数(
argc,argv
)来告诉每个进程该做什么。如果进程之间不需要通信,这很容易。

我建议您研究OpenCL和OpenMP作为充分利用处理能力的方法。使用OpenCL和CUDA对神经网络进行了大量的研究

这些方法可能更适合你的神经网络。此外,可以对OpenCL和OpenMP应用程序进行编译,以使用CPU和GPU硬件,而无需进行重大更改

OpenCL是一种类似C语言的语言,虽然从中获得最佳性能可能相当棘手,但在我看来,如果神经网络的东西对你来说很重要的话,它将是非常值得的。在OpenCL中,您用C编写大量支持代码,并在OpenCL中调用一个小内核来并行地对大量数据执行小操作


您可能正在开发自己的软件,但我相信FANN神经网络库确实有一个支持OpenCL的版本。

将您的程序与libpthread链接并不意味着您正在实际使用它。如果你想使用你的CPU的所有能力,你必须并行化你的ANN中的所有算法。这意味着,您可能必须从头重写它们,使它们能够利用所有4个内核工作。这些线程必须以某种方式进行通信,这需要大量的工作才能做到。只需同时运行四个程序实例就足够了。。。这样做是否有用取决于程序的功能和方式。我有一个函数叫做
trainNetwork(params[])
,它一直被调用,并且独立工作。我希望通过多次并行调用此函数可以获得一些简单的并行处理。因此,您需要生成4个线程(通过调用pthread_create()4次),并让每个线程使用不同的参数调用trainNetwork()。@JeremyFriesner谢谢您的回答,我将尝试在internet上查找有关此问题的更多信息