<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>The Two-Level Semi-Synchronous Parallelization Method for the Caustic and Indirect Luminance Calculation in Realistic Rendering*</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>A. Zhdanov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>D. Zhdanov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ITMO University</institution>
          ,
          <addr-line>49 Kronverksky Pr., St. Petersburg, 197101</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>1982</year>
      </pub-date>
      <fpage>0000</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>The paper considers an original approach to the semi-synchronous calculation of the luminance of caustic and indirect illumination for the group of methods based on the bidirectional stochastic ray tracing with backward photon maps. The designed parallelization method uses the two-level threads hierarchy. The low level of this thread hierarchy is synchronous calculations of the part of the whole image defined by a randomly generated pixel mask which is applied to the whole image. The top level is semi-synchronous parallelization level that consists groups of the low level threads which of them calculate own part of the whole image in a way similar to asynchronous calculations. As the top level is semi-synchronous it means that when calculating the luminance of the caustic and indirect illumination, the threads of the low level have access to the data accumulated in the backward photon maps of the other parallel threads of the semi-synchronous level. A special algorithm for organizing an access to data of the upper-level threads avoids delays associated with data synchronization. The comparison of the developed solution with purely synchronous and asynchronous parallelization methods is presented.</p>
      </abstract>
      <kwd-group>
        <kwd>Ray Tracing</kwd>
        <kwd>Photon Maps</kwd>
        <kwd>Backward Photon Maps</kwd>
        <kwd>Parallel Computing</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Realistic rendering is a significant component that is commonly used in the modern
realistic visualization, virtual prototyping and virtual reality systems. In addition, it is
used to solve a wide range of applied problems, including the realistic images forming,
optical effects simulation, virtual prototyping of complex optical systems, etc. With
increasing computing power and computation architecture complexity of modern
computer systems, both the complexity of tasks for virtual prototyping and the required
accuracy of calculations raise. The tasks of virtual prototyping, solved by physically
correct realistic visualization methods, include modeling the illumination of optical
systems, modeling the human perception of synthesized images formed by complex optical
systems, such as, for example, virtual or mixed reality systems, indicators on the
windshield, and others.</p>
      <p>
        Traditionally realistic rendering algorithms are based on the Monte-Carlo ray tracing
methods which are used to calculate the luminance. These ray tracing methods can be
forward, backward or bidirectional. The most universal of these method for calculating
the physically correct luminance of indirect and caustic illumination are the methods
based on the use of photon maps [
        <xref ref-type="bibr" rid="ref1 ref2">1, 2</xref>
        ]. These rendering methods have a good
parallelization capability, however effective usage of the photon map in a multi-core
environment is a challenging task. Despite there are existing solutions aimed at the effective
CPU or GPU ray tracing as, for example, Intel Embree [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ], Nvidia RTX [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] or AMD
RadeonRays, they do not solve the problem of the effective processing of the traced
rays for the needs of the realistic rendering with photon mapping. So, the research and
development of effective rendering methods using all available computation resources
of modern multi-core CPUs with continuously raising number of cores is still an urgent
challenge.
      </p>
      <p>
        There are existing solutions aimed on parallelizing the photon mapping rendering
algorithms using synchronous calculations on multi-core CPU [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], out-of-core photon
mapping [
        <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
        ], massive parallel calculations with GPUs [
        <xref ref-type="bibr" rid="ref8 ref9">8, 9</xref>
        ], distributed simulations
