主题:【原创】GPU作超级计算,有那么美好吗? -- Highway
不过LZ定义的const变量在代码中都没有声明啊~~~~~~
const int NSET =100000000;
Int64 i;
double x, y;
double num_inside, distance_from_zero;
double Pi;
Random r = new Random();
num_inside = 0.0f;
for(i = 0; i < NSET; ++i)
{
//Console.WriteLine(i);
x = r.NextDouble();
y = r.NextDouble();
distance_from_zero = Math.Sqrt(x*x + y*y);
if (distance_from_zero <= 1.0)
{
num_inside++;
}
}
Pi = 4.0*(num_inside/NSET);
Console.WriteLine(Pi);
三维场景渲染 动画输出
看了看Nvidia给的那个Performance的图,琢磨着什么样的专门计算能用的上GPU,为什么Finance和Biology上的Gain出奇得高呢?他们做什么运算呢?大概顺着想下去,真能发现个有意思的应用和市场。
花上先
火箭再胜了,就到体育版侃侃姚明。
不然就是初中的。。。
比如什么花根线丢针之类。。。不少。。。
蒙特卡罗方法。用随机数计算,特点是方法简单,缺点是收敛速度慢。要达到相同的精度,用蒙特卡罗方法计算要多化上许多时间,所以如果有其它方法可用,是不会用蒙特卡罗方法的。
似乎GPU的指令是SIMD模式,象MMX类的指令。
赌徒用实践来检验真理的算法
最简单的,你可以试试矩阵乘法(向量化)的性能,乘法规模10240*10240。
给定市场上目前主流配置的CPU和GPU,我做过测试,结论有两条:
(1)非向量化指令下CPU的矩阵乘法一般比向量化指令下的CPU矩阵乘法慢10-200倍(Intel SSEx系列向量化指令,双核Intel P8600,4G DDRII DUAL Channel)。上述规模乘法,前者约4小时(约240分钟)占用2G内存,后者6分钟(5分钟54秒)占用同样内存。
(2)GPU向量化并行计算还比CPU向量化快2-20倍(NVIDIA CUDA, Quadro NVS 160M 512MB)。上述规模乘法,约1分钟(53秒,考虑到数据的预先交换和初始化,真正计算时间只是这个时间的一部分),有显存存在,不过还是占了2G内存。
我的系统平台是Ubuntu GNU/Linxu AMD 64
一般情况下,GPU矩阵乘法性能比CPU快几十到上百倍。更况且上面我的机器还都不太强。这对于科学计算的意义是巨大的,对于工程应用和控制来说可能就不太有什么意义了。毕竟,天河一号是AMD/ATI堆砌起来的嘛。
显卡不是处理视频的,是用来绘制图形的。视频是连续的图像帧,多用CPU处理,有时会进行GPU的向量化加速,但用的只是GPU很小很小的一部分能力。
声卡和数据处理基本没什么关系,它的作用只是一个转换,将数字形式的音频数据转换为模拟或其他形式,这一点处理器替代不了(因为处理器只能在数字形式之内做)。
CPU的强项是逻辑处理、分支处理和单指令线性处理,GPU的强项是大量数据的向量化处理,两者目前的技术上来看是一种矛盾,任何芯片如果逻辑和分支较强,向量化处理就必然较弱,反之亦然,无法太好的集成。
所谓芯片合一趋势的看法,我个人认为,欠缺对实际的了解。
CPU线性处理、分支处理和逻辑处理比GPU快,但GPU向量化处理比CPU快的多的多。向量化的特点,是一次给处理芯片大量的数据进行处理,SIMD。
Wikipedia上的一个级数,收敛精度比是线性的,去年用pThread+GnuMP写的程序在6s之内开16个线程算9000位的pi只要5s。不过这个级数的并行化是需要狠狠动脑子的:
pi is sum of 2*k!/(2*k+1)!!, k is integer from 0 to n