相关疑难解决方法(0)

如何轻松地对C代码进行基准测试?

是否有一个简单的库来衡量执行部分C代码所需的时间?我想要的是:

int main(){
    benchmarkBegin(0);
    //Do work
    double elapsedMS = benchmarkEnd(0);

    benchmarkBegin(1)
    //Do some more work
    double elapsedMS2 = benchmarkEnd(1);

    double speedup = benchmarkSpeedup(elapsedMS, elapsedMS2); //Calculates relative speedup
}
Run Code Online (Sandbox Code Playgroud)

如果图书馆允许你进行多次运行,平均它们并计算时间差异,这也会很棒!

c benchmarking

50
推荐指数
3
解决办法
4万
查看次数

有没有办法重用pthreads?

我有一个被调用数百万次的函数,这个函数完成的工作是多线程的。这是函数:

void functionCalledSoManyTimes()
{
  for (int i = 0; i < NUM_OF_THREADS; i++)
  {
    pthread_create(&threads[i], &attr, thread_work_function, (void *)&thread_data[i]);
  }
  // wait
}
Run Code Online (Sandbox Code Playgroud)

每次调用函数时,我都会创建线程,并为每个线程提供其数据结构(在算法开始时设置一次)以在thread_work_function. 在thread_work_function简单地处理一个系列阵列,并且所述thread_data结构包含指向那些阵列和索引,每个线程负责。

尽管以这种方式对算法进行多线程处理确实将性能提高了 20% 以上,但我的分析表明对 pthread_create 的重复调用导致了显着的开销。

我的问题是:有没有办法在pthread_create每次调用函数时不调用就实现我的目标?

问题解决了。

谢谢你们,我真的很感谢你们的帮助!我在这里使用您的提示编写了一个解决方案。

c multithreading posix pthreads

5
推荐指数
1
解决办法
3923
查看次数

标签 统计

c ×2

benchmarking ×1

multithreading ×1

posix ×1

pthreads ×1