
现在最新版的C、C++、Fortran编译器基本上都内置OpenMP支持。
比如gcc、g++、gfortran(GCC套件4.2版之后开始支持)
Intel C++ compiler、Intel Fortran compiler
Microsoft visual C++ (版本8.0或者叫2005之后开始支持)
由支持OpenMP的编译器编译出来的可执行文件可以独立运行,
不再需要额外的什么支持,它会根据源代码里面指定的线程数生成相应线程,
在SMP主机上分布在多个CPU或者多核心上执行陪握橡,单CPU单核则分时多线程执行。
openmp默认使用schedule取决于编译器实现gcc默认使用schedule(dynamic,1)态调度并且块1程序面种调度及其低效看代码都能预期太能比单线程快态调度种简单理解式计算任务存任务队列面for循环每i值应计算任务每线程每提取批任务计算批少呢前面说块程序面1提取任务困神旁需要 *** 瞎樱作呢任务队列线程共享提取任务前必须加锁读取批队列移除解锁说应该已经知汪橡道原
线程提取计算任务任务完快所16线程排着队逐加锁抢任务解锁让其线程继续抢马发现任务快要重新排队等任务始终处于饥饿状态注意排队候能要占cpu使用busy wait所能看十六核满负荷其实啥没干
我建议使用static schedule或者增加dynamic schedule块比1024取决于循环少般知道每循环执行间基本都并且专用服务器设置affinity其负荷oversubscriptionnuma问题static schedule比较选择每线程做哪些任务需要进行配化openmp本身消耗
openmp的c library gcc可以梁逗散直接编译mpi或者openmp
这个,你指的是库?
如果是的话,编译时,加上链接库的编译选项就可以。
比如 gcc -hello.c -o hello -lm -lxml -L/usr/local/指稿lib -lts
-lm 链接了math库
-lxml链接了xml库
-L/usr/local/lib -lts 链接了ts库,ts库存在目录/usr/local/lib中
以下以共享库为例: 1) 直接链接 gcc xxx.c ./libmylib.so 2) 配置环境变量 LIBRARY_PATH,把库所在的路径配置进去 gcc xxx.c -lmyku 3) 双橡氏l配置 gcc xxx.c -lmyku -L./ 静态库的链接方法和共享库一致
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)