我正在使用Strategies编写并行Haskell程序。它没有做它应该做的事情,我想检查一个函数执行的Haskell执行上下文(HEC)。
是否有我可以在调试输出中使用的getHEC调用或类似内容?
答案 0 :(得分:4)
通过从threadCapability
调用Control.Concurrent
,您可以找出正在运行Haskell线程的功能(即CPU核心)。
如果您使用+RTS -N
运行程序,则每个核心会生成一个操作系统级别的线程(HEC),因此threadCapability
返回的功能号将告诉您哪个OS线程是您的正在运行forkIO
绿色线程。但是,如果您明确指定了+RTS -Nn
的操作系统线程数,其中n
是除系统内核数之外的某个整数,那么这对您来说可能没什么用。
您可能还会发现ThreadScope对于调试和可视化并行程序的执行非常有用。