11

私は、OpenGL オフスクリーン レンダリングのかなりの量を利用する、非常に長い数処理プロセスを実行しています。それはすべてうまく機能しますが、サンドイッチを作りに行くときにそれをそのままにしておくと、通常、不在中にクラッシュすることがわかります。
クラッシュが発生した瞬間に非常に近いと判断できました。使用しているラップトップは、エネルギーを節約するために画面をオフにすることにしました。クラッシュ自体は NVIDIA dll の内部にあるため、何が起こっているのかを知る望みはありません。

明らかな解決策は、画面とビデオ カードをオフにする電源管理機能をオフにすることですが、もっとユーザー フレンドリーなものを探しています。これをプログラムで行う方法はありますか?
GPU 処理を利用する SETI@home 実装があることは知っています。ビデオカードがスリープ状態にならないようにするにはどうすればよいですか?

4

3 に答える 3

9

どの OS を使用しているかはわかりませんが、 Windowsから、新しい電源状態に入ろうとしているというメッセージが送信されます。それをリッスンしてから、CPU で処理を開始するか、要求を拒否して低電力状態にすることができます。

于 2008-12-26T20:35:50.617 に答える
8

同様の問題に遭遇した Linux ユーザーのために、 DBUS APIを使用して同様の通知を取得し、電源状態の変更を禁止できることを追加したいと思います。リンクから取得した、電源状態の変更を禁止する Python のスクリプト例:

#!/usr/bin/python
import dbus
import time
bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
devobj = bus.get_object('org.freedesktop.PowerManagement', 
                        '/org/freedesktop/PowerManagement')
dev = dbus.Interface (devobj, "org.freedesktop.PowerManagement.Inhibit")
cookie = dev.Inhibit('Nautilus', 'Copying files from /media/SANVOL')
time.sleep(10)
dev.UnInhibit(cookie)
于 2008-12-26T21:20:49.140 に答える
0

MSDN によると、アプリケーションがまだ動作中であり、Windows がスリープ状態になったりディスプレイをオフにしたりしてはならないことをアプリケーションが Windows に伝えることができる API があります。

関数が呼び出されますSetThreadExecutionState( MSDN )。ES_SYSTEM_REQUIREDフラグとを使用して、私にとってはうまくいきES_CONTINUOUSます。

ただし、この関数を使用してもスクリーン セーバーの実行は停止されないことに注意してください。スクリーン セーバーが OpenGL (または Direct3D) も使用している場合、OpenGL アプリに干渉する可能性があります。

于 2010-02-02T13:07:56.503 に答える