stream benchmark 交叉编译 on psoc

之前有研究过这个,居然忘记了,看来确实是老了,没有盘过来。

如何下载,见 linux下载网页上的文件夹以及删除文件(stream)

出现了好几个问题

1.

error while loading shared libraries: libgomp.so.1: cannot open shared object file: No such file or directory

编译选项加入-static

2.

Segmentation fault

貌似和STREAM_ARRAY_SIZE,NTIME以及OFFSET有关

  1)STREAM_ARRAY_SIZE 这个是测试数据集的大小,该大小应该遵循以下两条规则。
        A. 数据集大小应不小于L3 cache大小的4倍。举例来说某10核Power机器中L3 cache为8MB/core,共80MB L3 cache,因此数据集的大小至少为80MB*4=320MB。由于数据集中每个元素大小为64bits,即8B。故数据集大小应设置为不小与320MB/8B=40M (40million或40000000)。
256KB*4/8B=128K 128000
        B. 数据集大小应能确保程序输出时间大于20个时钟周期。该时钟周期可在程序输出信息中看到,如“Your clock granularity/precision appears to be 1 microseconds.“ 表示时钟周期为1微秒,20个时钟周期为20微秒。如果你的测试机器有200GB/s的带宽,那你的数据集大小应不小于4MB,即0.5million个元素。
 
   2) NTIME 该参数为kernel执行的次数,程序将输出除第一次外其他结果中最好的结果,所以NTIME必须要大于1。该值默认为10,通常不需要修改。
3)OFFSET。该值为数组的偏移量,修改此值可改变数组的对齐,从而在一定程度上改变输出的性能结果。一定程度在这指的是也许会改变,也许不会改变。本人在Power上的测试是没有很大的改变。如果需要修改该参数,通常将其设置为靠近2^n的数,例如使用-DOFFSET=1022 (靠近2^10=1024)。
   4) STREAM_TYPE。我们可以通过修改该参数设置测试集的数据类型,默认是double(8B)。如果将其改为float则数据集大小减少一半。
 
可在运行前手动设置运行的进程数,如export OMP_NUM_THREADS=20
 
 arm-linux-gnueabihf-gcc -O -static -fopenmp -DSTREAM_ARRAY_SIZE=128000 -DNTIME=10 -DOFFSET=0 stream.c -o stream_omp_exe

 
Your clock granularity/precision appears to be 1 microseconds.
Each test below will take on the order of 2362 microseconds.
   (= 2362 clock ticks)
Increase the size of the arrays if this shows that
you are not getting at least 20 clock ticks per test.
2362 clock ticks已经大于20 clock ticks
STREAM_ARRAY_SIZE=128000 够了。
 
原文地址:https://www.cnblogs.com/idyllcheung/p/11284411.html