Update DB to version 15: Machines can have an arbitrary number of processors,

so use an interconnection table, `processors_by_machine`.
This commit is contained in:
2018-04-28 13:16:53 +01:00
parent d8127630b3
commit 02b9981681
12 changed files with 853 additions and 599 deletions

View File

@@ -87,466 +87,245 @@
</td>
</tr>
}
<tr>
<th scope=row>
<div align=right>
Primary processor
</div>
</th>
@if(Model.Cpu1 != null)
{
<td>
@if(Model.Mhz1 > 0) { @(Model.Cpu1.GprSize > 0 ? $"{Model.Cpu1.Name} @ {Model.Mhz1}Mhz ({Model.Cpu1.GprSize} bits)" : $"{Model.Cpu1.Name} @ {Model.Mhz1}Mhz") }
else
{ @($"{Model.Cpu1.Name}") }
<a aria-controls="cpuInfo"
aria-expanded="false"
class="btn btn-link"
data-toggle="collapse"
href="#cpuInfo">
+info
</a>
<div class="collapse"
id="cpuInfo">
<div class="card card-body">
<table>
@if(Model.Cpu1.ModelCode != null && Model.Cpu1.ModelCode != Model.Cpu1.Name)
{
<tr>
<td>Model</td>
<td>@Model.Cpu1.ModelCode</td>
</tr>
}
<tr>
<td>Manufacturer</td>
<td>
<a asp-controller=Company
asp-action=View
asp-route-id=@Model.Cpu1.Company.Id>
@Model.Cpu1.Company.Name</a>
</td>
</tr>
@if(Model.Cpu1.Introduced != DateTime.MinValue)
{
<tr>
<td>Introduction date</td>
<td>@($"{Model.Cpu1.Introduced:yyyy}")</td>
</tr>
}
@if(Model.Cpu1.InstructionSet != null)
{
<tr>
<td>Instruction set</td>
<td>@Model.Cpu1.InstructionSet.Name</td>
</tr>
}
@if(Model.Cpu1.Speed > 0)
{
<tr>
<td>Nominal speed</td>
<td>@Model.Cpu1.Speed MHz</td>
</tr>
}
@if(Model.Cpu1.Gpr > 0 || Model.Cpu1.Fpr > 0 || Model.Cpu1.Simd > 0)
{
<tr>
<td>Registers</td>
<td>
<table>
@if(Model.Cpu1.Gpr > 0)
{
<tr>
<td>
@Model.Cpu1.Gpr general purpose registers of @Model.Cpu1.GprSize bits
@if(Model.Cpu1.FprSize > 0 && Model.Cpu1.Fpr == 0) { @($", that can be used as floating point registers of {Model.Cpu1.FprSize}") }
@if(Model.Cpu1.SimdSize > 0 && Model.Cpu1.Simd == 0) { @($", that can be used as SIMD registers of {Model.Cpu1.FprSize}") }
</td>
</tr>
}
@if(Model.Cpu1.Fpr > 0)
{
<tr>
<td>
@Model.Cpu1.Fpr floating-point registers of @Model.Cpu1.FprSize bits
@if(Model.Cpu1.SimdSize > 0 && Model.Cpu1.Simd == 0) { @($", that can be used as SIMD registers of {Model.Cpu1.FprSize}") }
</td>
</tr>
}
@if(Model.Cpu1.Simd > 0)
{
<tr>
<td>
@Model.Cpu1.Simd <abbr title="Single instruction, multiple data">SIMD</abbr>registers of @Model.Cpu1.SimdSize bits
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Cpu1.Cores > 1)
{
<tr>
<td>Multi-core</td>
<td>@Model.Cpu1.Cores cores</td>
</tr>
}
@if(Model.Cpu1.Cores > 1)
{
<tr>
<td>
<abbr title="Simultanoeus multithreading">SMT</abbr>
</td>
<td>
@Model.Cpu1.ThreadsPerCore threads
@if(Model.Cpu1.Cores > 1) { @(" per core") }
</td>
</tr>
}
@if(Model.Cpu1.DataBus > 0 || Model.Cpu1.AddressBus > 0)
{
<tr>
<td>Bus</td>
<td>
<table>
@if(Model.Cpu1.DataBus > 0)
{
<tr>
<td>
@Model.Cpu1.DataBus-bit data
</td>
</tr>
}
@if(Model.Cpu1.AddressBus > 0)
{
<tr>
<td>
@Model.Cpu1.AddressBus-bit address
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Cpu1.L1Instruction > 0 || Model.Cpu1.L1Data > 0 || Model.Cpu1.L2 > 0 || Model.Cpu1.L2 > 0)
{
<tr>
<td>Cache</td>
<td>
<table>
@if(Model.Cpu1.L1Instruction > 0)
{
<tr>
<td>
@(Model.Cpu1.L1Data < 0 ? $"{Model.Cpu1.L1Instruction}KiB combined instruction-data L1" : $"{Model.Cpu1.L1Instruction}KiB instruction L1")
</td>
</tr>
}
@if(Model.Cpu1.L1Data > 0)
{
<tr>
<td>
@($"{Model.Cpu1.L1Data}KiB data L1")
</td>
</tr>
}
@if(Model.Cpu1.L2 > 0)
{
<tr>
<td>
@($"{Model.Cpu1.L2}KiB L2")
</td>
</tr>
}
@if(Model.Cpu1.L3 > 0)
{
<tr>
<td>
@($"{Model.Cpu1.L3}KiB L3")
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Cpu1.Package != null)
{
<tr>
<td>Package</td>
<td>@Model.Cpu1.Package</td>
</tr>
}
@if(Model.Cpu1.Process != null || Model.Cpu1.ProcessNm > 0)
{
<tr>
<td>Manufacturing process</td>
<td>
@if(Model.Cpu1.Process != null && Model.Cpu1.ProcessNm > 0)
{
@Model.Cpu1.Process
@("@")
@(Model.Cpu1.ProcessNm > 100 ? $"{Model.Cpu1.ProcessNm / 100}µm" : $"{Model.Cpu1.ProcessNm}nm")
}
else if(Model.Cpu1.ProcessNm > 0) { @(Model.Cpu1.ProcessNm > 100 ? $"{Model.Cpu1.ProcessNm / 100}µm" : $"{Model.Cpu1.ProcessNm}nm") }
else
{ @Model.Cpu1.Process }
</td>
</tr>
}
@if(Model.Cpu1.DieSize > 0)
{
<tr>
<td>Die size</td>
<td>@Model.Cpu1.DieSize mm&sup2;</td>
</tr>
}
@if(Model.Cpu1.Transistors > 0)
{
<tr>
<td>Transistors</td>
<td>@Model.Cpu1.Transistors</td>
</tr>
}
</table>
</div>
</div>
</td>
}
else
{
<td>Unknown data</td>
}
</tr>
@if(Model.Cpu2 != null)
@if(Model.Processors != null && Model.Processors.Length > 0)
{
<tr>
<th scope=row>
<div align=right>
Secondary processor
Processors
</div>
</th>
<td>
@if(Model.Mhz1 > 0) { @(Model.Cpu2.GprSize > 0 ? $"{Model.Cpu2.Name} @ {Model.Mhz1}Mhz ({Model.Cpu2.GprSize} bits)" : $"{Model.Cpu2.Name} @ {Model.Mhz1}Mhz") }
else
{ @($"{Model.Cpu2.Name}") }
<a aria-controls="cpuInfo"
aria-expanded="false"
class="btn btn-link"
data-toggle="collapse"
href="#cpu2Info">
+info
</a>
<div class="collapse"
id="cpu2Info">
<div class="card card-body">
<table>
@if(Model.Cpu2.ModelCode != null && Model.Cpu2.ModelCode != Model.Cpu2.Name)
@for(int i = 0; i < Model.Processors.Length; i++)
{
<tr>
<td>Model</td>
<td>@Model.Cpu2.ModelCode</td>
</tr>
}
<tr>
<td>Manufacturer</td>
<td>
<a asp-controller=Company
asp-action=View
asp-route-id=@Model.Cpu2.Company.Id>
@Model.Cpu2.Company.Name</a>
</td>
</tr>
@if(Model.Cpu2.Introduced != DateTime.MinValue)
{
<tr>
<td>Introduction date</td>
<td>@($"{Model.Cpu2.Introduced:yyyy}")</td>
</tr>
}
@if(Model.Cpu2.InstructionSet != null)
{
<tr>
<td>Instruction set</td>
<td>@Model.Cpu2.InstructionSet.Name</td>
</tr>
}
@if(Model.Cpu2.Speed > 0)
{
<tr>
<td>Nominal speed</td>
<td>@Model.Cpu2.Speed MHz</td>
</tr>
}
@if(Model.Cpu2.Gpr > 0 || Model.Cpu2.Fpr > 0 || Model.Cpu2.Simd > 0)
{
<tr>
<td>Registers</td>
if(Model.Processors[i] != null)
{
<tr>
<td>
<table>
@if(Model.Cpu2.Gpr > 0)
{
<tr>
<td>
@Model.Cpu2.Gpr general purpose registers of @Model.Cpu2.GprSize bits
@if(Model.Cpu2.FprSize > 0 && Model.Cpu2.Fpr == 0) { @($", that can be used as floating point registers of {Model.Cpu2.FprSize}") }
@if(Model.Cpu2.SimdSize > 0 && Model.Cpu2.Simd == 0) { @($", that can be used as SIMD registers of {Model.Cpu2.FprSize}") }
</td>
</tr>
}
@if(Model.Cpu2.Fpr > 0)
{
<tr>
<td>
@Model.Cpu2.Fpr floating-point registers of @Model.Cpu2.FprSize bits
@if(Model.Cpu2.SimdSize > 0 && Model.Cpu2.Simd == 0) { @($", that can be used as SIMD registers of {Model.Cpu2.FprSize}") }
</td>
</tr>
}
@if(Model.Cpu2.Simd > 0)
{
<tr>
<td>
@Model.Cpu2.Simd <abbr title="Single instruction, multiple data">SIMD</abbr>registers of @Model.Cpu2.SimdSize bits
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Cpu2.Cores > 1)
{
<tr>
<td>Multi-core</td>
<td>@Model.Cpu2.Cores cores</td>
</tr>
}
@if(Model.Cpu2.Cores > 1)
{
<tr>
<td>
<abbr title="Simultanoeus multithreading">SMT</abbr>
</td>
<td>
@Model.Cpu2.ThreadsPerCore threads
@if(Model.Cpu2.Cores > 1) { @(" per core") }
</td>
</tr>
}
@if(Model.Cpu2.DataBus > 0 || Model.Cpu2.AddressBus > 0)
{
<tr>
<td>Bus</td>
<td>
<table>
@if(Model.Cpu2.DataBus > 0)
{
<tr>
<td>
@Model.Cpu2.DataBus-bit data
</td>
</tr>
}
@if(Model.Cpu2.AddressBus > 0)
{
<tr>
<td>
@Model.Cpu2.AddressBus-bit address
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Processors[i].Speed > 0) { @(Model.Processors[i].Processor.GprSize > 0 ? $"{Model.Processors[i].Processor.Name} @ {Model.Processors[i].Speed}Mhz ({Model.Processors[i].Processor.GprSize} bits)" : $"{Model.Processors[i].Processor.Name} @ {Model.Processors[i].Speed}Mhz") }
else
{ @($"{Model.Processors[i].Processor.Name}") }
<a aria-controls="@($"cpuInfo{i}")"
aria-expanded="false"
class="btn btn-link"
data-toggle="collapse"
href="@($"#cpuInfo{i}")">
+info
</a>
<div class="collapse"
id="@($"cpuInfo{i}")">
<div class="card card-body">
<table>
@if(Model.Processors[i].Processor.ModelCode != null && Model.Processors[i].Processor.ModelCode != Model.Processors[i].Processor.Name)
{
<tr>
<td>Model</td>
<td>@Model.Processors[i].Processor.ModelCode</td>
</tr>
}
<tr>
<td>Manufacturer</td>
<td>
<a asp-controller=Company
asp-action=View
asp-route-id=@Model.Processors[i].Processor.Company.Id>
@Model.Processors[i].Processor.Company.Name</a>
</td>
</tr>
@if(Model.Processors[i].Processor.Introduced != DateTime.MinValue)
{
<tr>
<td>Introduction date</td>
<td>@($"{Model.Processors[i].Processor.Introduced:yyyy}")</td>
</tr>
}
@if(Model.Processors[i].Processor.InstructionSet != null)
{
<tr>
<td>Instruction set</td>
<td>@Model.Processors[i].Processor.InstructionSet.Name</td>
</tr>
}
@if(Model.Processors[i].Processor.Speed > 0)
{
<tr>
<td>Nominal speed</td>
<td>@Model.Processors[i].Processor.Speed MHz</td>
</tr>
}
@if(Model.Processors[i].Processor.Gpr > 0 || Model.Processors[i].Processor.Fpr > 0 || Model.Processors[i].Processor.Simd > 0)
{
<tr>
<td>Registers</td>
<td>
<table>
@if(Model.Processors[i].Processor.Gpr > 0)
{
<tr>
<td>
@Model.Processors[i].Processor.Gpr general purpose registers of @Model.Processors[i].Processor.GprSize bits
@if(Model.Processors[i].Processor.FprSize > 0 && Model.Processors[i].Processor.Fpr == 0) { @($", that can be used as floating point registers of {Model.Processors[i].Processor.FprSize}") }
@if(Model.Processors[i].Processor.SimdSize > 0 && Model.Processors[i].Processor.Simd == 0) { @($", that can be used as SIMD registers of {Model.Processors[i].Processor.FprSize}") }
</td>
</tr>
}
@if(Model.Processors[i].Processor.Fpr > 0)
{
<tr>
<td>
@Model.Processors[i].Processor.Fpr floating-point registers of @Model.Processors[i].Processor.FprSize bits
@if(Model.Processors[i].Processor.SimdSize > 0 && Model.Processors[i].Processor.Simd == 0) { @($", that can be used as SIMD registers of {Model.Processors[i].Processor.FprSize}") }
</td>
</tr>
}
@if(Model.Processors[i].Processor.Simd > 0)
{
<tr>
<td>
@Model.Processors[i].Processor.Simd <abbr title="Single instruction, multiple data">SIMD</abbr>registers of @Model.Processors[i].Processor.SimdSize bits
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Processors[i].Processor.Cores > 1)
{
<tr>
<td>Multi-core</td>
<td>@Model.Processors[i].Processor.Cores cores</td>
</tr>
}
@if(Model.Processors[i].Processor.Cores > 1)
{
<tr>
<td>
<abbr title="Simultanoeus multithreading">SMT</abbr>
</td>
<td>
@Model.Processors[i].Processor.ThreadsPerCore threads
@if(Model.Processors[i].Processor.Cores > 1) { @(" per core") }
</td>
</tr>
}
@if(Model.Processors[i].Processor.DataBus > 0 || Model.Processors[i].Processor.AddressBus > 0)
{
<tr>
<td>Bus</td>
<td>
<table>
@if(Model.Processors[i].Processor.DataBus > 0)
{
<tr>
<td>
@Model.Processors[i].Processor.DataBus-bit data
</td>
</tr>
}
@if(Model.Processors[i].Processor.AddressBus > 0)
{
<tr>
<td>
@Model.Processors[i].Processor.AddressBus-bit address
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Cpu2.L1Instruction > 0 || Model.Cpu2.L1Data > 0 || Model.Cpu2.L2 > 0 || Model.Cpu2.L2 > 0)
{
<tr>
<td>Cache</td>
<td>
<table>
@if(Model.Cpu2.L1Instruction > 0)
{
<tr>
<td>
@(Model.Cpu2.L1Data < 0 ? $"{Model.Cpu2.L1Instruction}KiB combined instruction-data L1" : $"{Model.Cpu2.L1Instruction}KiB instruction L1")
</td>
</tr>
}
@if(Model.Cpu2.L1Data > 0)
{
<tr>
<td>
@($"{Model.Cpu2.L1Data}KiB data L1")
</td>
</tr>
}
@if(Model.Cpu2.L2 > 0)
{
<tr>
<td>
@($"{Model.Cpu2.L2}KiB L2")
</td>
</tr>
}
@if(Model.Cpu2.L3 > 0)
{
<tr>
<td>
@($"{Model.Cpu2.L3}KiB L3")
</td>
</tr>
}
</table>
@if(Model.Processors[i].Processor.L1Instruction > 0 || Model.Processors[i].Processor.L1Data > 0 || Model.Processors[i].Processor.L2 > 0 || Model.Processors[i].Processor.L2 > 0)
{
<tr>
<td>Cache</td>
<td>
<table>
@if(Model.Processors[i].Processor.L1Instruction > 0)
{
<tr>
<td>
@(Model.Processors[i].Processor.L1Data < 0 ? $"{Model.Processors[i].Processor.L1Instruction}KiB combined instruction-data L1" : $"{Model.Processors[i].Processor.L1Instruction}KiB instruction L1")
</td>
</tr>
}
@if(Model.Processors[i].Processor.L1Data > 0)
{
<tr>
<td>
@($"{Model.Processors[i].Processor.L1Data}KiB data L1")
</td>
</tr>
}
@if(Model.Processors[i].Processor.L2 > 0)
{
<tr>
<td>
@($"{Model.Processors[i].Processor.L2}KiB L2")
</td>
</tr>
}
@if(Model.Processors[i].Processor.L3 > 0)
{
<tr>
<td>
@($"{Model.Processors[i].Processor.L3}KiB L3")
</td>
</tr>
}
</table>
</td>
</tr>
}
@if(Model.Processors[i].Processor.Package != null)
{
<tr>
<td>Package</td>
<td>@Model.Processors[i].Processor.Package</td>
</tr>
}
@if(Model.Processors[i].Processor.Process != null || Model.Processors[i].Processor.ProcessNm > 0)
{
<tr>
<td>Manufacturing process</td>
<td>
@if(Model.Processors[i].Processor.Process != null && Model.Processors[i].Processor.ProcessNm > 0)
{
@Model.Processors[i].Processor.Process
@("@")
@(Model.Processors[i].Processor.ProcessNm > 100 ? $"{Model.Processors[i].Processor.ProcessNm / 100}µm" : $"{Model.Processors[i].Processor.ProcessNm}nm")
}
else if(Model.Processors[i].Processor.ProcessNm > 0) { @(Model.Processors[i].Processor.ProcessNm > 100 ? $"{Model.Processors[i].Processor.ProcessNm / 100}µm" : $"{Model.Processors[i].Processor.ProcessNm}nm") }
else
{ @Model.Processors[i].Processor.Process }
</td>
</tr>
}
@if(Model.Processors[i].Processor.DieSize > 0)
{
<tr>
<td>Die size</td>
<td>@Model.Processors[i].Processor.DieSize mm&sup2;</td>
</tr>
}
@if(Model.Processors[i].Processor.Transistors > 0)
{
<tr>
<td>Transistors</td>
<td>@Model.Processors[i].Processor.Transistors</td>
</tr>
}
</table>
</div>
</div>
</td>
</tr>
}
@if(Model.Cpu2.Package != null)
{
<tr>
<td>Package</td>
<td>@Model.Cpu2.Package</td>
</tr>
}
@if(Model.Cpu2.Process != null || Model.Cpu2.ProcessNm > 0)
{
<tr>
<td>Manufacturing process</td>
<td>
@if(Model.Cpu2.Process != null && Model.Cpu2.ProcessNm > 0)
{
@Model.Cpu2.Process
@("@")
@(Model.Cpu2.ProcessNm > 100 ? $"{Model.Cpu2.ProcessNm / 100}µm" : $"{Model.Cpu2.ProcessNm}nm")
}
else if(Model.Cpu2.ProcessNm > 0) { @(Model.Cpu2.ProcessNm > 100 ? $"{Model.Cpu2.ProcessNm / 100}µm" : $"{Model.Cpu2.ProcessNm}nm") }
else
{ @Model.Cpu2.Process }
</td>
</tr>
}
@if(Model.Cpu2.DieSize > 0)
{
<tr>
<td>Die size</td>
<td>@Model.Cpu2.DieSize mm&sup2;</td>
</tr>
}
@if(Model.Cpu2.Transistors > 0)
{
<tr>
<td>Transistors</td>
<td>@Model.Cpu2.Transistors</td>
</tr>
</tr>
}
}
</table>
</div>
</div>
</td>
</tr>
}