.NET 已加入 1BRC 挑战赛

简介: 1BRC 挑战赛的目标是找到完成这个任务的最快实现,并在此过程中探索现代 Java 的优势。所以,抓住所有(虚拟)线程,使用 Vector API 和 SIMD,优化 GC,利用 AOT 编译,或者使用您能想到的任何其他技巧。

About 1BRC 挑战

1BRC 的全称是 The One Billion Row Challenge(十亿行挑战), 最初是由 Gunnar Morling 使用 Java 发起的,主要为了探讨现代 Java 在处理 10 亿行文本文件方面能走多远。抓住所有(虚拟)线程,使用 SIMD,优化 GC,或者使用任何其他技巧,使用最快的实现来解决这个任务,如下:

1BRC

编写一个程序,读取文本文件中的温度测量值,并计算每个气象站的最低、平均和最高温度。

任务看似简单,忘了告诉你,这个文件有 1,000,000,000 行!

文本结构很简单,前面是气象站,后面是测量值

Hamburg;12.0
Bulawayo;8.9
Palembang;38.8
St. John's;15.2
Cracow;12.6
...

需要打印出每个站点的最小值、平均值和最大值,按字母顺序排列,如下所示:

{
   
   
  Abha=5.0/18.0/27.4,
  Abidjan=15.7/26.0/34.1, 
  Abéché=12.1/29.4/35.6,
  Accra=14.7/26.4/33.1, 
  Addis Ababa=2.1/16.0/24.3, 
  Adelaide=4.1/17.3/29.7, 
  ...
}

1BRC 挑战赛的目标是找到完成这个任务的最快实现,并在此过程中探索现代 Java 的优势。所以,抓住所有(虚拟)线程,使用 Vector APISIMD,优化 GC,利用 AOT 编译,或者使用您能想到的任何其他技巧。

.NET 已加入挑战

1BRC.NET 实现由 Victor Baybekov 发起,项目地址为:

截止到 1 月 7 日 20:30,战果如下:

1

作者的一些优化内容如下:

  • 使用了 MmapSpan API
  • 优化哈希函数, Utf8Span.GetHashCode
  • 设置字典容量为 10k
  • 手动 SIMD:查找边界并简化解析
  • 避免零扩展,优化局部变量和循环
  • 如果您对这个挑战感兴趣, 欢迎加入,Show me the code!

https://github.com/buybackoff/1brc

转载声明:

目录
相关文章
祝 .NET 20周年生日快乐
祝 .NET 20周年生日快乐
34 2
|
前端开发 Go
.Net Mirco Framework 2007技术大会
最近公司很多项目都有大量嵌入式设备使用,由于WinCE系统相对较大,对硬件平台要求过高,所以对.Net MF一直比较关注。今天总算大开眼界了
1124 0
|
Web App开发 前端开发 .NET
艾伟:[你必须知道的.NET]第三十一回,深入.NET 4.0之,从“新”展望
anytao.net | 《你必须知道的.NET》网站 | Anytao技术博客  发布日期:2009.05.22 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处。
1159 0
|
XML 测试技术 C#
一起谈.NET技术,七种武器武装.NET(常用开发工具介绍)
我学习.Net快一年了,偶然间发现大家用的开发工具很多我都没见过,于是暗中的进行收集(呵呵,夸张了),现在收集满七种特来做此总结!我称他们为“七种武器”\(^o^)/   第一种武器长生剑、NUnit (用于编写单元测试)   NUnit 是为 .NET 框架生成的开放源代码单元测试框架。
1310 0
|
Windows
艾伟:.Net架构网站又一传奇:PlentyOfFish.com
这个叫PlentyOfFish的网站,  它只有一个员工,每天只干两小时活,但是却被估值$1000000000。 PlentyOfFish在山姆大叔家里算是一个很火的online dating网站,网站取名字来自这句话:There is plenty of fish in the sea. 对应的中文意思是“天涯何处无芳草”。
1503 0
|
Shell
一起谈.NET技术,疯狂的想法——基于.NET的软件超市平台构想与5年实现之路
  在2005年的时候,我曾经基于.NET 2003开发了一个小的组件,这个组件的目的是为了解决模块化开发和模块复用的问题。我将该组件命名为Common Form Framework,它的目的是允许每一个开发人员独立的开发自己的模块且可以直接专注于业务模块,然后通过配置可以快速将所有开发人员开发的业务逻辑窗体集成到这个组件中。
1432 0
|
缓存 算法 NoSQL
“.NET研究”带你走进缓存世界
  我们搞程序的多多少少都了解点算法。总体来讲,算法是什么?算法就是“时间”和“空间”的互换策略。我们常常考究一个算法的时间复杂度或空间复杂度,如果我们有绝对足够的时间或空间,那么算法就不需要了,可惜这种条件是不存在的,只是在某些情况下相对来说我们不用去考虑其中一个。
1195 0
|
Java
艾伟:.NET框架4.0中都有些什么?
.NET 4.0让不同组件之间工作的更好 1. 兼容性一直是个令人很头疼的问题,在.NET 4.0中,在同一个进程中,不同运行时上的组件可以同时运行,我们称之为In process Side by Side。
916 0