我正在做一个项目,在这个项目中我需要使用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上运行比现在更长的时间?
发布于 2013-02-12 21:56:46
如果要为每个核心创建一个线程,则可能需要设置线程的亲和性,以防止它在核心之间漫游。这通常通过确保每个线程与其缓存的数据保持接近来提高性能。请参见:
int sched_setaffinity(pid_t pid,size_t cpusetsize,cpu_set_t *mask);注意:如果创建的线程多于核心,则不应设置亲和性!这可能会导致各种疯狂的事情发生,比如死锁。
发布于 2013-02-12 20:56:12
假设你的线程需要X个周期。不管优先级是什么,或者系统还在做什么,它仍然需要X个周期。如果系统不忙于做其他事情,线程将几乎连续运行,直到完成。如果系统繁忙,您的线程将被停止,甚至可能频繁地停止,以便让其他程序运行。最终,你的线程仍然会得到它的X周期。请注意,对于这里的目的,有两种类型的优先级...线程优先级(一个线程的优先级相对于其他线程的优先级)和进程优先级(您的进程/程序的优先级相对于其他进程/程序/操作系统的优先级)。您正在设置线程优先级。是否有其他优先级相同或更高的线程与此线程竞争?是否有更高优先级的系统进程与您的竞争?如果答案是否定的,那么你很可能会得到自己的CPU。还要注意,如果你有多个处理器和/或核心,你的线程可能不能在多个处理器上很好地运行,所以如果你没有很好地划分你的任务,你的整个系统处理可能不是100%。
发布于 2013-02-13 16:05:47
都是zr。mark answers对我很有帮助。我还找到了一种为单个线程设置亲和性的方法。请查看此链接以了解操作方法:pthread_attr_setaffinity_np()
感谢所有帮助我们的人。
https://stackoverflow.com/questions/14832062
复制相似问题