STREAM是一个度量内存带宽(memory bandwidth)的项目(项目主页在这里:http://www.cs.virginia.edu/stream/),程序通过重复地执行几个简单的数学运算,来测量内存的访问带宽。代码有CFORTRAN两种语言版本。在这里,我对C语言程序版本做个简单介绍:

(1)C代码很简单,只有一个文件。一共才500多行,还包含了很多注释。默认情况下,测试数组的数据类型是double
(2)表示数组长度的STREAM_ARRAY_SIZE要足够大。代码注释提到,要让数组所占内存的大小满足两个条件:
a)至少是cache大小的3.8~4倍。这样做的原因应该是保证每次访问数组元素一定是从内存中访问,而不是cache
b)至少要让时间校准的代码输出大于20tick。这样做的原因应该是保证让程序执行一个足够长的时间。
(3)checktick()函数用来得到系统1个tick所占用的微秒数(us),也就是系统最小的时钟精度。
(4)默认情况下,编译出的可执行程序是单线程的。如果想编译多线程程序,可以在编译时指定OPENMP编译选项。请参考FAQMultiprocessor Runs一节(http://www.cs.virginia.edu/stream/ref.html)。