gpt4 book ai didi

用GCC编译一个C程序,使其可以在linux中使用所有cpu核

转载 作者:太空狗 更新时间:2023-10-29 11:24:11 24 4
gpt4 key购买 nike

我有一个用于添加的示例 C 程序。当我用 GCC 编译和运行它时,它只使用一个 CPU 内核。

有什么办法可以编译一个 C 程序,使其可以在 Linux 中使用所有 CPU 内核。

我以前是这样编译的gcc -O3 malloc.c

代码:

#include <stdio.h>
#include <time.h>
#include <malloc.h>

int main() {
float *ptr;
unsigned long long i;

ptr = (float*) malloc(8000000000 * sizeof(float));

for(i=0; i<8000000000; i++) {
ptr[i] = i/10000;
}

clock_t tic = clock();

for(i=0; i<8000000000; i++) {
ptr[i] = (i/10000)+1.0;
}

clock_t toc = clock();

printf("Elapsed: %f seconds\n", (double)(toc - tic) / CLOCKS_PER_SEC);

return 0;
}

最佳答案

Is there any way to compile a C program so that it can use all CPU cores in Linux.

,没有你希望的那样神奇。 Parallelization程序的编写是一个非常困难的主题,通常不能自动完成。顺便说一句,并行程序可能没有您希望的那样高效(注意 Amdahl's law )。

但是,您可以设计编码 一个并行程序。例如,您可以使用 posix threads .当心,这很棘手!先阅读一些Pthread tutorial .你不会确定所有 cores将被使用(因为它们由 kernel 管理),但实际上这很有可能。另请阅读 processor affinity .

你也可以使用 OpenMPOpenACC .您可以使用 OpenCL 对您的一些数字内核进行编码.你可以有一个 multi-processing方法(例如 fork 几个 processes ,使用 inter-process communications ),也许使用 MPI .另请查看 MapReduce方法,0mq图书馆(以及许多其他图书馆)。

你可以在操作系统上阅读一些东西,例如Operating Systems: Three Easy Pieces .您还可以阅读有关 Linux 系统编程的内容,例如Advanced Linux Programming (或一些较新的书)。另见 intro(2)syscalls(2) & pthreads(7) .

请注意设计、编码和调试 parallel (或并发,或 distributed)申请非常困难。考虑开发时间成本(以及获得相关技能所需的时间,可能是 years )。有 No Silver Bullet !

(将现有的现实生活中的顺序应用程序转换为并行应用程序不太现实;您通常必须从头开始设计并行程序)

关于用GCC编译一个C程序,使其可以在linux中使用所有cpu核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47528043/

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