1. Introduction
2. Implementation
JPEG Decoder application is divided in three tasks; which are mapped in three extended mMIPS nodes. First task is reading data from its own mMIPS local memory processing it in some way; and results are sent to the second node. Second task will proceed in the same way sending resulting data to third task; which finish this process obtaining the decoded image and storing it on its local mMIPS memory.
During the decoding of a single image those nodes could be idle in certain moments. For example, at the beginning of the process third node is waiting for data processed by node two; which means inefficiency using mNoC resources. Something similar happens at the end of the process; where first node has finished but still waiting for node three to finish.
Implementing a Motion JPEG Decoder this aspect is improved. In this new case a new image is immediately decoded after a previous one has finished; therefore nodes are working in parallel decoding different images at the same time. When task 1 finish processing data from image 1, the third one still working on it. Is in this moment when image 2 starts to be decoded by node 1; therefore two images are now in the system and nodes are not idle.
For this reason, it could be tested that decoding two images with MJPEG Decoder is faster than decoding two separate images with a JPEG Decoder. Figure 1 tries to show this fact. Figure a) is the execution time of JPEG Decoder application, where total execution time is t1+t2. Figure b) is execution time of MJPEG Decoder application where total execution time is lower than t1+t2.
|
|
As Motion JPEG Decoder was created from the JPEG Decoder application, it was necessary to perform some changes on the original application. First, it was necessary to modify the source code of the application in order to upload several input images in shared memory. New pointers to the input images on they new location were added to the application, as well as the location for the output decoded images was also changed to shared memory. Each node has to continue working until all images in shared memory have been decoded; therefore a loop with parameters like current image or number of images were added to the application. On this way the content of shared memory after executing the application is the one shown on Figure 2:
|
|
Motion JPEG Decoder application is located in the folder ./c_prog/motionjpeg_mmips of the package.