Skip to content

Commit

Permalink
Merge pull request #3 from Cloudslab/dev
Browse files Browse the repository at this point in the history
Dev: Update the README
  • Loading branch information
hoaiocom authored Aug 17, 2023
2 parents fc1a7b4 + bd48cb7 commit 0b80d8e
Show file tree
Hide file tree
Showing 61 changed files with 151 additions and 117 deletions.
70 changes: 52 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,43 +3,77 @@

## A Toolkit for Modeling and Simulation of Quantum Computing Environments

As quantum computers become increasingly accessible through
cloud services and potentially edge networks, the demand for efficient resource
management strategies and service models has grown.
iQuantum is a pioneering simulation toolkit (based on CloudSim) designed to model hybrid quantum-classical
computing environments, enabling researchers to prototype and evaluate system design and
resource management algorithms. iQuantum addresses the challenges posed by the limited
availability and accessibility of quantum resources, catalyzing research in
quantum software and systems.
As quantum computers become increasingly accessible through
cloud services and potentially extending to the edge networks in the future, the demand for efficient resource
management strategies is paramount to ensure the efficient utilization of quantum computing resources.
However, the limitations of employing practical quantum computing resources and the lack of
quantum environments modeling toolkits have hindered the design and evaluation of quantum resource management policies.
To address this challenge, we propose iQuantum, a lightweight and versatile discrete-event modeling and simulation toolkit (based on CloudSim)
for quantum computing environments. iQuantum provides a set of quantum computing entities can be customized and extended to
support a wide range of different hybrid quantum computing environments, support research in quantum resource management, and prototyping of quantum computing systems.

<center>
<img alt="iQuantum Overview" src="documentation/figures/iQuantum-Overview.png" title="iQuantum Overview" width="500px"/>
</center>


## Main Features
The iQuantum project aims to boost research in quantum software and systems,
particularly focusing on resource management, job scheduling, qubit mapping, and
The iQuantum project aims to facilitate research in quantum software and systems,
particularly focusing on resource management, job scheduling, and hybrid
task orchestration in quantum computing environments that
integrate cloud-based resources.
- Modeling quantum computing environments with cloud-based resources: Quantum Datacenters (QDatacenter),
Quantum Computers (QNode), QPU, Quantum Tasks (QTask), and Quantum Broker (QBroker).
- Modeling QTask scheduling algorithms for quantum computing environments.
- Modeling qubit mapping algorithms for quantum computing environments.
integrate cloud and edge computing resources.
- Modeling quantum computing entities: Quantum Datacenters (QDatacenter),
Quantum Computers (QNode), QPU, Quantum Tasks (QTask), and Quantum Broker (QBroker).
- Modeling classical computing entities: Classical Datacenters (CDatacenter),
Classical Computers (CNode), CPU, Classical Tasks (CTask), and Classical Broker (CBroker).
- Modeling Gateways and offloading policies from edge to cloud layer.
- Modeling QTask scheduling, qubit mapping, and quantum node selection policies for quantum computing environments.
- Modeling Hybrid Quantum-Classical Task Orchestration in the Cloud-Edge Continuum.
- Importing quantum nodes and workload dataset (from calibration data and QASM files) and exporting simulation results.

