@misc{zigdoc_2021, url={https://ziglang.org/documentation/0.7.0/}, title = {Documentation - The Zig Programming Language}, year={2021} }, @misc{cmpxchg_2021, url={https://c9x.me/x86/html/file_module_x86_id_41.html}, title = {CMPXCHG: Compare and Exchange (x86 Instruction Set Reference)}, year={2021} }, @misc{lock_free_2019, url={https://www.internalpointers.com/post/lock-free-multithreading-atomic-operations}, title = {Lock-Free Multithreading with Atomic Operations}, year={2019} }, @misc{sutter_2007, url={https://www.youtube.com/watch?v=L7zSU9HI-6I}, title = {Machine Architecture: Things Your Programming Language Never Told You}, organization={Youtube}, year={2007} }, @article{alglave_2009, title={The Semantics of Power and ARM Multiprocessor Machine Code}, url={https://dl.acm.org/doi/proceedings/10.1145/1481839}, DOI={10.1145/1481839}, journal={DAMP '09: Proceedings of the 4th Workshop on Declarative Aspects of Multicore Programming}, author={Alglave, Jade and Fox, Anthony and Ishtiaq, Samin and O. Myreen, Magnus and Sarkar, Susmit and Sewell, Peter and Zappa Nardelli, Francesco}, year={2009}, pages={13-24} }, @misc{bell_2021, title={Operating Systems: Threads}, url={https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/4_Threads.html}, author={Bell, J.}, year={2021} }, @misc{drepper_2007, title={Memory part 2: CPU caches [LWN.net]}, url={https://lwn.net/Articles/252125/}, author={Drepper, Ulrich}, year={2007} }, @book{fabian_2018, title={Data-Oriented Design}, author={Fabian, Richard}, year={2018}, pages={5-7,261-262} }, @misc{fog_2021, title={Calling Conventions}, url={https://www.agner.org/optimize/calling_conventions.pdf}, author={Fog, Agner}, year={2021} }, @misc{jenkov_2021, title={Concurrency vs. Parallelism}, url={http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html}, author={Jenkov, Jakob}, year={2021} }, @misc{naik_2013, title={Coding for Performance: Data alignment and structures}, url={https://software.intel.com/content/www/us/en/develop/articles/coding-for-performance-data-alignment-and-structures.html}, author={Naik, Sumedh}, year={2013} }, @misc{prabhu_2021, title={Pipeline Hazards}, url={https://web.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/hazards.html}, author={Prabhu, Gurpur} }, @book{randell_2013, place={Berlin, Heidelberg}, title={The Origins of Digital Computers}, publisher={Springer Berlin / Heidelberg}, author={Randell, Brian}, year={2013}, pages={399 - 413} }, @misc{torres_2007, title={How The Cache Memory Works | Hardware Secrets}, url={https://hardwaresecrets.com/how-the-cache-memory-works/}, author={Torres, Gabriel}, year={2007} }, @misc{williams_2021, title={Memory Ordering for Atomic Operations in C++0x - C++ tutorial - developer Fusion}, url={https://www.developerfusion.com/article/138018/memory-ordering-for-atomic-operations-in-c0x/}, author={Williams, Anthony}, year={2021} }, @misc{stdatomic_2020, title={std::atomic - cppreference.com}, url={https://en.cppreference.com/w/cpp/atomic/atomic}, year={2020} }, @misc{shanthi_2021, title={Memory Hierarchy Design - Basics - Computer Architecture}, url={http://www.cs.umd.edu/~meesh/411/CA-online/chapter/memory-hierarchy-design-basics/index.html}, author={Shanthi, A. P.}, year={2021} }, @misc{mirek_2017, title={Escape Analysis - DZone Java}, url={https://dzone.com/articles/escape-analysis}, author={Mirek, Grzegorz}, year={2017} }, @misc{shinsel_2021, title={Understanding the Instruction Pipeline}, url={https://techdecoded.intel.io/resources/understanding-the-instruction-pipeline/}, author={Shinsel, Alex}, year={2021} }, @article{cheng_2013, title={Design Example of Useful Memory Latency for Developing a Hazard Preventive Pipeline High-Performance Embedded-Microprocessor}, volume={2013}, url={https://www.hindawi.com/journals/vlsi/2013/425105/}, DOI={10.1155/2013/425105}, journal={VLSI Design}, author={Cheng, Ching-Hwa}, year={2013}, pages={1-10} }, @misc{sutter_2005, title={The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software}, url={http://www.gotw.ca/publications/concurrency-ddj.htm}, author={Sutter, Herb}, year={2005} }, @misc{sutter2_2007, title={The Pillars of Concurrency}, url={https://www.drdobbs.com/parallel/the-pillars-of-concurrency/200001985}, author={Sutter, Herb}, year={2007} }, @article{sutter_larus_2005, title={Software and the Concurrency Revolution}, volume={3}, url={https://dl.acm.org/doi/10.1145/1095408.1095421}, DOI={10.1145/1095408.1095421}, number={7}, journal={Queue}, author={Sutter, Herb and Larus, James}, year={2005}, pages={54-62} }, @misc{clement_2021, title={Video Game Industry - Statistics & Facts}, url={https://www.statista.com/topics/868/video-games/#dossierSummary}, author={Clement, J.}, year={2021} }, @misc{kahle_day_hofstee_johns_shippy_2005, title={IBM JRD 49-4/5 | Introduction to the Cell multiprocessor}, url={https://web.archive.org/web/20070228043339/http://researchweb.watson.ibm.com/journal/rd/494/kahle.html}, journal={Web.archive.org}, author={Kahle, J. A. and Day, M. N. and Hofstee, H. P. and Johns, C. R. and Shippy, D.}, year={2005} }, @misc{maragos_2005, title={IBM, Sony, Toshiba Reveal Cell Processor Details}, url={https://www.gamasutra.com/view/news/95883/IBM_Sony_Toshiba_Reveal_Cell_Processor_Details.php}, author={Maragos, Nick}, year={2005} }, @misc{gaudin_2008, title={IBM's Roadrunner Smashes 4-Minute Mile of Supercomputing}, url={https://web.archive.org/web/20081224001155/http://www.computerworld.com/action/article.do?command=viewArticleBasic&taxonomyName=hardware&articleId=9095318&taxonomyId=12&intsrc=kc_top}, author={Gaudin, Sharon}, year={2008} }, @misc{krishnalal_2017, title={The Untapped Potential of the PS3’s CELL Processor And How Naughty Dog Tamed The Beast}, url={https://gamingbolt.com/the-untapped-potential-of-the-ps3s-cell-processor-and-how-naughty-dog-tamed-the-beast}, author={Krishna Lal, Arjun}, year={2017} }, @misc{turley_2021, title={A Glimpse Inside The Cell Processor}, url={https://www.gamasutra.com/view/feature/131168/a_glimpse_inside_the_cell_processor.php?print=1}, author={Turley, Jim}, year={2021} }, @misc{hyperthreading_2021, title={What Is Hyper-Threading? - Intel}, url={https://www.intel.co.uk/content/www/uk/en/gaming/resources/hyper-threading.html}, year={2021} }, @misc{alimemon_amin_2009, title={Architectural Underpinnings of the Cell Broadband Engine}, author={Ali Memon, Nabeel and Amin, Imran}, year={2009} }, @misc{amdnuma_2018, title={AMD Optimizes EPYC Memory with NUMA}, url={https://www.amd.com/system/files/2018-03/AMD-Optimizes-EPYC-Memory-With-NUMA.pdf}, year={2018} }, @misc{amddlm_2018, title={Previewing Dynamic Local Mode for the AMD Ryzen Threadripper WX Series Processors}, url={https://community.amd.com/t5/blogs/previewing-dynamic-local-mode-for-the-amd-ryzen-threadripper-wx/ba-p/416216}, year={2018} }, @misc{amddlm2_2018, title={AMD Introduces Dynamic Local Mode for Threadripper: up to 47% Performance Gain}, url={https://www.techpowerup.com/248308/amd-introduces-dynamic-local-mode-for-threadripper-up-to-47-performance-gain}, year={2018} }, @misc{memperf_2015, title={Time Between the Lines: How Memory Access Affects Performance}, url={https://bitbashing.io/memory-performance.html}, year={2015} }, @misc{schoene_hackenberg_molka_2012, title={Memory Performance at Reduced CPU Clock Speeds: An Analysis of Current x86_64 Processors}, author={Schoeone, Robert and Hackenberg, Daniel and Molka, Daniel}, url={https://www.usenix.org/system/files/conference/hotpower12/hotpower12-final5.pdf}, year={2012} }, @misc{terman_2018, title={L14: The Memory Hierarchy}, author={Terman, Chris}, url={https://computationstructures.org/lectures/caches/caches.html}, year={2018} }, @article{amdahl_1967, title={Validity of the single processor approach to achieving large scale computing capabilities}, url={https://dl.acm.org/doi/pdf/10.1145/1465482.1465560}, DOI={10.1145/1465482.1465560}, journal={Proceedings of the April 18-20, 1967, spring joint computer conference on - AFIPS '67 (Spring)}, author={Amdahl, Gene M.}, year={1967} }, @article{ashcroft_1975, title={Proving assertions about parallel programs}, volume={10}, DOI={10.1016/s0022-0000(75)80018-3}, number={1}, journal={Journal of Computer and System Sciences}, author={Ashcroft, E.A.}, year={1975}, pages={110-135} }, @book{greenlaw_hoover_ruzzo_1995, place={New York}, title={Limits to parallel computation}, publisher={Oxford University Press, Inc.}, author={Greenlaw, Raymond and Hoover, H. James and Ruzzo, Walter L}, year={1995} }, @article{welch_1984, title={A Technique for High-Performance Data Compression}, volume={17}, url={https://ieeexplore.ieee.org/document/1659158}, DOI={10.1109/mc.1984.1659158}, number={6}, journal={Computer}, author={Welch, Terry}, year={1984}, pages={8-19} }, @article{ziv_lempel_1977, title={A universal algorithm for sequential data compression}, volume={23}, url={https://ieeexplore.ieee.org/document/1055714}, DOI={10.1109/tit.1977.1055714}, number={3}, journal={IEEE Transactions on Information Theory}, author={Ziv, J. and Lempel, A.}, year={1977}, pages={337-343} }, @article{ziv_lempel_1978, title={Compression of individual sequences via variable-rate coding}, volume={24}, url={https://ieeexplore.ieee.org/document/1055934}, DOI={10.1109/tit.1978.1055934}, number={5}, journal={IEEE Transactions on Information Theory}, author={Ziv, J. and Lempel, A.}, year={1978}, pages={530-536} }, @article{pm_chezian_2014, title={Behavioral Study of Data Structures on Lempel Ziv Welch (LZW) Data Compression Algorithm and ITS Computational Complexity}, url={https://ieeexplore.ieee.org/document/6965054}, DOI={10.1109/ICICA.2014.64}, journal={IEEE Transactions on Information Theory}, author={PM., Nishad and Chezian, R. Manika}, year={2014}, pages={268-274} }, @article{mishra_mishra_pani_2012, title={Parallel Lempel-Ziv-Welch (PLZW) Technique for Data Compression}, url={http://ijcsit.com/docs/Volume%203/vol3Issue3/ijcsit2012030340.pdf}, author={Mishra, Manas Kumar and Mishra, Tapas Kumar and Pani, Alok Kumar}, year={2012}, }, @book{arora_barak_2007, place={New York}, title={Computational Complexity: A Modern Approach}, publisher={Princeton University}, author={Arora, Sanjeev and Barak, Boaz}, year={2007} }, @book{gamma_helm_johnson_vlissides_1994, title={Design Patterns: Elements of Reusable Object-Oriented Software}, publisher={Addison Wesley}, author={Gamma, Erich and Helm, Richard and Johnson, Ralph and Vlissides, John}, year={1994} }, @misc{glconcepts_2017, title={OpenGL Concepts}, url={https://www.khronos.org/opengl/wiki/Portal:OpenGL_Concepts}, year={2017} }, @misc{fog2_2021, title={Optimizing Software in C++: An Optimization Guide for Windows, Linux, and Mac Platforms}, url={https://www.agner.org/optimize/optimizing_cpp.pdf}, author={Fog, Agner}, year={2021} }, @misc{clark_2013, title={Sony's New PlayStation 4 and Open Source FreeBSD: The TRUTH}, url={https://www.theregister.com/2013/11/16/sony_playstation_4_kernel/}, year={2013} }, @book{mitchell_samuel_oldham_2001, title={Advanced Linux Programming}, publisher={Sams Publishing}, author={Mitchell, Mark and Samuel, Alex and Oldham, Jeffrey}, year={2001} }, @misc{pthreadswin32_2003, title={Why Pthreads Are Better Than Win32 Threads}, url={https://community.intel.com/t5/Intel-Moderncode-for-Parallel/Why-Pthreads-are-better-than-Win32-threads/td-p/990131}, year={2003} }, @misc{win32criticalsections_2018, title={Critical Section Objects}, url={https://docs.microsoft.com/en-us/windows/win32/sync/critical-section-objects}, year={2018} }, @misc{binstock_2011, title={Choosing Between Synchronization Primitives}, url={https://software.intel.com/content/www/us/en/develop/articles/choosing-between-synchronization-primitives.html}, author={Binstock, Andrew}, year={2011} }, @misc{stdthread_2021, title={std::thread - cppreference.com}, url={https://en.cppreference.com/w/cpp/thread/thread}, year={2021} }, @misc{sdlthread_2021, title={SDL_CreateThread - SDL Wiki}, url={https://wiki.libsdl.org/SDL_CreateThread}, year={2021} }, @misc{ousterhout_1995, title={Why Threads are a Bad Idea (For Most Purposes)}, url={https://web.stanford.edu/~ouster/cgi-bin/papers/threads.pdf}, author={Ousterhout, John}, year={1995} }, @misc{abstractionlayers_2021, title={Layers of Abstraction}, url={https://slikts.github.io/concurrency-glossary/?id=layers-of-abstraction}, year={2021} }, @article{batty_memarian_nienhuis_pichon-pharabod_sewell_2015, title={The Problem of Programming Language Concurrency Semantics}, url={https://link.springer.com/chapter/10.1007/978-3-662-46669-8_12}, DOI={10.1007/978-3-662-46669-8_12}, journal={Programming Languages and Systems}, author={Batty, Mark and Memarian, Kayvan and Nienhuis, Kyndylan and Pichon-Pharabod, Jean and Sewell, Peter}, year={2015}, pages={283-307} }, @misc{pugh_2021, title={The "Double-Checked Locking is Broken" Declaration}, url={http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html}, author={Pugh, Wiliam}, year={2021} }, @misc{aggarwal_2018, title={The Hidden Synchronized Keyword with a Static Block}, url={https://dzone.com/articles/the-hidden-synchronized-keyword-with-a-static-bloc}, author={Aggarwal, Priya}, year={2018} }, @misc{goetz_2001, title={Double-Checked Locking: Clever, But Broken}, url={https://www.infoworld.com/article/2074979/double-checked-locking--clever--but-broken.html}, author={Goetz, Brian}, year={2001} }, @misc{jenkov_2020, title={Java Volatile Keyword}, url={http://tutorials.jenkov.com/java-concurrency/volatile.html}, author={Jenkov, Jakob}, year={2020} }, @misc{javaatomic_2021, title={Atomic Access}, url={https://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html}, year={2021} }, @misc{javaloom_2021, title={Project Loom on OpenJDK Wiki}, url={https://wiki.openjdk.java.net/display/loom/Main}, year={2021} }, @misc{smith_2021, title={JEP 401: Primitive Objects (Preview)}, url={https://openjdk.java.net/jeps/401}, author={Smith, Dan}, year={2021} }, @misc{cimadamore_2021, title={JEP 393: Foreign Memory Access API (Third Incubator)}, url={https://openjdk.java.net/jeps/393}, author={Cimadamore, Maurizio}, year={2021} }, @article{li_hudak_1989, title={Memory coherence in shared virtual memory systems}, volume={7}, url={https://dl.acm.org/doi/abs/10.1145/75104.75105}, DOI={10.1145/75104.75105}, number={4}, journal={ACM Transactions on Computer Systems}, author={Li, Kai and Hudak, Paul}, year={1989}, pages={321-359} }, @article{pugh_2000, title={The Java Memory Model is Fatally Flawed}, volume={12}, DOI={10.1002/1096-9128(200005)12:6<445::aid-cpe484>3.0.co;2-a}, number={6}, journal={Concurrency: Practice and Experience}, author={Pugh, William}, year={2000}, pages={445-455} }, @misc{stdfuture_2020, title={std::future - cppreference.com}, url={https://en.cppreference.com/w/cpp/thread/future}, year={2020} }, @misc{bendersky_2016, title={The Promises and Challenges of std::async Task-Based Parallelism in C++11}, url={https://eli.thegreenplace.net/2016/the-promises-and-challenges-of-stdasync-task-based-parallelism-in-c11/}, author={Bendersky, Eli}, year={2016} }, @misc{stdasync_2021, title={std::async - cppreference.com}, url={https://en.cppreference.com/w/cpp/thread/async}, year={2021} }, @misc{asynctut_2017, title={C++11 Multithreading - Part 9: std::async Tutorial & Example}, url={https://eli.thegreenplace.net/2016/the-promises-and-challenges-of-stdasync-task-based-parallelism-in-c11/}, year={2017} }, @misc{milewski_2009, title={Broken Promises - C++0x Futures}, url={https://bartoszmilewski.com/2009/03/03/broken-promises-c0x-futures/}, author={Milewksi, Bartosz}, year={2009} }, @misc{doverview_2021, title={Overview - D Programming Language}, url={https://dlang.org/overview.html}, year={2021} }, @misc{dshared_2021, title={Migrating to Shared - D Programming Language}, url={https://dlang.org/articles/migrate-to-shared.html}, year={2021} }, @misc{dsynchronization_2021, title={Synchronization & Sharing - D Programming Language}, url={https://tour.dlang.org/tour/en/multithreading/synchronization-sharing}, year={2021} }, @misc{dattributes_2021, title={Attributes - D Programming Language}, url={https://dlang.org/spec/attribute.html}, year={2021} }, @misc{dmutability_2021, title={Mutability - Dlang Tour}, url={https://tour.dlang.org/tour/en/basics/type-qualifiers}, year={2021} }, @article{servetto_pearce_groves_potanin_2013, title = {Balloon Types for Safe Parallelisation over Arbitrary Object Graphs}, url={http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.353.2449&rep=rep1&type=pdf}, author = {Servetto, Marco and Pearce, David and Groves, Lindsay and Potanin, Alex}, year = {2013}, }, @misc{goconcurrency_2021, title={A Tour of Go}, url={https://tour.golang.org/concurrency/1}, year={2021} }, @misc{goroutines_2020, title={Receive or Fetch Return Value from a Goroutine in Go(Golang) - Welcome to Golang by Example}, url={https://golangbyexample.com/return-value-goroutine-go/}, year={2020} }, @misc{gochannels_2021, title={Go by Example: Channels}, url={https://gobyexample.com/channels}, author = {McGranaghan, Mark}, year={2021} }, @misc{greenthreads_2021, title={Green Threads Explained (Intro)}, url={https://c9x.me/articles/gthreads/intro.html}, year={2021} }, @article{togashi_klyuev_2014, author={Togashi, Naohiro and Klyuev, Vitaly}, booktitle={2014 4th IEEE International Conference on Information Science and Technology}, title={Concurrency in Go and Java: Performance analysis}, year={2014}, pages={213-216}, doi={10.1109/ICIST.2014.6920368}, ISSN={2164-4357}, }, @misc{singh_2020, title={Load Balancing Goroutines in Go}, url={https://itnext.io/load-balancing-goroutines-in-go-57e0896c7f86}, author = {Singh, Adityp Pratap}, year={2020} }, @misc{khalil_2014, title={Be careful When Using std::string}, url={https://groups.google.com/a/chromium.org/g/chromium-dev/c/EUqoIz2iFU4/m/kPZ5ZK0K3gEJ}, author = {Khalil, Georges}, year={2014} }, @misc{stdbasicstring_2021, title={std::basic_string - cppreference.com}, url={https://en.cppreference.com/w/cpp/string/basic_string}, year={2021} }, @misc{carruth_2016, url={https://www.youtube.com/watch?v=L7zSU9HI-6I}, title = {CppCon 2016: Chandler Carruth "High Performance Code 201: Hybrid Data Structures"}, organization={Youtube}, year={2016} }, @book{guntheroth_2016, title={Optimized C++: Proven Techniques for Hightened Performance}, publisher={O'Reilly Media}, author={Guntheroth, Kurt}, year={2016}, pages={5-7,261-262} }, @misc{llvmsmallvector_2021, url={https://llvm.org/doxygen/classllvm_1_1SmallVector.html}, title = {LLVM llvm::SmallVector}, year={2021} }, @misc{mike_2016, title={Exploring std::string | Shahar Mike's Web Spot}, url={https://shaharmike.com/cpp/std-string/}, author = {Mike, Shahar}, year={2016} }, @misc{gccdualabi_2021, url={https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html}, title = {Dual ABI} }, @misc{copyonwrite_2020, title={COW (Copy On Write) in GCC}, url={https://programmer.help/blogs/cow-copy-on-write-in-gcc.html} }, @misc{meredith_boehm_crowl_dimov_2008, title={Concurrency Modifications to Basic String}, url={http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2534.html}, author = {Meredith, Alisdair and Boehm, Hans and Crowl, Lawrence and Dimov, Peter}, year={2008} }, @misc{sutter_1999, title={Optimizations That Aren't (In a Multithreaded World)}, url={http://www.gotw.ca/publications/optimizations.htm}, author = {Sutter, Herb}, year={1999} }, @misc{acton_2014, url={https://www.youtube.com/watch?v=rX0ItVEVjHc}, title = {CppCon 2014: Mike Acton "Data-Oriented Design and C++"}, organization={Youtube}, year={2016} }, @misc{steamsurvey_2021, url={https://store.steampowered.com/hwsurvey/}, title = {Steam Hardware & Software Survey} }, @misc{opengldsa_2020, url={https://www.khronos.org/opengl/wiki/Direct_State_Access}, title = {Direct State Access - OpenGL Wiki} }, @misc{openglspirv_2018, url={https://www.khronos.org/opengl/wiki/SPIR-V}, title = {SPIR-V - OpenGL Wiki} }, @misc{openglubo_2017, url={https://www.khronos.org/opengl/wiki/Uniform_Buffer_Object}, title = {Uniform Buffer Object - OpenGL Wiki} }, @misc{haynes_2020, title={How Do Refresh Rates Work for Monitors}, url={https://insights.samsung.com/2020/01/16/how-do-refresh-rates-work-for-monitors/}, author = {Haynes, Sutter}, year={2020} }, @misc{raylib_2021, title={raylib}, url={https://www.raylib.com/}, year={2021} }, @misc{godotscenetree_2021, title={SceneTree - Godot Engine (stable) Documentation in English}, url={https://docs.godotengine.org/en/stable/getting_started/step_by_step/scene_tree.html}, year={2021} }, @misc{unityhirarchy_2021, title={Unity - Manual: The Hierarchy Window}, url={https://docs.unity3d.com/Manual/Hierarchy.html}, year={2021} }, @misc{amethystbook_2021, title={Introduction - Amethyst Documentation}, url={https://book.amethyst.rs/book/stable/}, year={2021} }, @misc{raylibmultithreading_2019, title={Ray on Twitter}, url={https://twitter.com/raysan5/status/1119273062405373952}, author = {Santamaria, Ramon}, year={2019} }, @misc{spolsky_2002, title={The Law of Leaky Abstraction - Joel on Software}, url={https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/}, author = {Spolsky, Joel}, year={2002} }, @misc{bergstrom_2011, title={Measuring NUMA Effects with the STREAM Benchmark}, url={https://newtraell.cs.uchicago.edu/files/tr_authentic/TR-2012-04.pdf}, author = {Bergstrom, Lars}, year={2011} },