2013-02-26 7 views
13

ソフトウェアが使用するCPUコアの数を顧客が支払うソフトウェアを書く場合、C++コードでこれを実現する最も良い方法は何でしょうか?私の研究はこれまで、WindowsではSetProcessAffinityMask、POSIXシステムではsched_setaffinityを使用しました。C++でプロセスコアのクォータを設定する

+0

あなたの質問のために真と詳細な回答: [1]:http://stackoverflow.com/a/3082553/1848929 – hakiko

+0

@hakikoその質問がありますどのように多くのコアを見つけ出すについてです... – us2012

+2

にWindowsでは、ジョブオブジェクトを調べる必要があります。http://msdn.microsoft.com/en-us/library/windows/desktop/ms684161(v=vs.85).aspxプロセスを制限するためにもっと多くのことができます親和性よりも。しかし、親和性を制限することもできます:http://msdn.microsoft.com/en-us/library/windows/desktop/ms686216(v=vs.85).aspx –

答えて

0

私はあなたが最良の選択肢を見つけたと思います。マルチスレッドプロセッサの機能を利用したい場合は、スレッド数を制限することはお勧めできません。

+1

「お客様がCPUコアの数を支払う場所」は、すでにお客様が支払っていない限り、これらの機能を利用したくないことを意味しています。 – MSalters

2

これは興味深い質問です。私は完璧な解決策はないと思っていますが、これまでに何の反応もなかったので、次のように提案してください:

あなたのプログラムのメインチャンクは、顧客のライセンスよりも多くのワーカースレッドを生成します。 1つのスレッドを複数のコア上で実行するように分割することはできないため、ハード制限が課されます。

(私はCPUの親和性を設定するのが実行時に簡単に変更できるとは思っていませんが、リバースエンジニアリングやシステムの永続的な変更を必要としないので、正直な顧客でさえそれを試してしまうのを防ぐのに「悪い」と感じることはありません)。

+0

スレッドクォータを設定することもできます。実行時にプロセスアフィニティを変更する人には、 'GetProcessAffinityMask'で親和性をチェックし、最初に' main'で設定してから変更があればライセンス例外(exit)をスローすると思っていました。 –

関連する問題