我正在开发一个项目,我需要使用 pthread (C++) 来使用多个线程。 我有一个问题:
当我想在该线程中进行一些高性能计算而不被太多其他线程中断时,最佳的 pthread 参数配置设置是什么?
目前我正在使用这样的东西:
pthread_t thread;
struct sched_param param;
int sched = SCHED_FIFO;
memset(¶m, 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, ¶m);
我在 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/