Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 使用内存带宽信息计算HPC应用程序的mflop/s_Fortran_Mpi_Hpc_Flops_Memory Bandwidth - Fatal编程技术网

Fortran 使用内存带宽信息计算HPC应用程序的mflop/s

Fortran 使用内存带宽信息计算HPC应用程序的mflop/s,fortran,mpi,hpc,flops,memory-bandwidth,Fortran,Mpi,Hpc,Flops,Memory Bandwidth,我想在不运行应用程序的情况下计算HPC应用程序(NAS基准测试)的mflops(每处理器每秒百万次操作)。我已经用流基准测试了我的系统(一台超级计算机)的每个核心的内存带宽。我想知道如何通过核心的内存带宽信息来获得应用程序每个处理器的MFLOP。 我的节点有64GiB内存(包括16个内核-2个套接字)和58 GiB/s聚合带宽,使用所有物理内核。我的内核的内存带宽从2728.1204 MB/s到10948.8962 MB/s不等,这是由于NUMA体系结构的缘故 任何帮助都将不胜感激。您无法仅从数

我想在不运行应用程序的情况下计算HPC应用程序(NAS基准测试)的mflops(每处理器每秒百万次操作)。我已经用流基准测试了我的系统(一台超级计算机)的每个核心的内存带宽。我想知道如何通过核心的内存带宽信息来获得应用程序每个处理器的MFLOP。 我的节点有64GiB内存(包括16个内核-2个套接字)和58 GiB/s聚合带宽,使用所有物理内核。我的内核的内存带宽从2728.1204 MB/s到10948.8962 MB/s不等,这是由于NUMA体系结构的缘故


任何帮助都将不胜感激。

您无法仅从数据流的内存带宽结果中获得基准测试的MFLOPS/GFLOPS估计值。您还需要知道另外两个参数:CPU核心的峰值MFLOPS/GFLOPS(最好是每个时钟周期的最大触发器操作数,包括所有向量指令和CPU频率限制:min、mean、max)以及您需要估计的每个程序(每个NAS基准)的GFLOPS/GB(触发器与字节的比率、算术强度)

流基准具有非常低的算术强度(0 DP=每两个双操作数FP64次浮点=拷贝中的2*8字节,比例中的每16字节1次浮点,加法中的1次浮点/24字节,以及三元组中的2次浮点/24字节)。所以,流基准测试受正确运行时的内存带宽(以及错误运行时的缓存带宽)的限制。许多基准可能具有更高的可靠性

有了这些数据(内存带宽、不同矢量化级别上的最大gflops/GHz、cpu的正常/最大/低频率、测试的算术强度),您就可以开始使用屋顶线性能模型了

使用rootline时,x轴具有flops/byte;GFlop/s的y轴(均为对数标度)。“屋顶”线由每个CPU(或机器)的两部分组成

第一部分是倾斜的,对应于较低的算术强度。这一部分中的应用程序将不得不等待从内存加载数据,它们没有数据可以以CPU的全GFlop/s速度运行;测试受内存限制。这一行由流基准定义

线的第二部分是直的,它对应于更高的强度。这里的任务不受内存带宽的限制,它们受可用触发器的限制。对于现代CPU而言,所有触发器都只能用于宽向量指令(指令级并行),并且并非所有任务都可以使用最宽向量:


您无法仅从数据流的内存带宽结果中估计基准的MFLOPS/GFLOPS。您还需要知道另外两个参数:CPU核心的峰值MFLOPS/GFLOPS(最好是每个时钟周期的最大触发器操作数,包括所有向量指令和CPU频率限制:min、mean、max)以及您需要估计的每个程序(每个NAS基准)的GFLOPS/GB(触发器与字节的比率、算术强度)

流基准具有非常低的算术强度(0 DP=每两个双操作数FP64次浮点=拷贝中的2*8字节,比例中的每16字节1次浮点,加法中的1次浮点/24字节,以及三元组中的2次浮点/24字节)。所以,流基准测试受正确运行时的内存带宽(以及错误运行时的缓存带宽)的限制。许多基准可能具有更高的可靠性

有了这些数据(内存带宽、不同矢量化级别上的最大gflops/GHz、cpu的正常/最大/低频率、测试的算术强度),您就可以开始使用屋顶线性能模型了

使用rootline时,x轴具有flops/byte;GFlop/s的y轴(均为对数标度)。“屋顶”线由每个CPU(或机器)的两部分组成

第一部分是倾斜的,对应于较低的算术强度。这一部分中的应用程序将不得不等待从内存加载数据,它们没有数据可以以CPU的全GFlop/s速度运行;测试受内存限制。这一行由流基准定义

线的第二部分是直的,它对应于更高的强度。这里的任务不受内存带宽的限制,它们受可用触发器的限制。对于现代CPU而言,所有触发器都只能用于宽向量指令(指令级并行),并且并非所有任务都可以使用最宽向量:


每次内存访问执行多少次操作?OpsPerAccess*MemoryBandwidth/sec=ops/sec@enhzflep我怎样才能获得OpsperacAccess?我会使用一个工具并使用那里的应用程序来找到它吗?不知道。如果你只有每秒的访问次数,这是我能想象的唯一一个数字,你可以与你仅有的另一个数字——内存带宽结合使用。根据内部循环的大小,我只需查看生成的程序集并手动粗略计算即可。当然,此计算不会考虑缓存未命中等情况。不幸的是,我怀疑您没有足够的信息来生成比模糊、粗略估计应用程序性能更好的结果。请参阅。让我们假设瓶颈是一个简单的操作,比如AXPY。此操作计算2次触发器,但内存访问量为3x8字节。假设我的机器有4个处理器,内存带宽为48 Go/s。然后,我最多可以每秒执行48/(3x8)=2G操作。这是4Gflops/s,所以每个处理器1Gflops/s。“这是一个非常粗略的估计……”弗朗西斯,谢谢你。但我不确定我是否能跟上你。对不起,我在这个领域是新手。。。您是如何通过每秒2G的操作获得4Gflops/s的?你把2G乘以2flops了吗?“3x8字节内存访问”是内核在系统上可以访问的内存?我已经编辑了我的问题并添加了关于节点的信息。那么每个节点64GiB内存,就是您提到的访问内存吗?每个内存访问执行多少操作?OpsPerAccess*MemoryBandwidth/sec=ops/sec@enhzflep我怎样才能获得OpsperacAccess?