让进程使用所有进程能力
Let a process use all process power
这个问题很笼统,所以这里有更详细的信息:
我 运行 目前 Ubuntu 14.04,目前正在研究神经网络。为了找到最佳参数,我想训练许多不同的参数化网络,看看哪一个效果最好。
网络及其训练序列是用 c 编写的,我有一个 4 核处理器。如果我运行程序,它会一个接一个地训练每个网络。
现在系统监视器告诉我程序使用了大约 25% 的总处理能力。我怎样才能改进它,什么是平等使用所有内核和 100% cpu(和 gpu?)
的最佳方法
目前我正在使用编译标志-pthread
,但我想还有更多的可能性。
是的,问题很笼统。答案也是如此:了解并发编程。线程,或 OpenMP。特别是对于 OpenMP,您可以通过在正确的 for
循环之前添加一个 #pragma
将您的程序变成多线程程序。
一种不同的方法可能是由不同的 过程 执行四个训练中的每一个。该策略将使用 main 的参数 (argc, argv
) 来告诉每个进程要做什么。如果进程之间不需要通信,这很容易。
我建议您研究 OpenCL 和 OpenMP,以充分利用处理能力。使用 OpenCL 和 CUDA 在神经网络方面进行了大量工作。
这些方法可能更适合您的神经网络。此外,可以编译 OpenCL 和 OpenMP 应用程序以使用 CPU 和 GPU 硬件,无需进行重大更改。
OpenCL 是一种类似 C 的语言,虽然从中获得最佳性能可能非常棘手,但如果神经网络的东西对您很重要,那么 IMO 非常值得您花时间。在 OpenCL 中,您可以用 C 编写大量支持代码,并在 OpenCL 中调用一个小内核来对大量数据并行执行小操作。
您可能正在开发自己的软件,但我相信 FANN 神经网络库确实有支持 OpenCL 的版本。
这个问题很笼统,所以这里有更详细的信息: 我 运行 目前 Ubuntu 14.04,目前正在研究神经网络。为了找到最佳参数,我想训练许多不同的参数化网络,看看哪一个效果最好。
网络及其训练序列是用 c 编写的,我有一个 4 核处理器。如果我运行程序,它会一个接一个地训练每个网络。
现在系统监视器告诉我程序使用了大约 25% 的总处理能力。我怎样才能改进它,什么是平等使用所有内核和 100% cpu(和 gpu?)
的最佳方法目前我正在使用编译标志-pthread
,但我想还有更多的可能性。
是的,问题很笼统。答案也是如此:了解并发编程。线程,或 OpenMP。特别是对于 OpenMP,您可以通过在正确的 for
循环之前添加一个 #pragma
将您的程序变成多线程程序。
一种不同的方法可能是由不同的 过程 执行四个训练中的每一个。该策略将使用 main 的参数 (argc, argv
) 来告诉每个进程要做什么。如果进程之间不需要通信,这很容易。
我建议您研究 OpenCL 和 OpenMP,以充分利用处理能力。使用 OpenCL 和 CUDA 在神经网络方面进行了大量工作。
这些方法可能更适合您的神经网络。此外,可以编译 OpenCL 和 OpenMP 应用程序以使用 CPU 和 GPU 硬件,无需进行重大更改。
OpenCL 是一种类似 C 的语言,虽然从中获得最佳性能可能非常棘手,但如果神经网络的东西对您很重要,那么 IMO 非常值得您花时间。在 OpenCL 中,您可以用 C 编写大量支持代码,并在 OpenCL 中调用一个小内核来对大量数据并行执行小操作。
您可能正在开发自己的软件,但我相信 FANN 神经网络库确实有支持 OpenCL 的版本。