파이프의 프로세스는 한 번에 256바이트를 처리합니다.

파이프의 프로세스는 한 번에 256바이트를 처리합니다.

연결된 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

관련 정보