c计时--程序在cpu,GPU上运行的时间

如果建议你用fopen_s
可以直接在最开头加上#define _CRT_SECURE_NO_WARNINGS
不要它建议啥就用啥哇

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<time.h>
#include<math.h>
#include<stdlib.h>
#include<iostream>

int main() {

	float size1 = 100 * 1000 * 1000 * sizeof(float);
	float* output1 = (float*)malloc(size1);

	clock_t start, finish;     //定义第一次调用CPU时钟单位的实际,可以理解为定义一个计数器
	double Total_time;        //定义一个double类型的变量,用于存储时间单位
	start = clock();        //获取进入要测试执行时间代码段之前的CPU时间占用值
	FILE* sighx;
	sighx = fopen("sighx.dat", "w");
	for (int z = 0; z < 1000; z++) {
		for (int y = 0; y < 1000; y++) {
			for (int x = 0; x < 100; x++) {
				int tid = 100 * 1000 * z + 100 * y + x;
				fprintf(sighx, "%f\n", output1[tid]);

			}
		}
	}
	fclose(sighx);
	finish = clock();
	Total_time = (double)(finish - start) / CLOCKS_PER_SEC;
	printf("\n函数运行时间:%0.3f毫秒 \n", Total_time);
}

进程控制块里有一个clock_t 的成员变量,当程序获取到CPU控制权时。clock_t 的值会不断递增
CPU赫兹不以秒为单位—执行代码
clock以毫秒为单位,clock会把这个值并根据宏定义的CLOCKS_PER_SEC来进行毫秒单位转换,假如clock_t是1000,那么CLOCKS_PER_SEC也是1000,clock就会返回1毫秒

https://blog.csdn.net/bjbz_cxy/article/details/80499906#:~:text=start%20%3D%20clock%20%28%29%3B%20%2F%2F%E8%8E%B7%E5%8F%96%E8%BF%9B%E5%85%A5%E8%A6%81%E6%B5%8B%E8%AF%95%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E4%BB%A3%E7%A0%81%E6%AE%B5%E4%B9%8B%E5%89%8D%E7%9A%84CPU%E6%97%B6%E9%97%B4%E5%8D%A0%E7%94%A8%E5%80%BC%20%E7%84%B6%E5%90%8E%E5%9C%A8%E6%89%A7%E8%A1%8C%EF%BC%8C%E6%89%A7%E8%A1%8C%E5%AE%8C%E4%BB%A5%E5%90%8E%E5%9C%A8%E7%A8%8B%E5%BA%8F%E6%80%BB%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%20int%20i,%28i–%29%3B%20%2F%2F%E5%BE%AA%E7%8E%AF%200%E5%81%87%20finish%20%3D%20clock%20%28%29%3B%20%2F%2F%E8%8E%B7%E5%8F%96%E6%89%A7%E8%A1%8C%E5%AE%8C%E5%90%8E%E7%9A%84CPU%E6%97%B6%E9%97%B4%E5%8D%A0%E7%94%A8%E5%80%BC

GPU上运行时间利用cuda事件记录

cudaEvent_t start, stop;
	float esp_time_gpu;
	cudaEventCreate(&start);
	cudaEventCreate(&stop);
	cudaEventRecord(start, 0);// start
//执行代码
   cudaEventRecord(stop, 0);// stop
	cudaEventSynchronize(stop);
	cudaEventElapsedTime(&esp_time_gpu, start, stop);
	printf("Time for the kernel: %f ms\n", esp_time_gpu);
	cudaDeviceReset();
	cudaEvent_t start, stop;
	float esp_time_gpu;
	cudaEventCreate(&start);
	cudaEventCreate(&stop);
	cudaEventRecord(start, 0);// start
	for (t = 0; t < maxtime; t++) {

		Ez_update << <Dg, Db >> > (Ez, Hy, Hx, Ex, Ey, Hz, t, dl, dt
			);

		Hy_update << <Dg, Db >> > (Ez, Hy, Hx, Ex, Ey, Hz, dl, dt);

	}
	cudaEventRecord(stop, 0);// stop
	cudaEventSynchronize(stop);
	cudaEventElapsedTime(&esp_time_gpu, start, stop);
	printf("Time for the kernel: %f ms\n", esp_time_gpu);
	cudaDeviceReset();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值