接続されたFPGAを使用してFFTを実行するCyclone 5にACプログラムがあります。プログラムは現在256バイトを取得してstdin
処理し、FFT結果を提供しますstdout
。 Cyclone 5のLinux bashでこのように実行しました。
./fpga_fft < input_s16le_audio.pcm
これは最初の256バイトのみを評価します。 * .pcmファイルのすべての内容を読み取るまで、標準入力ストリームを使用してプログラムが呼び出され続けるにはどうすればよいですか?
アイデア:
cat input_s16le_audio.pcm|xargs ./fpga_fft
どういうわけか、xargsは一度に256バイトを時間順に(並列ではなく)処理するように指示する必要があります。
答え1
このような:
for i in {0..N}
do
dd if=input_s16le_audio.pcm bs=256 count=1 skip=$i | ./fpga_fft
done
明らかにforループは、ファイル全体が処理されたときに停止するループに置き換える必要があります(ddは、スキップ値が大きすぎる場合にのみ0バイトを送信するため、誤ったrcを計算できません)。
これでCプログラムがあると、入力ファイルを繰り返すように変更するのは難しいでしょう。
答え2
GNU並列処理を使用する:
cat input_s16le_audio.pcm |
parallel --pipe --recend '' --block 256 ./fpga_fft
fpga_fft
複数を並列に実行できない場合は、以下を追加してください。-j0