最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?OpenMP簡單介紹

 更新時間:2023年05月14日 16:53:29   作者:SGchi  
這篇文章主要介紹了C++?OpenMP簡介,OpenMP?還支持自定義數(shù)據(jù)類型的歸約操作,需要通過omp?declare?reduction指令來聲明自定義操作符和數(shù)據(jù)類型的歸約方式,感興趣的朋友一起看看吧

一、背景知識

1、program作用

#pragma 是 C 和 C++ 語言中的一個預(yù)處理指令。它主要用于向編譯器發(fā)送特定的信息或者指示,以便控制編譯過程。#pragma 通常與編譯器特定的選項或功能一起使用,因此它的具體行為和實現(xiàn)可能因不同的編譯器而有所不同。

#pragma 的語法如下:

#pragma directive_name optional_arguments

其中,directive_name 是一個編譯器識別的指示名稱,optional_arguments 是可選的參數(shù)。

#pragma 的一些常見用途包括:

  • 優(yōu)化:可以通過向編譯器提供優(yōu)化建議來改善生成的代碼性能。例如,#pragma omp parallel for 用于 OpenMP 并行編程,以在循環(huán)中實現(xiàn)線程級并行。
  • 診斷:可以啟用或禁用特定的編譯器警告。例如,#pragma warning(disable: 4996) 可以在 Visual Studio 中禁用特定警告。
  • 代碼段:可以將代碼段駐留在特定的內(nèi)存區(qū)域。例如,#pragma code_seg(“MY_SECTION”) 可以將代碼段放置在名為 “MY_SECTION” 的內(nèi)存區(qū)域中。
  • 初始化和終止函數(shù):可以指定在程序啟動和退出時自動執(zhí)行的函數(shù)。例如,#pragma startup func1 和 #pragma exit func2 分別指定 func1 和 func2 在程序啟動和退出時執(zhí)行。
  • 數(shù)據(jù)對齊:可以控制數(shù)據(jù)結(jié)構(gòu)成員的對齊方式。例如,#pragma pack(push, 1) 和 #pragma pack(pop) 分別設(shè)置和恢復(fù)數(shù)據(jù)對齊方式。

由于 #pragma 可能因編譯器而異,建議查閱編譯器的文檔以了解支持的 #pragma 指令和相關(guān)功能。對于可移植性考慮,通常應(yīng)盡量避免使用編譯器特定的 #pragma。

2、C++不同版本區(qū)別

C++ 有多個版本,其中比較常見的包括:

  • C++98/03:這是最初的 C++ 標(biāo)準(zhǔn),也稱為 ISO/IEC 14882:1998(C++98),后來進(jìn)行了一些小修訂,稱為 ISO/IEC 14882:2003(C++03)。該標(biāo)準(zhǔn)引入了類、繼承、多態(tài)、模板等面向?qū)ο缶幊烫匦?。它還支持異常處理、RTTI(運行時類型識別)和 STL(標(biāo)準(zhǔn)模板庫)等功能。
  • C++11:也稱為 ISO/IEC 14882:2011。該標(biāo)準(zhǔn)在 C++98 的基礎(chǔ)上增加了大量新功能,如 lambda 表達(dá)式、右值引用、智能指針、constexpr 函數(shù)、nullptr 關(guān)鍵字、委托構(gòu)造函數(shù)、變長模板等等。同時,它還對語言規(guī)范進(jìn)行了一些修改和增強,以提高效率、可讀性和可維護(hù)性。
  • C++14:也稱為 ISO/IEC 14882:2014。該標(biāo)準(zhǔn)在 C++11 的基礎(chǔ)上進(jìn)行了一些小修訂和改進(jìn)。它主要增加了一些新特性,如二進(jìn)制字面量、泛型 lambda 表達(dá)式、返回類型推導(dǎo)等。
  • C++17:也稱為 ISO/IEC 14882:2017。該標(biāo)準(zhǔn)在 C++14 的基礎(chǔ)上增加了許多新功能,如結(jié)構(gòu)化綁定、內(nèi)聯(lián)變量、if constexpr、折疊表達(dá)式等。它還對語言規(guī)范進(jìn)行了大量修改和增強,以便提高效率、可讀性和可維護(hù)性。
  • C++20:也稱為 ISO/IEC 14882:2020。該標(biāo)準(zhǔn)在 C++17 的基礎(chǔ)上增加了許多新特性,如 concepts(概念)機(jī)制、三路比較運算符、協(xié)程、格式化 I/O 庫等等。同時,它還增強了現(xiàn)有的功能,并修復(fù)了一些缺陷和錯誤。

查看g++默認(rèn)使用的C++版本

g++ -dM -E -x c++  /dev/null | grep -F __cplusplus

版本對照表

C++標(biāo)準(zhǔn)__cplusplus值
C++ 11201103L
C++ 14201402L
C++ 17201703L

指定不同版本編譯器

vim ~/.bashrc
echo alias g17=\'g++ -std=c++17\' >> ~/.bashrc
source ~/.bashrc

二、什么是OpenMP

OpenMP 是一套 C++ 并行編程框架, 也支持 Forthan .
它是一個跨平臺的多線程實現(xiàn), 能夠使串行代碼經(jīng)過最小的改動自動轉(zhuǎn)化成并行的。具有廣泛的適應(yīng)性。這個最小的改動,有時候只是一行編譯原語!(在高階示例中,我們將演示并評估加速性能)
具體實現(xiàn)是通過分析編譯原語#pragma,將用原語定義的代碼塊,自動轉(zhuǎn)化成并行的線程去執(zhí)行。每個線程都將分配一個獨立的id. 最后再合并線程結(jié)果。