## Download and Using
## Setup and Using
Please refer to the [Release page](https://github.com/Cloudslab/iQuantum/releases) to access the latest release of iQuantum (1.0.0-beta).
The downloaded package contains the main jar file (`iquantum-1.0.0-beta.jar`) and the entire source code of iQuantum.
### Prerequisites
### Prerequisites
- Java SDK 17+ ([corretto-17](https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/downloads-list.html) is recommended).
- [Apache Maven](https://maven.apache.org/download.cgi) (All library management and build automation in iQuantum are handled by Maven; version 3.9+ is recommended)
- [IntelliJ IDEA](https://www.jetbrains.com/idea/) (latest version, 2023+) is highly recommended for customizing the source code (e.g., resource management policies or other entities)

### Building from Source
To build iQuantum from source, please follow these steps:
1. Clone the iQuantum repository to your local machine.
2. Open the project in IntelliJ IDEA.
3. Build the project using Maven.
4. The built jar file (`iquantum-1.0.0-beta.jar`) will be located in the `/modules/iquantum/target` folder.
5. Add the built jar file to your project's classpath.
6. You are ready to use iQuantum in your project.

### Modeling and Simulation Workflow
The simulation workflow of iQuantum is illustrated in the following figure.
<img alt="iQuantum Workflow" src="documentation/figures/iQuantumFlow.png" title="iQuantum Workflow" width="400"/>
1. **Modeling**: The user defines the quantum computing environment (e.g., quantum datacenters, quantum computers, quantum tasks, and quantum brokers) using the iQuantum entities.
- Quantum tasks and quantum nodes can be modeled manually or automatically by importing from dataset (.csv), which can be generated from QASM files for quantum tasks (e.g., using [MQT Bench](https://www.cda.cit.tum.de/mqtbench/)) and system calibration datasheet (e.g., from [IBM Quantum](https://quantum-computing.ibm.com/lab/docs/iql/manage/systems/configuration)).
- Resource management policies (scheduling, mapping, backend selection, and offloading) can be customized by extending the corresponding classes (in `org.iquantum.policies` package).
2. **Environment Setup**: The user defines the simulation parameters and start the simulation.
3. **Simulation**: The discrete-event simulation engine of iQuantum simulates the events in the quantum computing environment (e.g., task submission, task execution, task completion, etc.), based on the defined resource management policies.
4. **Generating the results**: The simulation results (e.g., task execution time, backend allocation, cost of execution, etc.) can be shown or exported to a .csv file for further analysis.

### Examples of Operation
Several examples that demonstrate the use of iQuantum can be found in the `org.iquantum.examples` package, located in the `/modules/iquantum-examples` folder.

![iQuantum Example](documentation/figures/examples.jpg "iQuantum Example")
- `quantum`: Examples of modeling quantum computing environments.
- `cloudsim`: Examples of modeling classical cloud computing environments (derived from CloudSim).
- `hybrid`: Examples of modeling hybrid quantum-classical computing environments in cloud and edge layers.
- `experimental`: Experimental examples of extending iQuantum with new features.


## Contributing
Pull requests are welcome.
Pull requests are welcome.
For major changes, please open an issue first to discuss what you would like to change.

## References
[1] Hoa T. Nguyen, Muhammad Usman, and Rajkumar Buyya, iQuantum: A Case for Modeling and Simulation of Quantum Computing Environments, Proceedings of the 2023 IEEE International Conference on Quantum Software (QSW 2023, IEEE CS Press, USA), Chicago, USA, July 2-8, 2023.

## License
[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html)
Original file line number Diff line number Diff line change
@@ -1 +1 @@
a7b1ecd648597deda8923b1867e08f21
bb052251334418fda0c3c68b1696e760
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6b3e438416c0d2ec28134153d94922de3d9238ed
40a60362b20f2608c1edb8e67a2f0567b15b504a
Original file line number Diff line number Diff line change
@@ -1 +1 @@
c5d9f43811d0ec7de7ccf261b9c66bae
f0b61dc2d4faedf18e497a2912b28c64
Original file line number Diff line number Diff line change
@@ -1 +1 @@
84cf97442460d3b49faa8d7c025586770b9b14a2
5c16aeb226cf49e0fe020cf8a73d8b9cec588c68
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
<versions>
<version>1.0</version>
</versions>
<lastUpdated>20230817023627</lastUpdated>
<lastUpdated>20230817034324</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
9517e998539e23aedefac954e6d93b4b
8b3b18d349d384c9bd489352a370b5ac
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0cd34faad5ab2ba9d446a7ace61863bd5bd21f08
71703df67f48e6aebc6b1d47fdf7ec2b787d5d42
Binary file added documentation/figures/examples.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added documentation/figures/iQuantum-Overview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added documentation/figures/iQuantumFlow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
<versions>
<version>1.0</version>
</versions>
<lastUpdated>20230817023624</lastUpdated>
<lastUpdated>20230817034321</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1e523746446efc8fa65779aa942b213d
01a1addb3126e34b644ef7ae7710d3ce
Original file line number Diff line number Diff line change
@@ -1 +1 @@
060ef9217f065d24b0a462d46439ca65bb16fd97
604db31b0d8151e1e15ad2749607ce4fe25cf9b4
Original file line number Diff line number Diff line change
@@ -1 +1 @@
9195a541622a0f9d4a3fe28ceb3cd4e6
9d5ff0d696532df7a81fd1556f32cea0
Original file line number Diff line number Diff line change
@@ -1 +1 @@
592d7d017385d4bb9969b7687dd0e6acc0f00c70
fd354fa7e3711e48b41d261e43994267c03f1ae5
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0c007f5446edd602bbe8f04321f71f1d
7a468247265e9377b2d59385edf18603
Original file line number Diff line number Diff line change
@@ -1 +1 @@
69e1cf7fee2f10fe7a25c81e39f51210ac494c0c
72d1128cb1cc11aa5383d8c2f12cc9c1ae0eef78
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<configuration>
<archive>
<manifest>
<mainClass>org.iquantum.examples.qcloudedge.iQuantumCloudEdgeExample3</mainClass>
<mainClass>org.iquantum.examples.hybrid.iQuantumHybridExample4</mainClass>
</manifest>
</archive>
</configuration>
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2573bb9fbbed63fb2d0eaf96fc43a297
c7d088fae880aaa9a9a936222e6b8800
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22c1c9d2ad7a55031e4f80021ea20b3302fd7304
4770c0aa2c53d537930e6f18be3af3f4334106d6
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
<versions>
<version>1.0</version>
</versions>
<lastUpdated>20230817023624</lastUpdated>
<lastUpdated>20230817034321</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
f73116ec617673ff36ae412551e4cb15
a8603b6c19e6666e624aa174dd21e48d
Original file line number Diff line number Diff line change
@@ -1 +1 @@
588df67d3876b7d1adfda9c7199592f5fa2026e3
26b1a30919d9b4db740b2ed9ee64f586911a1a6b
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0588b92c5694e667b738554fc915e718
f8d081e8e0a9b87457501a7465189b74
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3e8e68db9ae12976e72732e3e33d922ed1439c81
58566b72619e72455fe7b6f74842c5503d59d2e4
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
<versions>
<version>1.0</version>
</versions>
<lastUpdated>20230817023622</lastUpdated>
<lastUpdated>20230817034320</lastUpdated>
</versioning>
</metadata>
Original file line number Diff line number Diff line change
@@ -1 +1 @@
967b73e54ac3d2a4cad6167963ec9ade
1ec5462407a001bc4fd54f832bee6dd2
Original file line number Diff line number Diff line change
@@ -1 +1 @@
327d17ad83133bfa8acd23557d40288729a676b8
e28c9aa44fa97f5991bd0ef3e49eaea4dac5e11a
40 changes: 20 additions & 20 deletions modules/iquantum/target/maven-javadoc-plugin-stale-data.txt
Original file line number Diff line number Diff line change
Expand Up @@ -103,24 +103,24 @@ org.iquantum.distributions
/Users/biboo/.m2/repository/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar = 1681182728742
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/src/main/java/.DS_Store = 1681275293143
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/src/main/java = 1688726692432
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/constant-values.html = 1692239780262
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/tag-search-index.js = 1692239780892
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/overview-tree.html = 1692239780702
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/module-search-index.js = 1692239780887
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/index.html = 1692239780705
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/package-search-index.js = 1692239780887
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/jquery-ui.overrides.css = 1692239781013
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/serialized-form.html = 1692239780284
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/index-all.html = 1692239781003
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/allpackages-index.html = 1692239780886
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/deprecated-list.html = 1692239780704
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/member-search-index.js = 1692239780892
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/script.js = 1692239781010
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/stylesheet.css = 1692239781010
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/overview-summary.html = 1692239781007
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/help-doc.html = 1692239781009
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/element-list = 1692239780160
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/constant-values.html = 1692243798022
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/tag-search-index.js = 1692243798713
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/overview-tree.html = 1692243798489
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/module-search-index.js = 1692243798705
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/index.html = 1692243798494
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/package-search-index.js = 1692243798705
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/jquery-ui.overrides.css = 1692243798842
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/serialized-form.html = 1692243798047
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/index-all.html = 1692243798834
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/allpackages-index.html = 1692243798704
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/deprecated-list.html = 1692243798492
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/member-search-index.js = 1692243798712
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/script.js = 1692243798839
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/stylesheet.css = 1692243798839
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/overview-summary.html = 1692243798836
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/help-doc.html = 1692243798838
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/element-list = 1692243797925
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/search.html = 1690257661781
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/allclasses-index.html = 1692239780885
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/type-search-index.js = 1692239780887
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/search.js = 1692239781010
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/allclasses-index.html = 1692243798703
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/type-search-index.js = 1692243798706
/Users/biboo/Projects/iquantum/iQuantum/modules/iquantum/target/apidocs/search.js = 1692243798840
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite tests="15" failures="0" name="org.iquantum.CloudletSchedulerSingleServiceTest" time="0.011" errors="0" skipped="0">
<testsuite tests="15" failures="0" name="org.iquantum.CloudletSchedulerSingleServiceTest" time="0.013" errors="0" skipped="0">
<properties>
<property name="idea.version" value="2023.1.3"/>
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
Expand Down Expand Up @@ -61,19 +61,19 @@
<property name="socksNonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
<property name="ftp.nonProxyHosts" value="local|*.local|169.254/16|*.169.254/16"/>
</properties>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testCTaskSubmitHighUtilization" time="0.01"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testCTaskSubmitHighUtilization" time="0.011"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetUnderAllocatedMips" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testCTaskSubmitLowUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetTotalUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testUpdateVmProcessingHighUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetNumberOfPes" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetMips" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetMips" time="0.001"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetTotalCurrentMips" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testCTaskFinish" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetEstimatedFinishTimeHighUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testUpdateVmProcessingLowUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetEstimatedFinishTimeLowUtilization" time="0.001"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetEstimatedFinishTimeLowUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetCurrentRequestedMips" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testUpdateVmProcessingLowAndHighUtilization" time="0"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testUpdateVmProcessingLowAndHighUtilization" time="0.001"/>
<testcase classname="org.iquantum.CloudletSchedulerSingleServiceTest" name="testGetTotalCurrentMipsForCloudlet" time="0"/>
</testsuite>
Loading

0 comments on commit 0b80d8e

Please sign in to comment.