gcc 会自动使用-j4 吗?我可以做些什么来优化我的编译吗?
Does gcc automatically use -j4? Is there anything I can do to optimize my compilation?
您好,我是 Linux 平台的初学者,因此我不熟悉终端命令。
我正在用 C++ 编写应用程序,我预计它会消耗大量处理能力。所以我想确保我使用了我设备上的所有可用内核(它有 4 个内核)。
我正在使用以下内容创建可执行文件:
gcc -o blink -l rt blink.c -l bcm2835
其中 bcm2835 是我用于 I/O 的库。所以我的问题是,这个命令是在使用所有可用的内核,还是我可以做些什么来优化它?如果能让这段代码 运行 更快,我愿意使用一切可用的东西,扔掉厨房的水槽。
-j
职位选项适用于 make
而不是 gcc
与make
一起使用时,会导致多个"recipes"并行执行。在这种情况下,您的 gcc
行是一个食谱。
问题修改后
如果您希望您的代码使用多核,您将需要使用线程或进程。查看 pthreads。
由于您使用的是 C++,因此您已经为您集成了这个足够好的跨平台线程库 (>=C++11)。
只需确保添加 -std=c++11
以便
gcc -o blink -l rt blink.c -l bcm2835
变成
gcc -std=c++11 -o blink -l rt blink.c -l bcm2835
文档和基本示例位于 http://www.cplusplus.com/reference/thread/thread/
http://en.cppreference.com/w/cpp/thread/thread
上的文档看起来更漂亮
尽管如此,您仍然需要自己编写要穿线的内容。
您好,我是 Linux 平台的初学者,因此我不熟悉终端命令。
我正在用 C++ 编写应用程序,我预计它会消耗大量处理能力。所以我想确保我使用了我设备上的所有可用内核(它有 4 个内核)。
我正在使用以下内容创建可执行文件:
gcc -o blink -l rt blink.c -l bcm2835
其中 bcm2835 是我用于 I/O 的库。所以我的问题是,这个命令是在使用所有可用的内核,还是我可以做些什么来优化它?如果能让这段代码 运行 更快,我愿意使用一切可用的东西,扔掉厨房的水槽。
-j
职位选项适用于 make
而不是 gcc
与make
一起使用时,会导致多个"recipes"并行执行。在这种情况下,您的 gcc
行是一个食谱。
问题修改后
如果您希望您的代码使用多核,您将需要使用线程或进程。查看 pthreads。
由于您使用的是 C++,因此您已经为您集成了这个足够好的跨平台线程库 (>=C++11)。
只需确保添加 -std=c++11
以便
gcc -o blink -l rt blink.c -l bcm2835
变成
gcc -std=c++11 -o blink -l rt blink.c -l bcm2835
文档和基本示例位于 http://www.cplusplus.com/reference/thread/thread/
http://en.cppreference.com/w/cpp/thread/thread
尽管如此,您仍然需要自己编写要穿线的内容。