我正在使用 Strategies 编写一个并行的 Haskell 程序。它没有做它应该做的事情,我想检查一个函数在哪个 Haskell 执行上下文 (HEC) 中执行。
我可以在调试输出中使用 getHEC 调用或类似的方法吗?
我正在使用 Strategies 编写一个并行的 Haskell 程序。它没有做它应该做的事情,我想检查一个函数在哪个 Haskell 执行上下文 (HEC) 中执行。
我可以在调试输出中使用 getHEC 调用或类似的方法吗?
threadCapability
您可以通过调用from来找出 Haskell 线程正在运行的功能(即 CPU 内核)Control.Concurrent
。
如果您使用 运行程序+RTS -N
,则每个内核将生成一个操作系统级线程 (HEC),因此返回的功能编号threadCapability
将告诉您forkIO
绿色线程正在哪个操作系统线程上运行。但是,如果您使用 明确指定操作系统线程的数量+RTS -Nn
,其中n
是系统上的内核数量以外的某个整数,这可能对您没有多大用处。
您可能还会发现ThreadScope对于调试和可视化并行程序的执行很有用。