谁能把这个程序的性能提升一倍?---并行排序算法

如下,一组4元矢量的排序,如何把排序时间缩减一半?可以用并行算法。

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace Vector4Test
{
    public class Vector
    {
        public double W;
        public double X;
        public double Y;
        public double Z;
        public double T;
    }

    internal class VectorComparer : IComparer<Vector>
    {
        public int Compare(Vector c1, Vector c2)
        {
            if (c1 == null || c2 == null)
                throw new ArgumentNullException("Both objects must not be null");
            double x = Math.Sqrt(Math.Pow(c1.X, 2)
                                 + Math.Pow(c1.Y, 2)
                                 + Math.Pow(c1.Z, 2)
                                 + Math.Pow(c1.W, 2));
            double y = Math.Sqrt(Math.Pow(c2.X, 2)
                                 + Math.Pow(c2.Y, 2)
                                 + Math.Pow(c2.Z, 2)
                                 + Math.Pow(c2.W, 2));
            if (x > y)
                return 1;
            else if (x < y)
                return -1;
            else
                return 0;
        }
    }
    internal class VectorComparer2 : IComparer<Vector> {
        public int Compare(Vector c1, Vector c2) {
            if (c1 == null || c2 == null)
                throw new ArgumentNullException("Both objects must not be null");
            if (c1.T > c2.T)
                return 1;
            else if (c1.T < c2.T)
                return -1;
            else
                return 0;
        }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            Vector[] vectors = GetVectors();
            var watch1 = new Stopwatch();
            watch1.Start();
            A(vectors);
            watch1.Stop();
            Console.WriteLine("A sort time: " + watch1.Elapsed);
            vectors = GetVectors();
            watch1.Reset();
            watch1.Start();
            B(vectors);
            watch1.Stop();
            Console.WriteLine("B sort time: " + watch1.Elapsed);
            vectors = GetVectors();
            watch1.Reset();
            watch1.Start();
            C(vectors);
            watch1.Stop();
            Console.WriteLine("C sort time: " + watch1.Elapsed);
            Console.ReadKey();
        }

        private static Vector[] GetVectors()
        {
            int n = 1 << 15;
            var vectors = new Vector[n];
            var random = new Random();
            for (int i = 0; i < n; i++)
            {
                vectors[i] = new Vector();
                vectors[i].X = random.NextDouble();
                vectors[i].Y = random.NextDouble();
                vectors[i].Z = random.NextDouble();
                vectors[i].W = random.NextDouble();
            }
            return vectors;
        }

        private static void A(Vector[] vectors)
        {
            Array.Sort(vectors, new VectorComparer());
        }

        private static void B(Vector[] vectors) {
            int n = vectors.Length;
            for (int i = 0; i < n; i++)
            {
                Vector c1 = vectors[i];
                c1.T = Math.Sqrt(Math.Pow(c1.X, 2)
                                 + Math.Pow(c1.Y, 2)
                                 + Math.Pow(c1.Z, 2)
                                 + Math.Pow(c1.W, 2));
            }
            Array.Sort(vectors,new VectorComparer2());
        }
        private static void C(Vector[] vectors) {
            int n = vectors.Length;
            for (int i = 0; i < n; i++) {
                Vector c1 = vectors[i];
                c1.T = Math.Sqrt(c1.X * c1.X
                                 + c1.Y * c1.Y
                                 + c1.Z * c1.Z
                                 + c1.W * c1.W);
            }
            Array.Sort(vectors, new VectorComparer2());
        }

    }
}

时间: 2024-09-23 23:35:23

谁能把这个程序的性能提升一倍?---并行排序算法的相关文章

阿里云SSD云盘第二轮公测 性能提升20倍

本文讲的是阿里云SSD云盘第二轮公测 性能提升20倍6月9日,阿里云开启了"大杀器"SSD云盘的第二轮公测,其IOPS提升到了20000,是当前云盘性能的20倍.同时,盘内数据全部实时落盘,可靠性9个9.尤其适合中大型关系数据库.核心业务系统以及中大型开发测试环境使用.SSD云盘已在杭州地域公测,公测期至7月15日免费使用. IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一,一个普通的7200转的家用磁盘的IOPS

刘宏程:紫光华山全新Gen9引入永久性内存 存储性能提升34倍

