# match **Repository Path**: mphyatyh/match ## Basic Information - **Project Name**: match - **Description**: 这是一个编码比赛,目标是充分利用CPU架构特点写出运行性能更高的代码。 本轮次比赛的题目是:高性能哈希表。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-15 - **Last Updated**: 2023-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. 介绍 这是一个编码比赛,目标是充分利用CPU架构特点写出运行性能更高的代码。 本轮次比赛的题目是:高性能哈希表。 ## 1.1. 参赛代码提交方法 参赛选手gitee.com注册账号,并且创建一个代码仓库,仓库设置未私有。 把mphyatyh添加为这个仓库的成员,给与观察者权限。 ![添加成员的界面](./fig/add_member.png "Add Member") 把自己的参赛代码提交到gitee.com上,参赛代码放到根目录下的hash.c中。 然后添加微信: huangyan063136或者darrenhp,通过微信告知你的参赛仓库URL链接。 ## 1.2. 判题公布结果 判题机器后台进程每隔1小时,检查参赛选手的代码仓库是否有新版本参赛代码。 如果有则把代码拉到本地进行编译链接运行。 运行完毕之后,把结果更新到:https://gitee.com/mphyatyh/match/blob/master/scores.txt中。 # 2. 运行环境描述 ## 2.1. 硬件 ### 2.1.1. CPU * 双路Intel(R) Xeon(R) Gold 5318Y CPU * 未开启超线程 ``` processor : 47 vendor_id : GenuineIntel cpu family : 6 model : 106 model name : Intel(R) Xeon(R) Gold 5318Y CPU @ 2.10GHz stepping : 6 microcode : 0xd000375 cpu MHz : 2597.829 cache size : 36864 KB physical id : 1 siblings : 24 core id : 23 cpu cores : 24 apicid : 110 initial apicid : 110 fpu : yes fpu_exception : yes cpuid level : 27 wp : yes ``` ### 2.1.2. 内存 * 每个CPU芯片配置了2个通道内存,共4个通道,总大小256GB * 内存通道传输速度2933MT/s ## 2.2. OS版本 Linux testdb2 5.4.17-2136.314.6.3.el8uek.x86_64 ## 2.3. 编译器版本 gcc version 10.3.0 ## 2.4. 编译选项 gcc -g -Wall -O2 # 3. 要求 1. 所有函数返回结果正确。 2. 要支持多线程运行。多线程同时进行Put/Get/Remove操作,程序不能崩溃。 3. 最大占用内存。 创建一个max_elem个元素的hash表,占用内存不超过 (1024 + max_elem * 64) Bytes。 4. 允许调用malloc、free、memset、memcpy、pthread_mutex_create、 pthread_mutex_destroy、pthread_mutex_lock、pthread_mutex_unlock等几个 函数,不允许调用其他系统函数。 5. 允许使用gcc的内联汇编。 # 4. 测试用例 1. 创建一个3000万个元素的hash表,用32个线程对这个hash表做添加、删除、查找操作。 2. 3种操作的比例: myHashMapPut占5%、 myHashMapRemove占5%,myHashMapGet占90%。 3. 不同线程访问的key范围不同,如下: * key范围1024个 -- 1个线程 * key范围32768个 -- 1个线程 * key范围120万个 -- 10个线程 * key范围3000万个 -- 20个线程 4. 测试总时长1分钟,每10秒钟为一个阶段。第1阶段,32个线程共享1个CPU核;第2阶段, 32个线程共享16个CPU核心;第3、4、5、6阶段,32个线程共享32个CPU核心; # 5. 排名规则 1. 编译链接出错,或者程序运行过程中崩溃,或者运行结果出错,0分,不参与排名; 2. 按照每秒钟完成的总操作次数排名; # 6. 模块对外接口 详见hash.c中的注释。 # 7. 参考资料 * Intel CPU编程手册: https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html