新聞中心
OpenMP是一種支持多線程共享內(nèi)存的并行編程模型,它可以將遍布整個(gè)程序的計(jì)算任務(wù)分配給多個(gè)CPU核心,從而大幅提升程序的運(yùn)行效率。如果您是一名Linux開(kāi)發(fā)人員,想要通過(guò)OpenMP來(lái)加速您的程序運(yùn)行,那么您需要知道如何在Linux系統(tǒng)上安裝并且配置OpenMP。

成都創(chuàng)新互聯(lián)公司不只是一家網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司;我們對(duì)營(yíng)銷、技術(shù)、服務(wù)都有自己獨(dú)特見(jiàn)解,公司采取“創(chuàng)意+綜合+營(yíng)銷”一體化的方式為您提供更專業(yè)的服務(wù)!我們經(jīng)歷的每一步也許不一定是最完美的,但每一步都有值得深思的意義。我們珍視每一份信任,關(guān)注我們的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作質(zhì)量和服務(wù)品質(zhì),在得到用戶滿意的同時(shí),也能得到同行業(yè)的專業(yè)認(rèn)可,能夠?yàn)樾袠I(yè)創(chuàng)新發(fā)展助力。未來(lái)將繼續(xù)專注于技術(shù)創(chuàng)新,服務(wù)升級(jí),滿足企業(yè)一站式全網(wǎng)整合營(yíng)銷推廣需求,讓再小的品牌網(wǎng)站設(shè)計(jì)也能產(chǎn)生價(jià)值!
下面,我們將為您介紹。
一、檢查系統(tǒng)環(huán)境
在安裝OpenMP之前,你需要首先查看自己的Linux發(fā)行版是否已經(jīng)集成了該庫(kù)。大部分的Linux發(fā)行版都已經(jīng)內(nèi)置了OpenMP庫(kù),您可以通過(guò)終端中輸入以下命令,來(lái)確認(rèn)您的系統(tǒng)是否已經(jīng)配備了OpenMP:
“`
$gcc –version
“`
如果您已經(jīng)安裝了OpenMP,那么該命令會(huì)輸出一條類似于如下的信息:
“`
gcc (GCC) 4.9.2 20230212 (Red Hat 4.9.2-6)
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
“`
您需要在輸出信息中查找版本號(hào)信息中的“OpenMP”,如果版本號(hào)包含OpenMP字樣,那么就表示您的系統(tǒng)已經(jīng)支持了OpenMP。
如果您的系統(tǒng)沒(méi)有內(nèi)置OpenMP庫(kù),那么您需要自行進(jìn)行安裝。
二、安裝OpenMP庫(kù)
如果您的Linux發(fā)行版沒(méi)有內(nèi)置OpenMP庫(kù),您可以在終端窗口中使用以下命令來(lái)安裝OpenMP:
“`
$sudo apt-get install libomp-dev
“`
該命令可以在Debian、Ubuntu以及其他基于Debian的Linux發(fā)行版中安裝OpenMP。
如果您使用的是以Red Hat Enterprise Linux(RHEL)或Ubuntu為基礎(chǔ)的發(fā)行版,則可以使用以下命令來(lái)安裝OpenMP:
“`
$ sudo yum install openmpi openmpi-devel
or
$ sudo dnf install openmpi openmpi-devel
“`
安裝完成后,您需要確認(rèn)您已經(jīng)安裝了正確的版本的OpenMP,并且配置了環(huán)境變量。
三、配置環(huán)境變量
安裝完成OpenMP之后,您需要將OpenMP庫(kù)的路徑添加到環(huán)境變量中,以便操作系統(tǒng)可以找到OpenMP庫(kù)。
您可以使用以下命令打開(kāi)編譯器的環(huán)境變量文件:
“`
$nano ~/.bashrc
“`
在文件末尾添加以下內(nèi)容:
“`
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
“`
保存并退出文件,然后輸入以下命令以使修改生效:
“`
$source ~/.bashrc
“`
現(xiàn)在,您已經(jīng)配置好了Linux系統(tǒng)中的OpenMP,并可以嘗試使用它來(lái)并行化您的程序。
四、使用OpenMP庫(kù)
要使用OpenMP庫(kù),您需要在程序中引用一個(gè)頭文件,例如omp.h。然后使用OpenMP編譯命令編譯您的程序。以下是一個(gè)示例程序:
“`
#include
#include
int mn(int argc, char *argv[]) {
#pragma omp parallel
{
int ID = omp_get_thread_num();
printf(“thread %d says hello\n”, ID);
}
return 0;
“`
該程序?qū)⑹褂肙penMP自動(dòng)運(yùn)行子句將其并行化,它將輸出:
“`
thread 0 says hello
thread 1 says hello
thread 2 says hello
thread 3 says hello
“`
請(qǐng)注意,這里設(shè)置了OpenMP的并行區(qū)域,用于運(yùn)行在線程中運(yùn)行的代碼。在該區(qū)域中,您可以使用OpenMP指令并行化代碼中的各個(gè)部分。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
為什么服務(wù)器linux下用openmp結(jié)果比單線程還要慢
inux的線程是用輕御拿宏量級(jí)進(jìn)敏知程實(shí)現(xiàn)的,比Windows真正的鎮(zhèn)冊(cè)線程開(kāi)銷大, 特別是沒(méi)有加裝Native POSIX Thread Library的Linux Kernel上,差距更明顯。 我想是不是該從這方面想想原因和解決辦法。 你的Linux Kernel至少得是2.6以上
作者:lyyfer
鏈接:
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
主要是兩個(gè)問(wèn)題,任務(wù)調(diào)度和oversubscription。
openmp默認(rèn)使用的schedule是取決于編譯器實(shí)現(xiàn)的。gcc默認(rèn)使用schedule(dynamic,1),也就是動(dòng)態(tài)調(diào)度并且塊大小是1。在你的程序里面,這種調(diào)度是及其低效的,看代碼都能預(yù)期到,不太可能比單線程快。
動(dòng)態(tài)調(diào)度的一種簡(jiǎn)單理解方式是,計(jì)算任務(wù)存在一個(gè)任務(wù)隊(duì)列里面,你的for循環(huán)每一個(gè)i值對(duì)應(yīng)一個(gè)計(jì)算任務(wù)。每個(gè)線程每次提取一批任務(wù),斗含然后計(jì)算。“一批”是多少呢?就是前面說(shuō)的塊大小,在你的程序里面是1。提取任務(wù)需要什么操作呢?因?yàn)檫@個(gè)任務(wù)隊(duì)列是多線程共享的,提取任務(wù)前必須加鎖,讀取一批,從隊(duì)列中移除,然后解鎖。說(shuō)到這里,你應(yīng)該已經(jīng)知道原因了。
你的線程一次只提取一次計(jì)算任務(wù),這個(gè)任務(wù)還完成得很快。然后所有的16個(gè)線程排著隊(duì),逐個(gè)去加鎖,搶任務(wù),然后解鎖讓其它線程繼續(xù)搶。然后馬上發(fā)現(xiàn)這個(gè)任務(wù)很快,又要重新去排隊(duì)等任務(wù),始終處于饑餓狀態(tài)。注意排隊(duì)的時(shí)候可能也是要占cpu的,因?yàn)槭褂昧薭usy wait,所以可能你看來(lái)十六核滿負(fù)荷,但是其實(shí)啥也沒(méi)干。
我的建議就是,使用static schedule,或者增加dynamic schedule的塊大小,比如1024,取決于你循環(huán)多少次。一般如果你知道每次循環(huán)的執(zhí)行時(shí)間基本都是一樣,并且是專用服務(wù)器設(shè)置好affinity,無(wú)其它負(fù)荷無(wú)oversubscription無(wú)空態(tài)numa問(wèn)題的話,static schedule會(huì)是個(gè)比較好的選擇。這樣每斗銷源個(gè)線程做哪些任務(wù)只需要進(jìn)行一次分配,最小化了openmp本身的消耗。
還有一個(gè)非常重要的問(wèn)題!數(shù)值計(jì)算不要使用cpu超線程!cpu的超線程對(duì)于數(shù)值計(jì)算基本是有害無(wú)益的,線程數(shù)不要大于實(shí)際核數(shù),否則就是oversubscription。你這已經(jīng)是非常嚴(yán)重的oversubscription了。數(shù)值計(jì)算專用的話,建議直接關(guān)閉服務(wù)器bios里面的超線程選項(xiàng)。
關(guān)于linux openmp安裝的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢:028-86922220。
分享標(biāo)題:Linux下使用OpenMP并行編程的安裝方法(linuxopenmp安裝)
URL鏈接:http://m.fisionsoft.com.cn/article/djjpoes.html


咨詢
建站咨詢
