c - 高性能计算pthread参数-c++

标签 c multithreading performance pthreads posix

我正在开发一个项目,我需要使用 pthread (C++) 来使用多个线程。 我有一个问题:

当我想在该线程中进行一些高性能计算而不被太多其他线程中断时,最佳的 pthread 参数配置设置是什么?

目前我正在使用这样的东西:

pthread_t thread;

struct sched_param param;
int sched = SCHED_FIFO;
memset(&param, 0, sizeof(sched_param));

// Now I set priority to max value (sched_get_priority_max() returns that value)
param.sched_priority = sched_get_priority_max();

// Create my thread
pthread_create(&thread, NULL, (void *) &hard_number_crunching, (void *) &structure_passed_to_thread);

// finally I set parameters to thread
pthread_setschedparam(&thread, sched, &param);

我在 SCHED_FIFO 和 SCHED_RR 之间切换“int sched”,但这对我没有多大帮助。 是否可以强制该线程在 CPU 上运行的时间比现在更长?

最佳答案

如果您为每个核心创建一个线程,您可能需要设置线程的关联性以防止它在核心之间漫游。这通常可以通过确保每个线程保持接近其缓存数据来提高性能。请参阅:

int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);

注意:如果您创建的线程多于核心,则不应设置关联性!这可能会导致各种疯狂的事情发生,其中之一就是僵局。

关于c - 高性能计算pthread参数-c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832062/

相关文章:

c# - 并行复制文件和不并行复制文件是否应该有区别?

android - 收到错误的android google play安装Referrer

performance - 如何在不干扰真实用户的情况下从我的网站阻止恶意机器人?

C 字符 ** 导致内存泄漏

java - 是否总是需要一个单独的 "writer"线程(在套接字读取器/文件写入器客户端中)?

c - 现有的线程池 C 实现

c# - 如何使 GTFS 数据的 Enumerable DataTable 的 LINQ 查询更快?

c - 在键入 'next' 命令后,gdb 在执行下一个程序行时返回什么退出代码?

c - 如何指示文件的最后一行

c++ - 在 Arduino 中将字符串转换为 const char*?