# The meaning of 'Pool' in Computer Science

While reading about SIMD on Wikipedia, I noticed the use of the technical term Pool in the figure below:

I didn't know what it means; so after searching for it, I found only this article. Yet the definition wasn't very clear to me:

In computer science, a pool is a set of resources that are kept ready to use, rather than acquired on use and released afterwards. In this context, resources can refer to system resources such as file handles, which are external to a process, or internal resources such as objects

This is not the first time since I have seen the term - I found it on other CS-related materials in the past as well.

Does anyone have any idea about the meaning of 'Pool' in CS? or can provide any reference?

A pool is basically some grouping. It's kinda vague.

In that figure, the "data pool" is just some set of data while the "instruction pool" is just some set of instructions. The figure means to show that a single instruction and multiple data go into the vector unit at a time, and then that single instruction is applied to each of the multiple data independently.

### On the "pooling" design strategy

I clicked the link to "Pool (computer science)", Wikipedia. That article's worded a bit confusingly because it's talking about a design strategy called "pooling" rather than discussing the term "pool" itself.

Pooling is when a resource is collected up into a pool for some reason. Because it's such a vague term, it can apply in a lot of different situations, so it's hard to give a more specific description without overstating it.

But to give a common example, there's thread pooling in which a bunch of threads are kept alive-and-waiting to do jobs. This pattern's often useful when you might have a bunch of little jobs that you want to run on different CPU cores. Then, whenever you want to run a job, you pick an available thread from the thread pool and have it run the job.

In principle, you don't actually need a thread pool; you could instead create a new thread each time you want to run a new job. The problem's that threads can be expensive to create and dismiss, so if you're running a bunch of little jobs, it's often highly inefficient to keep creating/releasing threads.

That said, "pooling" is unrelated to what the SIMD diagram was referring to as a "data pool" and "instruction pool". In that diagram, they just meant that they had a bunch of things data and instructions to use on them, which they vaguely referred to as existing in pools.

• Just to confuse things further, it's unusual to separately "pool" instructions and data as the inputs to a modern functional unit. Rather, instructions are stored with the parameters which are already known, ready to issue as soon as a functional unit and/or final parameter becomes available. See, for example en.wikipedia.org/wiki/Reservation_station – Pseudonym Jan 7 '18 at 1:37