OpenMP 共享內(nèi)存的并行編程框架入門詳解

三、關(guān)鍵字

1、reduction 作用

在 OpenMP 中,reduction 用于將一個變量的值從多個線程中合并為單個結(jié)果。該指令提供了一個簡單的方法來實現(xiàn)并行計算中的歸約操作。
下面是 reduction 的語法示例:

#pragma omp parallel for reduction(+:sum)
for (i = 0; i < n; i++) {
    sum += a[i];
}

在這個例子中,我們使用了 + 運算符作為 reduction 操作符,并且要對變量 sum 進(jìn)行歸約。在執(zhí)行并行循環(huán)時,每個線程都會計算一部分的 sum 值,最終將這些值相加得到最終的結(jié)果。
其他的 reduction 操作符包括 -、*、&、|、^ 和 &&、||。可以根據(jù)具體應(yīng)用場景選擇適當(dāng)?shù)牟僮鞣?br />需要注意的是,被歸約的變量必須滿足以下條件之一:

  • 全局變量(全局作用域)
  • 靜態(tài)變量(靜態(tài)存儲期)
  • 分配在堆上的變量
  • 在 parallel 或 task region 中定義的私有變量

另外,OpenMP 還支持自定義數(shù)據(jù)類型的歸約操作,需要通過 omp declare reduction 指令來聲明自定義操作符和數(shù)據(jù)類型的歸約方式。

2、default(shared)作用

default(shared)是OpenMP的一個指令,用于指定在并行計算中所有變量都是共享的。這意味著變量的存儲將在所有線程之間共享,并且任何對變量的更改都將影響所有線程。使用此指令可以確保所有線程都使用相同的數(shù)據(jù),因為它們都可以讀取和修改共享變量。

請注意,使用default(shared)可能會導(dǎo)致數(shù)據(jù)競爭和不一致的結(jié)果。因此,在使用并行計算時,必須小心謹(jǐn)慎地選擇變量的共享方式,并采取適當(dāng)?shù)耐酱胧﹣肀苊鈹?shù)據(jù)沖突。

到此這篇關(guān)于C++ OpenMP簡介的文章就介紹到這了,更多相關(guān)c++ OpenMP簡介內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你學(xué)習(xí)C++中的派生機(jī)制

    一文帶你學(xué)習(xí)C++中的派生機(jī)制

    C++是一門面向?qū)ο蟮木幊陶Z言,其中的派生機(jī)制是其重要的面向?qū)ο筇匦灾?。本文我們就來詳?xì)地學(xué)習(xí)一下C++中的派生機(jī)制的相關(guān)知識吧
    2023-04-04
  • C語言實現(xiàn)掃雷游戲附注釋

    C語言實現(xiàn)掃雷游戲附注釋

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)掃雷游戲附注釋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++ Vector用法詳解

    C++ Vector用法詳解

    這篇文章主要介紹了C++ Vector用法詳解,vector是C++標(biāo)準(zhǔn)模版庫(STL,Standard Template Library)中的部分內(nèi)容,本文詳細(xì)介紹了它的方方面面,需要的朋友可以參考下
    2015-07-07
  • C語言中dlopen和dlsym的使用方式詳解

    C語言中dlopen和dlsym的使用方式詳解

    這篇文章主要為大家詳細(xì)介紹了C語言中dlopen和dlsym的使用方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++編程中隊內(nèi)聯(lián)函數(shù)的理解和使用

    C++編程中隊內(nèi)聯(lián)函數(shù)的理解和使用

    這篇文章主要介紹了C++編程中隊內(nèi)聯(lián)函數(shù)的理解和使用,簡單舉例講解了inline關(guān)鍵字引出的內(nèi)聯(lián)函數(shù)的相關(guān)知識,需要的朋友可以參考下
    2016-01-01
  • C語言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解

    C語言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解

    這篇文章主要為大家詳細(xì)介紹一下C語言中回調(diào)函數(shù)和qsort函數(shù)的用法教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • C語言 坐標(biāo)移動詳解及實例代碼

    C語言 坐標(biāo)移動詳解及實例代碼

    這篇文章主要介紹了C語言 坐標(biāo)移動詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言編寫洗牌發(fā)牌程序

    C語言編寫洗牌發(fā)牌程序

    這篇文章主要為大家詳細(xì)介紹了C語言編寫洗牌發(fā)牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言之直接插入排序算法的方法

    C語言之直接插入排序算法的方法

    這篇文章主要為大家介紹了C語言直接插入排序算法的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C語言實現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲

    C語言實現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評論

武威市| 镇巴县| 广德县| 石林| 三穗县| 翁牛特旗| 渝北区| 东乌| 桂阳县| 浦城县| 荔波县| 西充县| 贡嘎县| 深水埗区| 巴彦县| 民和| 凤台县| 绥中县| 建平县| 贡山| 正宁县| 武威市| 日照市| 花垣县| 梅河口市| 平阳县| 二连浩特市| 邵阳市| 孟津县| 出国| 孝感市| 阿拉尔市| 平塘县| 呼伦贝尔市| 桑日县| 固镇县| 彩票| 滨州市| 镇安县| 福安市| 綦江县|