C++小白实习日记——Day 5 gitee怎么删文件,测试文件怎么写循环

昨晚一直内耗,一个程序写了三天写不出来,主要是耗时太多了,老板一直不满意。想在VScode上跑一下,昨晚一直报错。今天来公司重新搞了一下,

主要工作有:

1,读取当前时间用tscns

2,输出不用cout用fmt::print或者logi输出

3,ns到北京时间转换用fmtlog.h文件中的方式算出来

4,把昨天晚上上传gitee的文件删掉,重新上传

5,写一个100万次的循环,测试输出时间,给出最大最小值,中位数,标准差,统计各个时间阶段的百分比

如何缩短输出时间:

老板要求从获取时间到时间转化到输出时间,所有的时间在几百ns内,但是我只读取时间然后转化就几百ns,打印时间耗费时间更多,和老板沟通过后,老板说先传到git看看,并且封装成函数,输入0,1,2分别给出获取一次时间,转化为北京时间和总共时间,我今天改的代码:

#include <iostream>
#include <chrono>
#include "../fmtlog.h"
#include "../fmtlog-inl.h" // 假设 TSCNS 类定义在 fmtlog-inl.h 中// 函数根据模式返回不同的时间统计结果
int get_time(int mode) {// 创建 TSCNS 实例并初始化fmtlog::TSCNS tscns;tscns.init();fmtlogDetailT<> fmtlog;int64_t tsc = tscns.rdns();int64_t tsc1 = tscns.rdns();// 调用 resetDate 获取午夜时间戳uint64_t midnightNs = fmtlog.midnightNs;// 测量输出北京时间的耗时int64_t tsc2 = tscns.rdns();uint64_t t = (static_cast<uint64_t>(tsc) > midnightNs)? (static_cast<uint64_t>(tsc) - midnightNs): 0;uint64_t nanoseconds = t % 1000000000;t /= 1000000000;uint64_t seconds = t % 60;t /= 60;uint64_t minutes = t % 60;t /= 60;uint32_t hours = t;if (hours > 23) {hours %= 24;fmtlog.resetDate();}int64_t tsc3 = tscns.rdns();// 输出格式化的北京时间fmt::print("Beijing Time: {:02}{:02}{:02}{:09} ns\n", hours, minutes, seconds, nanoseconds);int64_t tsc4 = tscns.rdns();// 计算获取时间和格式化所用的时间int64_t duration_get_ns = tsc1 - tsc;int64_t duration_format_ns = tsc3 - tsc2;int64_t duration_print_ns = tsc4 - tsc3;// 根据模式返回不同的结果if (mode == 0) {fmt::print("Time taken to retrieve time: {} ns\n", duration_get_ns);return int(duration_get_ns);} else if (mode == 1) {fmt::print("Time taken to format and output Beijing time: {} ns\n", duration_format_ns);return int(duration_format_ns);} else if (mode == 2) {int total_time = int(duration_print_ns+duration_format_ns);fmt::print("Total time: {} ns\n", total_time);return total_time;} else {fmt::print("Invalid mode. Please enter 0, 1, or 2.\n");return -1;}
}int main() {int mode;std::cout << "Enter mode (0: Retrieve time, 1: Format time, 2: Total time): ";std::cin >> mode;int result = get_time(mode);if (result != -1) {fmt::print("Result: {} ns\n", result);}return 0;
}

 1,用TSCNS获取时间比直接用std::chrono::high_resolution_clock::now()快

我直接用了

int64_t timestamp_ns = tn.rdns();

2,用logi输出和用fmt::print

按道理logi比fmt::print快,但是fmtlog的logi有初始定义所以,我修改了logi的宏定义,但其实我觉得两中print方法差不多,都很慢,量级在几万ns,老板说我最早的时候用的

std::setw(2) << std::setfill('0')会更慢

用release跑比用 debug模式跑会快(这个我之前也了解过,但是Clion怎么设置release模式不太会,我自己设置了一下,但是不知道对不对,后面服务器满了我想着删掉点东西,结果误删了cmake-Debug,文件后面跑一直报错,然后我重新github上下载了一下-_-!)

如何写测试文件:

老板让我多测试测试,我昨天只设置了100次循环,他说太少了,所以我设置了100万次循环:

代码: 

