【发布时间】:2014-02-05 06:33:27
【问题描述】:
我正在编写一个如下所示的 C 程序:
for (int i=0;i<n;i++){
[makes new file for i: i.txt]
[runs a long and intensive computation]
[writes to i.txt]
[closes i.txt]}
其中 n 是一个很大的数字。显然,一次可以并行运行多个迭代,因为它们不相互依赖。我的处理器上有八个内核,所以我似乎希望我的程序将迭代分布在八个内核上,以便它尽可能快地运行。这意味着我希望程序是多线程的。
我的问题是我是否需要在 C 中手动多线程处理这个过程,或者多线程是否在某种程度上自动完成。我正在用 GCC 编译,我知道 GCC 优化得很好,但我不知道它是否会自动多线程。我也不知道我的操作系统(Debian Linux)是否不会自动将程序分发到我处理器的所有八个内核上。如果没有,有没有一种方法可以让它进入多线程,而不必在 C 中实际编写多线程代码?
【问题讨论】:
-
OpenMP 就是为这类东西而设计的。
#pragma omp parallel for就是您需要说的所有内容,它基本上可以满足您的需求。 -
你也可以尝试多处理
-
另一个重要的问题是如何防止多个线程同时访问您的文件。
-
@ryyker 因为每次迭代只有一个文件,所以不应该有任何访问冲突。
-
@tmyklebu 您的评论实际上比任何答案都更有帮助。
标签: c multithreading optimization cpu