DAQmx のCPU使用率が変わったのかな?

DAQmxを連続収録で使うときに問題になるのがCPU使用率。連続収録にしているだけでCPU使用率が100%になってしまう。実際は待ち動作をしているようで、スレッドを占有しているわけではないのだけど、いっけんターゲットPCに余裕があるのかないのかも分からない。困った仕様だった。DAQmxでCPU使用率が高くなることは以前よりNIからアナウンスがあった。
NI-DAQmx および従来型 NI-DAQ(レガシー)に関するFAQ - National Instruments
DAQプログラムの実行時に多量のCPUを消費します - National Instruments
NI-DAQmxを使用したプログラムでCPUの使用率が100%になります - National Instruments
仕方がないのでこれまでDAQmxでAI連続読み取りするときは、読み取りの直前に待機関数(Wait/ms)を自分で追加して使っていた。具体的には「DAQmx 読み取りのプロパティ」→AvailSampPerChan(チャンネル毎の有効なサンプル数プロパティ)を読み取って、読み取りサイズ(この場合20,000)からの差分(つまりこれから取得するサンプル数)をmsに直したものを待機関数に代入していた。下のVIスニペットにAI連続読み取りのループ部分だけを示す(オリジナルのpng画像はクリックして取り出してください)。

この例ではおおむねバッファが読み取りサイズになってから読み取っているので、ループに入る前に十分なバッファ確保(読み取りサイズの倍以上)をしておく。この待機関数の効果はてきめんで確実にCPU使用率が下がる。ループ中に「次のミリ秒倍数まで待機」を配置するよりループ動作が安定する。ぼくの愛用コードだ。

が、アップグレードしたDAQmx 8.9.5を使っていたら、こんな面倒な待機関数を入れなくてもCPU使用率は十分に低くなることを発見した。あれれ、いつの間に仕様変更?うーん、ぼくの愛用コードがまた一つ過去のものに。

最近だと思うけど、アナウンスはあったのかなぁ?ここはやっかいな仕様だったので、改善されたようですね。