我是gem5模拟器的新手。我有一个C应用程序,我想让它运行得更快。所以我做的第一件事就是使用循环展开和SIMD等几种技术来优化它。下一步,我打算让它在多核( X86 和 ARM )上运行,因为我必须使用gem5模拟器。< / p>
该应用程序适用于Radix4计算。目前我已成功将其用于 X86 和 ARM 的一个核心系统,但现在我想让它在4,16 ......核心上工作X86或ARM。
有人可以给我一些提示或告诉我正确的方法吗? 谢谢
这是关于应用程序的全局概念
void init_twiddle(int N)
{
int i;
for(i=0; i<TWIDDLE_LIMIT; i++)
{
/*Filling the twiddle table*/
}
}
void init_LUT(int N)
{
LUT_n2 = malloc((1+PMAX)*sizeof(int*));
for (i=0; i <= PMAX; i++){
for (j=0; j < n; j++)
/*Calculate radix parametrs and put them in a table*/
}
}
void bit_r4_reorder(float* x, float* y, int N)
{
/*Bit reordering after calculating the radix4*/
}
void radix4(float *x,float *y, int N)
{
/*function for the radix4 computing*/
}
int main()
{
/*Calling the previous functions*/
}
答案 0 :(得分:2)
应用程序并不知道它是在模拟系统上运行的,因此您可以将gem5视为真正的系统来实现您的目标。即,使用OpenMP或MPI。
如果正在建模的系统安装了这些库(OpenMP或MPI),那么这些库应该在理论上有用。
答案 1 :(得分:1)
在gem5方面,你只需要:
将-n <number-of-cores>
选项传递给fs.py
脚本
:
使用--generate-dtb
。推荐方法。 aarch64已被阻止:https://github.com/cirosantilli-work/gem5-issues/issues/18
选择具有正确CPU数的正确dtb,例如:
--dtb-file='system/arm/dt/armv7_gem5_v1_2cpu.dtb
如果你想要2个CPU。
如果您需要任何当前dtbs上不存在的CPU数量,您可以:
修复在gem5树中生成dtbs的Makefile
:https://github.com/gem5/gem5/blob/a66fe6a8c36c9ab49cb3a35065bfc645d51036c8/system/arm/dt/Makefile#L40并使用以下内容重新生成它们:
制作-C system / arm / dt
如果您想在ARM中使用超过8个核心,则需要进一步更改:How to run a gem5 arm aarch64 full system simulation with fs.py with more than 8 cores?
如果不这样做,Linux内核将无法看到系统中的所有CPU。
然后,您可以使用以下命令验证核心数量是否已更改:
cat /proc/cpuinfo
至于你的程序本身,一切都像真正的系统一样,所以你应该在POSIX或C11线程等接口上寻找教程,然后在遇到问题时询问更具体的问题。