我正在使用 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对于调试和可视化并行程序的执行很有用。