And should I create vertices for all of my objects and use sceGuDrawArray 1 time or can I just call this function many times? What would be the perfomance impact?
Its drawing an array of pixels with the GU at once. i.e. one vertical line at a time. Slice is the current vertical line its drawing from your source image.
Not quite. It's more than one vertical line. It's because the texture cache inside the GU is limited. Depending on the pixel format, the cache will only hold from 128x128 for 16 color LUT mode to 32x64 for 32 bit ARGB. If you try to draw wider than what fits in the cache, the GU will stall while the cache reloads, and since that would happen on every line, your rendering speed would plummet. So you only make it "slice" wide so that all the lines fit in the cache for much faster rendering speed. Slice has been chosen for 32 bit modes, but you can change that if you use different pixel formats. I do in Basilisk 2. Just seach ps2dev for texture cache for a more complete explanation as well as the exact size that fits in the cache.