[
        <xref ref-type="bibr" rid="ref10 ref6">6, 10</xref>
        ] and cloud rendering [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. At the same time the rendering algorithm might be
aimed either at the speed to achieve the real-time rendering or at the physical
correctness of the simulated image. In the scope of the current article we concentrated on the
effective usage of the backward photon maps in a multi-thread environment when
rendering with the stochastic progressive backward photon mapping (SPBPM) method on
a single-CPU workstation with multiple cores with aim at the physical correctness of
simulation.
2
2.1
      </p>
    </sec>
    <sec id="sec-2">
      <title>Rendering parallelization</title>
      <sec id="sec-2-1">
        <title>Rendering method</title>
        <p>
          In the scope of the current research we used the method based on bidirectional ray
tracing with backward photon mapping [
          <xref ref-type="bibr" rid="ref12 ref13">12, 13</xref>
          ]. Opposite to the traditional photon
mapping based methods the backward photon maps are formed by the backward rays
emitted from the camera and luminance transferred by forward rays is accumulated in
these maps to form the final image. The general workflow of the rendering method is
shown on the Fig. 1. The rendering method consist of four main steps:
1. Backward path tracing when the backward paths from the camera are generated and
traced in the scene with the direct light and BDF samplings to account the direct
luminance.
2. Backward photon maps forming along with creation of the acceleration structures.
        </p>
        <p>The Two-Level Semi-Synchronous Parallelization Method 3
3. Forward ray tracing when forward rays from light sources are generated and traced
in the scene. By intersecting with previously formed backward photon maps, the
indirect and caustic luminance is accumulated.
4. Final image forming when the luminance accumulated in backward photon maps is
added to corresponding pixels of the image and weighted. The image accuracy is
estimated and if the required accuracy is not achieved then calculation continue from
the first step.
The traditional parallelization methods used for ray tracing-based rendering are
synchronous and asynchronous calculations. Both traditional methods were
implemented and tested on 12 cores of the Intel Xeon 6230 CPU and standard Cornell
box scene. Ray tracing and processing speedup test results are presented on Fig. 2 and
Tables 1 and 2.</p>
        <p>
          Synchronous calculations method for parallelizing the rendering process on a
multicore system is using all available cores in a synchronous way. In this case all threads
share the same memory pool and render the same scene in synchronous way. The main
problem of this approach is presence of the non-parallelizable parts of the algorithm
that according to the Amdahl’s law [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] cause the significant ray tracing and processing
slowdown when increasing the number of cores. As it can be seen from the presented
graph the rays tracing and processing speed growth almost stops at some point when
increasing the number of used computation cores.
        </p>
        <p>In opposite to the synchronous calculations method the asynchronous calculations
use one main thread and a group of computation threads. Each of these computation
thread performs the independent rendering of the whole image, and the main thread is
used to control the computation threads and gather rendering results from the
computation threads. Due to asynchronous nature of calculation all computation threads
use their own private memory and as result it multiplies the memory usage of the whole
rendering process by number of computation threads. As result as it can be seen from
the presented graph the number of traced and processed rays growth linearly when
increasing the number of the used cores.
At the same time after 10 minutes of calculations using all computation cores the
synchronous method achieved the accuracy of 3.9%, while asynchronous method achieved
the accuracy of 5.1%. So even if asynchronous method traces and processes more rays
the accuracy attained after 10 minutes of calculations of the same scene is lower
comparing to synchronous calculations. The main reason of this slowdown is that in case of
the asynchronous calculations the whole available memory is split between threads and
as result rays are processed in smaller groups resulting in less connections made
between light sources and camera pixels.</p>
        <sec id="sec-2-1-1">
          <title>The Two-Level Semi-Synchronous Parallelization Method 5</title>
          <p>2.3</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>Semi-synchronous parallelization method</title>
        <p>The research goal was to unite the scalability of the asynchronous calculations with
higher accuracy of the synchronous calculations in the most effective way. So, in the
scope of the current research the semi-synchronous parallelization method was
developed. This method consists of two parallelization levels: synchronous and
semi-synchronous.</p>
        <p>The first parallelization level is synchronous rendering of the part of the whole scene
image defined by the random mask, mainly of 32x32 pixels size. This mask defines
image pixels that are used at the backward ray tracing step for the backward photon
map forming. Each rendering step is parallelized independently in a synchronous way
with one main thread that controls the rendering method workflow. The synchronous
parallelization level is shown on the Fig. 3.</p>
        <p>The second parallelization level is semi-synchronous that unites several of synchronous
thread groups to render the whole scene in semi-synchronous way. Each group of
synchronous threads have their own random mask. These masks are generated by the
main thread so that they cover all image pixels and at the same time do not intersect
with each other. Once in a several number of rendering phases all threads are
synchronized, the whole rendered image is formed, and masks are re-randomized. This
re-randomization is required to guarantee that all synchronous thread groups have about
equal load and all image pixels are processed equally. Each of the synchronous thread
groups uses their own backward photon maps as result multiplying the memory usage
required to store maps by the number of synchronous thread groups, however the size
of each of these maps can be made smaller comparing to a map built for the whole
image. The semi-synchronous parallelization level is shown on the Fig. 4.
It is possible that at the forward ray tracing step of the rendering method the forward
ray traced by one synchronous group of threads do not find an intersection with the own
backward photon maps, however this ray might result in the luminance forming in
backward photon maps of the other synchronous groups of threads. To increase the ray
processing ratio of the traced forward rays it is required provide an access to all
backward photon maps that exist at the moment. This means that some flag should be
maintained by the backward photon maps owner indicating that maps are available and
open for other threads to be used. At the same time these maps should not be closed
and deleted while some other thread is using them. The workflow of the rendering
process in a synchronous group of threads with opening and closing an access to the
own backward photon maps is shown on the Fig. 5.</p>
        <sec id="sec-2-2-1">
          <title>The Two-Level Semi-Synchronous Parallelization Method 7</title>
          <p>This opening and closing the access to the own backward photon maps should be
performed without interrupting the calculation process and without using the critical
sections. So, in the scope of the current research the algorithm of asynchronous access to
the backward photon maps was developed. This algorithm uses only atomic operations
both to open and close the access to the own backward photon maps and to gain and
release access to the other thread’s backward photon maps.</p>
          <p>For these needs the backward photon maps active thread counter is stored along with
along with each of the backward photon maps. This counter shows how many
independent threads are currently accessing corresponding map. If this counter is equal to
zero that means that maps either do not exist or are not open for access by not-owner
thread. If the counter is more than zero, then maps are available for other threads to be
used. Only the thread that created photon maps can increase the counter from zero state.
The owner thread can decrease the corresponding counter to zero only if it is equal to
1 that means that no other thread is currently using these maps. To open and close the
access to the own backward photon maps at the beginning and end of the forward ray
tracing step the following algorithm is used:
1. Increase the own backward photon maps active thread counter by 1 with an atomic
increment operation. This would mark the own backward photon maps as ready to
be used during forward ray tracing step for indirect and caustic luminance
calculation by other threads.
2. Proceed to the forward ray tracing along with indirect and caustic illumination
calculation using both own backward photon maps and backward photon maps of the
other threads that are open for access at the moment.
3. When the desired number of forward rays are traced and processed try to perform
the atomic compare-and-swap operation to decrease the own backward photon maps
active thread counter from 1 to 0.
a. If the compare-and-swap operation succeeds, then it means that the current thread
was the last one accessing these backward photon maps and new access is
successfully closed for other threads.
b. If the compare-and-swap operation fails it means that some other thread is still
accessing current backward photon maps and they cannot be closed at the
moment. In this case more forward rays are traced and processed until this
compareand-swap operation can be successfully completed.</p>
          <p>As result the thread that created the backward photon maps performs the forward ray
tracing and processing until two conditions are fulfilled: first the desired number of
forward rays are traced and second the access to the own backward photon map can be
successfully closed. To guarantee that thread do not get stuck in the forward ray tracing
step the forward ray tracing step the thread stops using other backward photon maps
after the required number of forward rays is reached. The workflow of the algorithm of
opening ang closing an access to the own backward photon maps at the forward ray
tracing step is shown on the Fig. 6.</p>
          <p>The forward ray tracing step is also modified to account the indirect and caustic
luminance that might be formed in backward photon maps of the other threads that are
available at the moment of the forward ray tracing. To gain the access to the backward
photon maps of the other threads it should temporary increase the other thread’s
backward photon maps active thread counter to let it know that it is currently being
used. The following operations are performed:
1. First of all, it should check the required backward photon maps active thread counter.</p>
          <p>If it is equal to zero, then maps are not available and should not be processed when
calculating the indirect and caustic luminance formed by the current ray.
2. If the backward photon maps active thread counter is more than zero, then try to
increment it by 1 with an atomic compare-and-swap operation.
3. If the compare-and-swap operation failed, then access was not granted, and this map
is ignored when processing current forward ray.
4. If the compare-and-swap operation was successful, that means that access to the
other thread’s backward photon maps was successfully granted.
5. If an access was granted, then intersection of forward ray with other thread’s
backward photon maps is analyzed and in case of success the indirect and caustic
luminance are accounted in corresponding backward photons. Also, the forward ray is
accounted in the total energy processed by this backward photon map.</p>
        </sec>
        <sec id="sec-2-2-2">
          <title>The Two-Level Semi-Synchronous Parallelization Method 9 6. After backward photon map processing is finished the corresponding backward photon maps active thread counter is decreased by 1 with an atomic decrement operation to release the access.</title>
          <p>All operations related to increasing the luminance accumulated in the backward photon
map and corresponding ray counters are implemented using solely atomic operations
to ensure correct luminance accumulation from concurrent threads. The workflow of
the forward ray tracing with accounting luminance in all available backward photon
maps is shown on the Fig. 7.</p>
          <p>As result at the step when the forward ray tracing is performed the thread’s own
backward photon maps are available for other threads to accumulate indirect and caustic
luminance and all backward photon maps that are available at the moment of tracing
the forward ray are used to account the ray’s luminance. As only atomic operations are
used in the backward photon maps access algorithms no special synchronization
between threads is required that gives linear scalability of the rendering process when
increasing the number of cores. Due to the uniform task distribution between different
synchronous thread groups this overlapping is quite high and results in more effective
forward ray tracing along with indirect and caustic luminance accumulation.
3</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Results</title>
      <p>
        The presented parallelization method was implemented and integrated in Lumicept
light simulation software [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] and tested along with traditional synchronous and
asynchronous methods on the same PC with the 12 cores of the Intel Xeon 6230 CPU
and standard Cornell box scene. Ray tracing and processing speedup test results are
presented in Tables 1-3 and on Fig. 9. Corresponding rendering results are shown on
Fig. 8.
      </p>
      <sec id="sec-3-1">
        <title>The Two-Level Semi-Synchronous Parallelization Method 11</title>
        <p>As it can be seen the proposed approach have the same linear scalability of traced and
process rays with the asynchronous calculation. After 10 minutes of calculations with
the Cornell box test scene the synchronous calculations method achieved the accuracy
of 3.9%, asynchronous calculation achieved the accuracy of 5.1% and the proposed
semi-synchronous calculations achieved the accuracy of 2.6% as result of more
effective usage of the backward photon maps formed by different computation threads.</p>
        <p>The similar acceleration was achieved not only on Cornell box test scene, but also
on scenes with light guiding optical systems, scenes containing volume scattering and
others. Corresponding test scenes rendered images are shown on Fig. 10.
The developed two-level semi-synchronous parallelization method for the caustic and
indirect luminance calculation can significantly increase the efficiency of calculating
these luminance components on multicore systems. This approach allowed us to
increase the rendering efficiency in non-parallelizable or poorly parallelizable algorithm
sections and, when using small number of lower-level computation threads, to achieve
an almost linear dependence of the rendering performance on the number of cores used.
In addition, two-level semi-synchronous parallelization allows reducing the size of the
backward photon maps in the upper-level threads, which makes it possible to speed up
the process of maps voxelization and search of intersections with traced rays. The
developed approach can be used as a part of a distributed rendering system, providing
high performance on a remote server service.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Jensen</surname>
            ,
            <given-names>H. W.</given-names>
          </string-name>
          :
          <article-title>Global illumination using photon maps</article-title>
          .
          <source>In: Proceedings of the eurographics workshop on Rendering techniques '96</source>
          , pp.
          <fpage>21</fpage>
          -
          <lpage>30</lpage>
          . Springer-Verlag, London, UK (
          <year>1996</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Kang</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          et al:.
          <article-title>A survey of photon mapping state-of-the-art research and future challenges</article-title>
          .
          <source>In: Frontiers Inf Technol Electronic</source>
          Vol
          <volume>17</volume>
          , pp.
          <fpage>185</fpage>
          -
          <lpage>199</lpage>
          . (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Wald</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Embree ray tracing kernels: overview and new features</article-title>
          .
          <source>In: SIGGRAPH'16</source>
          , New York, NY, USA, Art.
          <volume>52</volume>
          . (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Frolov</surname>
            ,
            <given-names>V.A.</given-names>
          </string-name>
          :
          <article-title>Examination of the Nvidia RTX</article-title>
          .
          <source>In: Proceedings of Computer Graphics and Vision</source>
          <year>2019</year>
          , pp.
          <fpage>7</fpage>
          -
          <lpage>12</lpage>
          . Bryansk, Russia. (
          <year>2019</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>He</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wang</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Xu</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Xing</surname>
          </string-name>
          , Y.:
          <article-title>Multi-core Parallel of Photon Mapping In: Visual Information Communication</article-title>
          , pp.
          <fpage>365</fpage>
          -
          <lpage>374</lpage>
          , Springer, Boston, MA (
          <year>2009</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Gunther</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grosch</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Distributed Out-of-Core Stochastic Progressive Photon Mapping</article-title>
          . In: Computer Graphics Forum, vol.
          <volume>33</volume>
          , pp.
          <fpage>154</fpage>
          -
          <lpage>166</lpage>
          . (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Schregle</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grobe</surname>
            ,
            <given-names>L.O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wittkopf</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>An out-of-core photon mapping approach to daylight coefficients</article-title>
          .
          <source>In: Journal of Building Performance Simulation</source>
          <volume>9</volume>
          :
          <issue>6</issue>
          , pp.
          <fpage>620</fpage>
          -
          <lpage>632</lpage>
          . (
          <year>2016</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Carlberg</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Stochastic Progressive Photon Mapping Using Parallel Hashing</article-title>
          . Lund University, Sweden. (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Fabianowski</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Interactive Manycore Photon Mapping</article-title>
          . University of Dublin, Irleand. (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10. Gü nther, J.,
          <string-name>
            <surname>Waldy</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Slusallek</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Realtime Caustics Using Distributed Photon Mapping</article-title>
          .
          <source>In: Proceedings of the 15th Eurographics Workshop on Rendering Techniques</source>
          , Norkoping,
          <string-name>
            <surname>Sweden.</surname>
          </string-name>
          (
          <year>2004</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Jacobsson</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Distributed Progressive Photon Mapping</article-title>
          . Lund University, Sweden. (
          <year>2014</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Hachisuka</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jensen</surname>
            ,
            <given-names>H. W.</given-names>
          </string-name>
          :
          <article-title>Stochastic Progressive Photon Mapping</article-title>
          .
          <source>In: Proceedings of SIGGRAPH Asia '09</source>
          ,
          <string-name>
            <surname>Nr</surname>
          </string-name>
          .
          <volume>41</volume>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>8</lpage>
          , New York, NY, USA. (
          <year>2009</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Havran</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Herzog</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seidel</surname>
          </string-name>
          , H.-P.:
          <article-title>Fast Final Gathering via Reverse Photon Mapping</article-title>
          .
          <source>In: Proceedings of the Eurographics</source>
          <year>2005</year>
          , Vol.
          <volume>24</volume>
          ,
          <string-name>
            <surname>Nr</surname>
          </string-name>
          . 5, pp.
          <fpage>323</fpage>
          -
          <lpage>333</lpage>
          . Blackwell Publishing, Oxford, UK (
          <year>2005</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Amdahl</surname>
            ,
            <given-names>G.M.:</given-names>
          </string-name>
          <article-title>Validity of the single processor approach to achieving large scale computing capabilities</article-title>
          .
          <source>In: Proceedings of the April 18-20</source>
          ,
          <year>1967</year>
          , spring joint computer conference (AFIPS '67 (Spring)), pp.
          <fpage>483</fpage>
          -
          <lpage>485</lpage>
          . New York, NY, USA (
          <year>1967</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Lumicept - Hybrid Light</surname>
          </string-name>
          Simulation Software, http://www.integra.jp/en, last accessed
          <year>2020</year>
          /07/01.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>