2

我是 gem5 模拟器的新手。我有一个 C 应用程序,我想让它运行得更快。所以我做的第一件事是使用循环展开和 SIMD 等多种技术对其进行优化。下一步,我打算让它在多核X86ARM)上工作,因为我必须使用 gem5 模拟器。

该应用程序用于 Radix4 计算。现在我已经成功地让它在X86ARM的一个核心系统上运行,但是现在我想让它在 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*/ 
}
4

2 回答 2

2

该应用程序不知道它是在模拟系统上运行的,因此您可以将 gem5 视为一个真实系统来实现您的目标。即,通过使用 OpenMP 或 MPI。

如果被建模的系统安装了这些库(OpenMP 或 MPI),那么这些库理论上应该可以工作。

于 2016-11-29T22:29:11.127 回答
1

在 gem5 方面,您只需要:

然后,您可以通过以下方式验证内核数量是否发生了变化:

cat /proc/cpuinfo

至于你的程序本身,一切都像一个真实的系统一样工作,所以你应该寻找关于接口的教程,如 POSIX 或 C11 线程,然后在遇到问题时询问更具体的问题。

于 2018-03-02T12:11:58.430 回答