學習basalt時用到tbb的parallel_for,記錄一下tbb的學習使用。
進入原始碼後執行 make
進入build路徑,給所有的 .s**件加執行許可權,並執行
make
cd build
chmod +x *.sh
sh generate_tbbvars.sh
sh tbbvars.sh
發現生成了一些 *.so檔案,之後將:include/tbb 檔案拷入系統的 /usr/local/include,將build中的所有 *.so 與 *.so2 檔案拷入 /usr/local/lib
安裝完成後,進入 /examples/pipeline/square 後執行make,出現以下提示說明編譯配置成功
g++ -o2 -dndebug -o square square.cpp -ltbb之後在自己的cmakelists中include到頭檔案,並link到相應的so檔案即可。./square input.txt output.txt
serial run time = 0.32484
parallel run time = 0.167507
存在問題未解決:
cmake的配置檔案還不知道放到**,在自己的cmakelists中直接find_package(tbb)目前還找不到,只能手動加路徑。
簡單理解:parallel_for第乙個引數是乙個blocked_range型別,表示資料的起止大小;第二個引數是具體要幹的函式,parallel_for會自動將陣列分成小會計進行並行處理。
自己根據教程寫的示例**如下:
#include
#include
#include
using
namespace std;
using
namespace tbb;
void
func
(int v)
class}(
int a)
};intmain
(void)}
);return0;
}
2020/5/24更新
一開始使用了vector的push_back,總是執行崩潰。經學習,「vector並不是多執行緒安全的」,要是用tbb的concurrent_vector。包含 標頭檔案。
自己進行icp的例子如下。一開始用了兩個concurrent_vector 進行push_back,結果icp總是莫名的bug。查了好久好久,能找的地方都找了,後來發現兩個push_back這裡有問題。可能先後順序有問題,導致匹配順序錯誤。後來採用了乙個vec4i儲存兩個點,問題解決。但是用時並沒有比單執行緒少,反而多了(測試:增加了單執行緒程式的複雜度,tbb多執行緒後用時會減少)。可能tbb有一定的基礎開銷吧。雖然還是沒有啥用,但對tbb有了更深入的了解。
真tm累……
tbb::concurrent_vector con_vec4f;
auto func =[&
](const tbb::blocked_range<
int>
&range)
}// compare outliers.
if(mindist < outlier_thresh * outlier_thresh)}}
;tbb::blocked_range<
int>
range(0
, vp.
size()
);tbb::
parallel_for
(range, func)
;
深藍slam課,basalt原始碼,總結的tbb: tbb 使用預編譯標頭檔案和靜態庫
tbb 2.2中提供了統一的標頭檔案 tbb.h,只要包含這個檔案就可以使用所有tbb的庫了。為了使用起來方便,以及可以使用靜態庫,可以使用以下這些命令自己建立 2.解壓 tar zxvf tbb22 20090908oss src.tgz cd tbb22 20090908oss 3.編譯,沒必要...
linux使用學習記錄
一 更改登入密碼 輸入命令 passwd 你的使用者名稱 然後輸入原來的密碼 輸入兩次新密碼 改密碼成功!二 新建檔案目錄 輸入命令 mkdir 你要新建的目錄 例如 要新建乙個名為codeditor的檔案目錄,則輸入mkdir codeditor 如果提示許可權不夠,輸入命令sudo mkdir ...
uCOSII學習使用記錄
最近學習和使用ucosii,在這裡做一下筆記 串列埠中斷 中斷處理前新增 os enter critical osintnesting os exit critical 退出中斷後 osintexit 有人移植了2.86或者2.88版本後,發現跑的時間長了,會出現某些任務跑步了了,是需要設定將中斷改...