一个计时类,可以同时用在windows 和 linux 环境下
2015-09-10 16:14
555 查看
local_timer.h
#ifndef LOCAL_TIMER_H #define LOCAL_TIMER_H #include <time.h> #ifdef LINUX #include <sys/time.h> #else #include <windows.h> #endif class local_timer { private: #ifdef LINUX struct timeval ts,te; #else __int64 ts, te; #endif double frq, ms_elapse; public: void start(); void stop(); double ms_get(); local_timer(); void out(const char * str); virtual ~local_timer(); }; #endif
local_timer.cpp
#include <string.h> #include <stdio.h> #include "local_timer.h" local_timer::local_timer() { // TODO Auto-generated constructor stub ms_elapse = 0; memset(&ts, 0, sizeof(ts)); memset(&te, 0, sizeof(te)); #ifdef LINUX frq = CLOCKS_PER_SEC; #else LARGE_INTEGER large_interger; QueryPerformanceFrequency(&large_interger); frq = (double)large_interger.QuadPart; #endif } local_timer::~local_timer() { // TODO Auto-generated destructor stub } void local_timer::start(void) { #ifdef LINUX gettimeofday(&ts,NULL); #else LARGE_INTEGER large_interger; QueryPerformanceCounter(&large_interger); ts = large_interger.QuadPart; #endif } void local_timer::stop(void) { #ifdef LINUX gettimeofday(&te,NULL); double tt = 1000000 * (te.tv_sec - ts.tv_sec) + te.tv_usec - ts.tv_usec; ms_elapse = tt / 1000.; #else LARGE_INTEGER large_interger; QueryPerformanceCounter(&large_interger); te = large_interger.QuadPart; double tt = (double)(te - ts); ms_elapse = tt*1000.0 / frq; #endif } double local_timer::ms_get(void) { return ms_elapse; } void local_timer::out(const char * str) { stop(); printf("%s used:%f\r\n", str, ms_elapse); }
使用方法
#include "cuda_runtime_api.h" #include "device_launch_parameters.h" #include <math.h> #include <opencv2/opencv.hpp> #include <opencv2/gpu/gpu.hpp> #include <string.h> #include <stdlib.h> #include <stdio.h> #include "local_timer.h" using namespace cv; uchar image_buf[640*480]; cv::Mat image(480, 640, CV_8UC1, image_buf); //cv::Mat display(480, 640, CV_8UC1); int main(int argc, char **argv) { FILE * video_stream; int frame_cnt = 200; #ifdef LINUX setenv("DISPLAY",":0",0); char *dir = "./gray.yuv"; #else char *dir = "F:\\video\\gray.yuv"; #endif video_stream = fopen(dir,"rb"); gpu::GpuMat image_device(480,640,CV_8UC1); gpu::GpuMat edge_device(480,640,CV_8UC1); local_timer tick; tick.start(); Sleep(800); tick.out("sleep 800"); while (frame_cnt--) { fread(image_buf, 1, 640 * 480, video_stream); if (frame_cnt < 100) { tick.start(); cudaMemcpy2D(image_device.data, image_device.step, image_buf, 640, 640, 480, cudaMemcpyHostToDevice); gpu::Canny(image_device,edge_device,100,60); cudaMemcpy2D(image_buf, 640, edge_device.data, edge_device.step, 640, 480, cudaMemcpyDeviceToHost); tick.out("gpu"); cv::imshow("calculate by gpu", image); } else { tick.start(); cv::Mat edge; cv::Canny(image, edge, 100, 60); tick.out("cpu"); cv::imshow("calculate by cpu", edge); } cvWaitKey(30); } fclose(video_stream); return 0; }
相关文章推荐
- Linux socket 初步
- Android Native 绘图方法
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- 如何重装TCP/IP协议
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Windows 8 官方高清壁纸欣赏与下载
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