Billing
Every job consumes some resources and users are billed using the following process.
1 hour of CPU time equals 1 hour spent on a computing core with a proportional amount of memory. If the job uses more memory for each allocated CPU than the proportional amount, it will be billed as it would have used more CPUs. The billed amount can be calculated by dividing the used memory by the proportional memory per core and rounding the result to the closest and larger integer. Jobs on CPU partitions are always billed in CPU hours.
The same principle is applied to GPU resources, where the GPU-hour is a billing unit, and there are proportional memory per GPU and proportional CPUs per GPU defined.
The cost can be expressed as a simple algorithm:
\(cost\_cpu = job\_cpus\_used * job\_duration\)
\(cost\_memory = ceil ({ job\_memory\_used \over memory\_per\_cpu }) * job\_duration\)
\(final\_cost = max(cost\_cpu, cost\_memory)\)
and for GPUs, where a GPU has the respective amount of memory per GPU and CPUs per GPU, respectively:
\(cost\_gpu = job\_gpus\_used * job\_duration\)
\(cost\_cpu = ceil( { job\_cpus\_used \over cpus\_per\_gpu } ) * job\_duration\)
\(cost\_memory = ceil( { job\_memory\_used \over memory\_per\_gpu } ) * job\_duration\)
\(final\_cost = max( { cost\_gpu, cost\_cpu, cost\_memory) }\)