/** 测试文件获取当前时间,并转化为北京时间的时间分布,以及获取一次时间并加上转化时间的时间间隔* 计算最大时间,最小时间,标准差,中位数,将时间按0-50,50-100,100-150,150-200分类* 测试次数100万次* */
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <numeric>
#include "../fmtlog.h"
#include "../fmtlog-inl.h" // 假设 TSCNS 类定义在 fmtlog-inl.h 中int main() {// 创建 TSCNS 实例并初始化fmtlog::TSCNS tscns;tscns.init();fmtlogDetailT<> fmtlog;const int num_iterations = 1000000;// 存储每次获取时间和格式化时间的耗时std::vector<int64_t> retrieve_times;std::vector<int64_t> format_times;std::vector<int64_t> all_times;// 存储分布统计std::vector<int> retrieve_time_buckets(5, 0);std::vector<int> format_time_buckets(5, 0);std::vector<int> all_time_buckets(5, 0);for (int i = 0; i < num_iterations; ++i) {// 测量获取时间的耗时int64_t tsc_start_get = tscns.rdns();int64_t tsc_end_get = tscns.rdns();int64_t duration_get_ns = tsc_end_get - tsc_start_get;retrieve_times.push_back(duration_get_ns);// 统计获取时间的分布if (duration_get_ns <= 50) retrieve_time_buckets[0]++;else if (duration_get_ns <= 100) retrieve_time_buckets[1]++;else if (duration_get_ns <= 150) retrieve_time_buckets[2]++;else if (duration_get_ns <= 200) retrieve_time_buckets[3]++;else retrieve_time_buckets[4]++;// 测量格式化北京时间的耗时int64_t tsc_start_format = tscns.rdns();uint64_t tsc = tscns.rdns();uint64_t t = (static_cast<uint64_t>(tsc) > fmtlog.midnightNs)? (static_cast<uint64_t>(tsc) - fmtlog.midnightNs): 0;uint64_t nanoseconds = t % 1000000000;t /= 1000000000;uint64_t seconds = t % 60;t /= 60;uint64_t minutes = t % 60;t /= 60;uint32_t hours = t;if (hours > 23) {hours %= 24;fmtlog.resetDate();}int64_t tsc_end_format = tscns.rdns();int64_t duration_format_ns = tsc_end_format - tsc_start_format;format_times.push_back(duration_format_ns);// 统计格式化时间的分布if (duration_format_ns <= 50) format_time_buckets[0]++;else if (duration_format_ns <= 100) format_time_buckets[1]++;else if (duration_format_ns <= 150) format_time_buckets[2]++;else if (duration_format_ns <= 200) format_time_buckets[3]++;else format_time_buckets[4]++;// 统计总时间int64_t all_time = duration_get_ns + duration_format_ns;all_times.push_back(all_time);if (all_time <= 50) all_time_buckets[0]++;else if (all_time <= 100) all_time_buckets[1]++;else if (all_time <= 150) all_time_buckets[2]++;else if (all_time <= 200) all_time_buckets[3]++;else all_time_buckets[4]++;}// 计算统计数据auto calculate_stats = [](const std::vector<int64_t>& times) {int64_t min_time = *std::min_element(times.begin(), times.end());int64_t max_time = *std::max_element(times.begin(), times.end());double mean = std::accumulate(times.begin(), times.end(), 0.0) / times.size();double sq_sum = std::inner_product(times.begin(), times.end(), times.begin(), 0.0,std::plus<>(), [mean](double x, double y) { return (x - mean) * (y - mean); });double std_dev = std::sqrt(sq_sum / times.size());std::vector<int64_t> sorted_times = times;std::sort(sorted_times.begin(), sorted_times.end());int64_t median = sorted_times[times.size() / 2];return std::make_tuple(min_time, max_time, mean, std_dev, median);};// 输出统计数据auto [retrieve_min, retrieve_max, retrieve_mean, retrieve_std_dev, retrieve_median] = calculate_stats(retrieve_times);auto [format_min, format_max, format_mean, format_std_dev, format_median] = calculate_stats(format_times);auto [all_min, all_max, all_mean, all_std_dev, all_median] = calculate_stats(all_times);fmt::print("Retrieve Time Stats:\n");fmt::print("Min: {} ns, Max: {} ns, Mean: {:.2f} ns, Std Dev: {:.2f} ns, Median: {} ns\n",retrieve_min, retrieve_max, retrieve_mean, retrieve_std_dev, retrieve_median);fmt::print("\nFormat Time Stats:\n");fmt::print("Min: {} ns, Max: {} ns, Mean: {:.2f} ns, Std Dev: {:.2f} ns, Median: {} ns\n",format_min, format_max, format_mean, format_std_dev, format_median);fmt::print("\nAll Time Stats:\n");fmt::print("Min: {} ns, Max: {} ns, Mean: {:.2f} ns, Std Dev: {:.2f} ns, Median: {} ns\n",all_min, all_max, all_mean, all_std_dev, all_median);// 计算分布百分比auto calculate_percentage = [&](const std::vector<int>& buckets) {std::vector<double> percentages(buckets.size());for (size_t i = 0; i < buckets.size(); ++i) {percentages[i] = static_cast<double>(buckets[i]) / num_iterations * 100.0;}return percentages;};auto retrieve_percentages = calculate_percentage(retrieve_time_buckets);auto format_percentages = calculate_percentage(format_time_buckets);auto all_percentages = calculate_percentage(all_time_buckets);fmt::print("\nRetrieve Time Distribution (Count and %):\n");for (size_t i = 0; i < retrieve_percentages.size(); ++i) {fmt::print("Bucket {}: Count = {}, Percentage = {:.2f}%\n", i, retrieve_time_buckets[i], retrieve_percentages[i]);}fmt::print("\nFormat Time Distribution (Count and %):\n");for (size_t i = 0; i < format_percentages.size(); ++i) {fmt::print("Bucket {}: Count = {}, Percentage = {:.2f}%\n", i, format_time_buckets[i], format_percentages[i]);}fmt::print("\nAll Time Distribution (Count and %):\n");for (size_t i = 0; i < all_percentages.size(); ++i) {fmt::print("Bucket {}: Count = {}, Percentage = {:.2f}%\n", i, all_time_buckets[i], all_percentages[i]);}return 0;
}

