2017-01-24 2 views
0

previous questionをビルドするには、0%から100%の間でパーセントを取ることができるプログラムを必要とし、ある程度のCPUが使用されたときにトリガするサービスをテストするために、マシンのCPUの大部分を使用します。それは基本的に0.6秒間当社if条件をチェックして、繰り返し、0.4秒間スリープ、60%の利用率についてSwiftコードですべてのコアを使用するよう強制できますか?

// workInterval is the fraction of CPU to use, between 0 (none) and 1 (all). 
let workInterval: TimeInterval = <utilization> 
let sleepInterval: UInt32 = UInt32((1 - workInterval) * 1_000_000) 
let startDate = Date() 
var sleepDate = Date() 
while startDate.timeIntervalSinceNow > -<time> { 
    if sleepDate.timeIntervalSinceNow < (workInterval * -1) { 
     print("Sleep") 
     usleep(sleepInterval) 
     sleepDate = Date() 
    } 
} 

:私はシングルコアのためにこれを行うことができますいくつかのスウィフトコードを書かれています。これは、コードが実行されている個々のコアには最適ですが、マシン上のすべてのコアでこの作業を行う必要があります。 Swiftでこれを行う方法はありますか?このコードを別の言語で書いて、Swiftでそのスクリプトを実行する方が良いですか?

(はい、これは私が与えられている非常にばかげ作業です。)

+0

マルチスレッディングに 'Dispatch'を使うだけです。しかしそれに加えて、おそらく100%を使用するアプリケーションを作成してOSレベルでCPUアクセスを制限することで、特定のCPU使用率を適切にシミュレートするのにはるかに簡単な時間を取ることになります。 – Alexander

+0

@Alexander残念ながら、私はこのシナリオで私たちのコントロールの範囲内にあるとは思わない。 – TheSoundDefense

+0

@TheSoundDefenceあなたは 'nice'や' cpulimit'を使うことはできませんか? – Alexander

答えて

2

ほとんどの場合、あなたは同時キューに欲しいものを達成することができます。上記のコードの1つのインスタンスを、使用可能な各コアのキューに追加します。これらの各インスタンスは、各コアに1つずつ並列に実行する必要があります。

メインキューで1つ実行してから、コアキューで "コア1"インスタンスを実行する必要があります。

しかし、最終的にコアの利用方法を制御することはできません。上記は、使用可能なコアを有効に活用しているランタイムに依存しています。

+0

そして、それに応じて、メインスレッド専用の1つのコアを処理するために、おそらく他の部分の負荷を増やしてください。 – TheSoundDefense

関連する問題