近日,HPE更新了自己的第9代ProLiant服务器产品组合,引入了英特尔最新的Broadwell处理器以及新的永久内存技术,可让服务器的内存作为一个高性能的存储层. 现在的HPE服务器品牌已经隶属于紫光华山旗下,此次产品更新也是蜕变后HPE的首次服务器发布.HPE升级的产品多达20款,同时也是所有服务器升级厂商中涉及型号最多的,应用产品覆盖最广的品牌. 20款服务器升级至E5 V4 紫光华山科技有限公司(原中国惠普有限公司企业集团)工业标准服务器事业部产品市场总监刘宏程表示,此次升级除处理器之

.NET 应用程序的性能提升应用技巧

程序|技巧|性能 最近花了很多时间研究.net性能提升问题,在ms的网站上也找到很多不错的资料,下面这些内容估计大家或多或少的用过一些,在这里贴出来,希望能对大家的工作有所帮助. Performance Tips for All Applications: Throw Fewer Exceptions Make Chunky Calls Design with ValueTypes Use AddRange to Add Groups Trim Your Working Set Use For

哈佛/MIT学生创造GPU数据库,性能提升70倍

2012年Todd Mostak 在哈佛中东研究中心攻读硕士研究生,他试图为自己的论文主题绘制和处理阿拉伯之春期间发布的4千万Twitter帖子,但处理这些帖子数小时耗费了甚至数 天.没有现成的系统能帮助他实现大数据集快速互动分析,于是他一边读MIT的数据库课程,一边开发出了利用GeForce Titan GPU处理数据的并行数据库系统MapD(演示,非论文).基于GFU的数据库系统比基于CPU的数据库性能提升了70倍,而整个硬件只花了5千美元.Todd Mostak计划在开源许可证下发布Map

Nvidia称Tegra3图形性能提升3倍

新浪科技讯 北京时间11月9日上午消息,Nvidia今天宣布,该公司的新款Tegra 3处理器图形性能比上一代产品提升3倍,而能耗则降低61%. Tegra 3此前的开发代号为"Project Kal-El",这款四核处理器目前已经投产,并将成为Nvidia在增长迅猛的移动市场投下的最新赌注.以iPad为代表的平板电脑已经开始蚕食PC销量. Nvidia最初是一家PC显示芯片生产商,其目前的多数收入仍然来自这项业务.该公司CEO黄仁勋今年9月预计,采用Tegra 3处理器的设备将于年底

NGINX引入线程池 性能提升9倍

1. 引言 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为此,NGINX工作在非阻塞的socket模式下,并使用了epoll 和 kqueue这样有效的方法. 因为满负载进程的数量很少(通常每核CPU只有一个)而且恒定,所以任务切换只消耗很少的内存,而且不会浪费CPU周期.通过NGINX本身的实例,这种方法的优点已经为众人所知.NGINX可以非常好地处理百

成人网站性能提升20倍之经验谈

色情业是个大行业.互联网上没有多少网站的流量能和最大的色情网站相匹敌. 要搞定这巨大的流量很难.更困难的是,在色情网站上提供的很多内容都是低延迟的实时流媒体而不是简单的静态视频.但是对于所有碰到过的挑战,我很少看到有搞定过它们的开发人员写的东西.所以我决定把自己在这方面的经验写出来. 问题是什么? 几年前,我正在为当时全世界访问量排名26的网站工作 - 这里不是说的色情网站排名,而是全世界排名. 当时,该网站通过RTMP(Real Time Messaging protocol)协议响应对色情流

优化临时表使用,SQL语句性能提升100倍

原载UC技术博客: http://tech.uc.cn/?p=2218 [问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右. SQL语句如下: SELECT DISTINCT g.*, cp.name AS cp_name, c.name AS category_name, t.name AS type_name FROMgm_game g LEFT JOIN gm_cp cp ON cp.id = g.cp_i

ASP.NET页面优化 性能提升8倍的方法_实用技巧

为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图: 测试环境: 1. Windows Server 2003 SP2 2. Viaual Studio 2008,使用自带的WebDev.WebServer.EXE运行网站程序. 3. (ThinkPad SL510):Core2 T6670 2.2GHz, 4G内存 二个红框中的数字反映了优化前后的执行时间. 数字表明:优化前后,执行时间有了8倍多的差别. 测试背景 看过了优化结果,再来介绍一下:这个测试到底是在测试什么东西? 现在