结果: 

 为什么最短时间和最长时间相差很多:

老板说是因为没有绑核,所以输出不稳定,然后给了我一个绑核的代码:

cpu_set_t cpu_mask;
CPU_ZERO(&cpu_mask);
CPU_SET(mp_tdMgr->m_queryCpuCore, &cpu_mask);
// 设置对应的线程核心
int ret = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpu_mask);
if (ret != 0) {loge("[PsiSubTrader] Trader Run Worker thread affinity failed! ret:{}", ret);
} else {logi("[PsiSubTrader] Trader Run Worker thread affinity success! cpu core:{}", mp_tdMgr->m_queryCpuCore);
}

如何删除gitee提交的文件

 昨天晚上提交的文件fmtlog里面有.git文件,这样的话会导致gitee仓库那边打不开提交的文件,先删除远程仓库里的错误文件:

两种方法:

1,右键单击文件然后弹出选项选择删除

2,本地操作 ,利用git,cd进库文件夹——>dir会显示当前文件夹下的文件——>git rm -r --cached 待删除的文件名如:git rm -r --cached fmtlog——>git commit -m "删除了文件fmtlog"——>git push

要注意,提交到仓库的文件里面不能有.git(我提交的文件fmtlog和fmt里面都有.git,所以往gitee仓库里面提交了好多次-_-!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475357.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Paimon】-- 6 -- 清理过期数据

目录 1、简要介绍 2、操作方式和步骤 2.1、调整快照文件过期时间 2.2、设置分区过期时间 2.2.1、举例1 2.2.2、举例2 2.3、清理废弃文件 3、参考 1、简要介绍 清理 paimon &#xff08;表&#xff09;过期数据可以释放存储空间&#xff0c;优化资源利用并提升系统运行效…

阿里云IIS虚拟主机部署ssl证书

宝塔配置SSL证书用起来是很方便的&#xff0c;只需要在站点里就可以配置好&#xff0c;但是云虚拟主机在管理的时候是没有这个权限的&#xff0c;只提供了简单的域名管理等信息。 此处记录下阿里云&#xff08;原万网&#xff09;的IIS虚拟主机如何配置部署SSL证书。 进入虚拟…

BOM的详细讲解

BOM概述 BOM简介 BOM&#xff08;browser Object&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window。 BOM由一系列的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 BOM缺乏标准&#xff…

湘潭大学软件工程算法设计与分析考试复习笔记(四)

回顾 湘潭大学软件工程算法设计与分析考试复习笔记&#xff08;一&#xff09;湘潭大学软件工程算法设计与分析考试复习笔记&#xff08;二&#xff09;湘潭大学软件工程算法设计与分析考试复习笔记&#xff08;三&#xff09; 前言 现在是晚上十一点&#xff0c;我平时是十…

STM32单片机ADC数模转换器

由于最近忘记了&#xff0c;自用。 转换模式 单次转换&#xff0c;非扫描模式 在非扫描模式下&#xff0c;列表中就只有序列1的位置有效&#xff0c;此时可以在序列1的位置指定我们想要转换的通道&#xff0c;然后ADC就会对这个通道进行模数转换。等待一段时间&#xff0c;转…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

Spring Boot中使用AOP和反射机制设计一个的幂等注解(两种持久化模式),简单易懂教程

该帖子介绍如何设计利用AOP设计幂等注解&#xff0c;且可设置两种持久化模式 1、普通模式&#xff1a;基于redis的幂等注解&#xff0c;持久化程度较低 2、增强模式&#xff1a;基于数据库&#xff08;MySQL&#xff09;的幂等注解&#xff0c;持久化程度高 如果只需要具有re…

VSCode+ESP-IDF开发ESP32-S3-DevKitC-1(1)开发环境搭建

VSCodeESP-IDF开发ESP32-S3-DevKitC-1&#xff08;1&#xff09;开发环境搭建 1.开发环境搭建&#xff08;安装ESP-IDF&#xff09;2.开发环境搭建&#xff08;安装VS Code&#xff09;3.开发环境搭建&#xff08;VSCode中安装ESP-IDF插件及配置&#xff09; 1.开发环境搭建&am…

论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架

大语言模型是当前人工智能领域的前沿研究方向&#xff0c;在安全性方面大语言模型存在一些挑战和问题。分享一篇发表于2024年ICASSP会议的论文FuzzLLM&#xff0c;它设计了一种模糊测试框架&#xff0c;利用模型的能力去测试模型对越狱攻击的防护水平。 论文摘要 大语言模型中…

opencv(c++)----图像的读取以及显示

opencv(c)----图像的读取以及显示 imread: 作用&#xff1a;读取图像文件并将其加载到 Mat 对象中。参数&#xff1a; 第一个参数是文件路径&#xff0c;可以是相对路径或绝对路径。第二个参数是读取标志&#xff0c;比如 IMREAD_COLOR 表示以彩色模式读取图像。 返回值&#x…

用源码编译虚幻引擎,并打包到安卓平台

用源码编译虚幻引擎&#xff0c;并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目&#xff0c;简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定&#xff0c;然后加入 Epic 邀请的组织&#xff0c…

OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!

【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端&#xff0c;全面支持Windows和macOS系统&#xff01;这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说&#xff0c;这一更新带来了令人…

【AIGC】破解ChatGPT!如何使用高价值提示词Prompt提升响应质量

文章目录 为什么高价值提示词如此重要&#xff1f;&#x1f50d;1.1 提升响应的相关性和准确性1.2 节省时间与资源1.3 增强用户体验 了解ChatGPT的工作原理&#x1f9e0;2.1 语言模型的训练过程2.2 上下文理解与生成2.3 限制与挑战 高价值提示词的核心要素✍️3.1 清晰明确的指…

07架构面试题

目录 一、关于合生元的面试题的架构分析的问题 1. 陈述两种方案的优劣 2. 在那些条件下&#xff0c;会选择哪一个方案 3. 你倾向那一种&#xff1f; 4. 如果要实施方案二的&#xff0c;准备步骤和流程 一、关于合生元的面试题的架构分析的问题 1. 陈述两种方案的优劣 方案…

反转链表、链表内指定区间反转

反转链表 给定一个单链表的头结点pHead&#xff08;该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1&#xff09;&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 如当输入链表{1,2,3}时&#xff0c;经反转后&#xff0c;原链表变…

关于win11电脑连接wifi的同时,开启热点供其它设备连接

背景&#xff1a; 我想要捕获手机流量&#xff0c;需要让手机连接上电脑的热点。那么问题来了&#xff0c;我是笔记本电脑&#xff0c;只能连接wifi上网&#xff0c;此时我的笔记本电脑还能开启热点供手机连接吗&#xff1f;可以。 上述内容&#xff0c;涉及到3台设备&#x…

Linux编辑器 - vim

目录 一、vim 的基本概念 1. 正常/普通/命令模式(Normal mode) 2. 插入模式(Insert mode) 3. 末行模式(last line mode) 二、vim 的基本操作 三、vim 正常模式命令集 1. 插入模式 2. 移动光标 3. 删除文字 4. 复制 5. 替换 6. 撤销上一次操作 7. 更改 8. 调至指定…

靓车汽车销售网站(源码+数据库+报告)

基于SpringBoot靓车汽车销售网站&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块&#xff0c;主要功能如下。 前台功能简介&#xff1a; - 首页&#xff1a;展示网站的概要信息和推荐车辆。 - 车辆展示&#xff1a;展示可供销售的汽车。 - …

数据集-目标检测系列- 花卉 鸡蛋花 检测数据集 frangipani >> DataBall

数据集-目标检测系列- 花卉 鸡蛋花 检测数据集 frangipani >> DataBall DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 贵在坚持&#xff01; 数据样例项目地址&#xff1a; * 相关项目 1&#xff09;数据集…

数据库基础(MySQL)

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁盘内存 为…