c - 将 c 函数拆分为线程

标签 c multithreading

我有一个 C 应用程序处理用于 Radix4 计算的浮点表。现在我希望它被分成两个线程以便在多核系统上运行它,首先,这是函数结构:

void radix4(float* x, float* y, N)
{
   for (l = 1; l <= PMAX; l++)
   {
      n = pow_4[l];//LUT for power of 4
      for (c =0; c < n; c=c+4)
      {
         //Loading some parameters from a look-up table
        n2  =LUT_n2[l][c];
        N2  =LUT_n2[l][c+1];
        N2_2=LUT_n2[l][c+2];
        N2_3=LUT_n2[l][c+3];
        factor = TWIDDLE_LIMIT/(range*4);

          while ((k < range) && ( range > 7))
          {//loading data from input tables
           //Computing butterflies
           //Loading twiddles
           //Computing final values
           //Store result in the same table
          }
          while ((k<range) && (range<=7))
          {
           //loading data from input tables
           //Computing butterflies
           //Loading twiddles
           //Computing final values
           //Store result in the same table
          }
      }
   }
}

while 循环展开。 现在我想了解的是,我如何知道哪些部分可以拆分为线程,并且可以就如何进行拆分给出一些提示,因为我正在阅读很多让我有点困惑的东西。

最佳答案

看起来您正在尝试优化 FFT 例程。您可能需要查看线程池,因为您将在应用程序的生命周期内计算多个 FFT。看看FFTW的网站并查看其 API 的结构。

对于问题的答案,您可以将问题“拆分”为 N 个线程(让我们选择 N = 2)。然后你需要做的基本上是去交错(即使在数组的上半部分,对于 N = 2,在底部也是奇数)。并运行另一个例程来为这些数组的子集(其中的 N)计算 FFT。然后,您可以使用身份/对称属性将数组放回原位并再次交错数组。

希望这对您有所帮助。

关于c - 将 c 函数拆分为线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39121715/

相关文章:

java - eclipse 调试器中的详细 java 线程状态?

java - Java 5 中的线程安全 XML 验证

.net - 在 .NET 中实现数据绑定(bind)的线程安全集合

c - 同步来自两个不同相机的图像

c - GCC-将int分配给char时不应该发出警告吗?

java - 在子线程中执行主线程方法

python - 是否可以并行运行以下网络查询?

c - 如何用kmalloc进行数据结构对齐?

java - 使用 BufferedReader 时如何避免 NumberFormatException?

c - WEXITSTATUS(status) 返回什么?