请考虑以下程序计算Fibonacci数.
它使用OpenMP Tasks进行并行化.
#include <iostream>
#include <omp.h>
using namespace std;
int fib(int n)
{
if(n == 0 || n == 1)
return n;
int res, a, b;
#pragma omp parallel
{
#pragma omp single
{
#pragma omp task shared(a)
a = fib(n-1);
#pragma omp task shared(b)
b = fib(n-2);
#pragma omp taskwait
res = a+b;
}
}
return res;
}
int main()
{
cout << fib(40);
}
Run Code Online (Sandbox Code Playgroud)
我使用gcc版本4.8.2和Fedora 20.
当使用g ++ -fopenmp name_of_program.cpp -Wall编译上述程序并运行它时,我看到在查看htop时只有两个(有时是3个)线程正在运行.我正在运行该程序的机器有8个逻辑CPU.我的问题是,我需要做什么才能将工作卸载到8个线程上.我尝试导出OMP_NESTED = TRUE,但这会导致在运行程序时出现以下错误:
libgomp:线程创建失败:资源暂时不可用
我的程序的目的不是要有效地计算Fibonacci数,而是要在OpenMP中使用任务或类似的东西.
我有一台运行 Ubuntu 18.04 和 i3wm 的笔记本电脑,通过 Thunderbolt 连接到扩展坞和网络摄像头。我希望将默认脉冲音频接收器设置为笔记本电脑内部声卡。因此我有
set-default-sink alsa_output.pci-0000_00_1f.3.analog-stereo
set-default-source alsa_input.pci-0000_00_1f.3.analog-stereo
Run Code Online (Sandbox Code Playgroud)
在/etc/pulse/default.pa。
这不起作用,启动后默认接收器设置为扩展坞,默认源设置为网络摄像头。脉冲音频告诉我
[pulseaudio] main.c: Source alsa_input.pci-0000_00_1f.3.analog-stereo does not exist.
[pulseaudio] main.c: Sink alsa_output.pci-0000_00_1f.3.analog-stereo does not exist.
Run Code Online (Sandbox Code Playgroud)
启动后重新启动脉冲音频会将默认源和接收器设置为配置中指定的笔记本电脑内部声卡。我该如何调试这个问题?