rk3399的gpu測試節點在:
cat /sys/devices/platform/ff9a0000.gpu/devfreq/ff9a0000.gpu/load
如果沒有使用gpu的話,是顯示0@200000000Hz,0就是使用率占0%
參考下opencv官網的文檔:https://opencv.org/platforms/opencl.html
我們打開攝像頭 進行灰階並高斯模糊處理為例子
1.使用CPU操作:
代碼:
#include <stdio.h> #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char **argv) { int64 start=0,end=0; VideoCapture vcap(0); Mat frame, frameGray; for(;;){ start = getTickCount(); vcap >> frame; cvtColor(frame, frameGray, CV_BGR2GRAY); GaussianBlur(frameGray, frameGray, Size(3,3), 0,0); end = getTickCount(); printf("time: %f ms\n", 1000.0*(end -start)/getTickFrequency()); } return 0; }
運行如下:
代碼執行如下: time: 33.082281 ms time: 32.365384 ms time: 34.381331 ms time: 31.857022 ms time: 33.016366 ms time: 36.259030 ms time: 30.849634 ms CPU如下: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16972 pi 20 0 504792 44632 26112 R 110.5 1.1 0:14.98 cpu GPU如下: 0@200000000Hz 0@200000000Hz 0@200000000Hz
2使用GPU
代碼:
#include <stdio.h> #include <iostream> #include <opencv2/opencv.hpp> //opencl #include <opencv2/core/ocl.hpp> using namespace std; using namespace cv; int main(int argc, char **argv) { ocl::setUseOpenCL(true); VideoCapture vcap(0); UMat frame, frameGray; int64 start=0,end=0; for(;;){ start = getTickCount(); vcap >> frame; cvtColor(frame, frameGray, CV_BGR2GRAY); GaussianBlur(frameGray,frameGray , Size(3,3), 0,0); end = getTickCount(); printf("time: %f ms\n", 1000.0*(end - start)/getTickFrequency()); } return 0; }
運行如下:
代碼執行如下: time: 42.600703 ms time: 39.476152 ms time: 43.411226 ms time: 43.945546 ms time: 43.886631 ms time: 39.469735 ms time: 44.085834 ms time: 43.899755 ms time: 39.333239 ms time: 41.394690 ms time: 40.303882 ms time: 40.037888 ms
CPU如下: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 17913 root 20 0 455452 66108 42952 S 62.9 1.7 0:06.04 cl GPU如下: 24@200000000Hz 34@200000000Hz 42@200000000Hz 40@200000000Hz 38@200000000Hz 36@200000000Hz 39@200000000Hz 36@200000000Hz
關於opencv編譯我之前已經說過,如果想編譯簡單點,就在cmake時候 將-D BUILD_opencv_world=YES加上,
編譯命令:g++ -o cpu cpu.cpp -I/usr/local/opencv_rk3399/include -L/usr/local/opencv_rk3399/lib/ -lopencv_world
rk3399 個人測下來感覺gpu處理跟cpu處理速度並不明顯,而且GPU有時候還有點稍慢。並沒有JETSON TX2這種板子那么明顯。
