<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic OpenMP: No speedup with heap allocation in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904115#M4339</link>
    <description>&lt;P&gt;&lt;FONT face="Verdana"&gt;Hello!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Verdana"&gt;Are any in this forum able to explain why the speedup is lost?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Verdana"&gt;I took the open_sample.c, which is found in directory IntelCompilerC++10.1.013samplesopenmp_samples.c, and modified it slightly into the following:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color="#008000" size="2"&gt;&lt;P&gt;&lt;FONT size="1"&gt;/*&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;* Copyright (C) 2006-2007 Intel Corporation. All Rights Reserved.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;*/&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT color="#0000ff" size="2"&gt;&lt;P&gt;&lt;FONT size="1"&gt;include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CSTDIO&gt;&lt;P&gt;&lt;/P&gt;&lt;/CSTDIO&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CTIME&gt;&lt;P&gt;&lt;/P&gt;&lt;/CTIME&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CFLOAT&gt;&lt;P&gt;&lt;/P&gt;&lt;/CFLOAT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CMATH&gt;&lt;P&gt;&lt;/P&gt;&lt;/CMATH&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifdef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;_OPENMP&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;OMP.H&gt;&lt;P&gt;&lt;/P&gt;&lt;/OMP.H&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color="#008000"&gt;&lt;P&gt;&lt;FONT size="1"&gt;// Be careful to set your shell's stacksize limit to a high value if you&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;// wish to increase the SIZE.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt; 4800 &lt;FONT color="#008000"&gt;// Must be a multiple of 8.&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;M&lt;/FONT&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt;/8&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;N&lt;/FONT&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt;/4&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;P&lt;/FONT&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt;/2&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt; 5 &lt;/FONT&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// product matrix calculations&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;// 2D access to 1D data structures&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;A&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) (&lt;FONT color="#010001"&gt;a&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;+&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;])&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;B&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) (&lt;FONT color="#010001"&gt;b&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;+&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;])&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;C&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) (&lt;FONT color="#010001"&gt;c&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;+&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;])&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;int&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;main&lt;/FONT&gt;(&lt;FONT color="#0000ff"&gt;void&lt;/FONT&gt;)&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;{&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifndef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;USE_NEW&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt; &lt;FONT color="#010001"&gt;a&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;], &lt;FONT color="#010001"&gt;b&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;], &lt;FONT color="#010001"&gt;c&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#else&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt; *&lt;FONT color="#010001"&gt;a&lt;/FONT&gt;, *&lt;FONT color="#010001"&gt;b&lt;/FONT&gt;, *&lt;FONT color="#010001"&gt;c&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt; &lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;bool&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nthr_checked&lt;/FONT&gt;=&lt;FONT color="#0000ff"&gt;false&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;time_t&lt;/FONT&gt; &lt;FONT color="#010001"&gt;start&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;int&lt;/FONT&gt; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;l&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;i1&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;i2&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;i3&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k1&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k2&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k3&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt;=1;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifdef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;USE_NEW&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;a&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;new&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;b&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;new&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;c&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;new&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Using time() for wall clock time
"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Problem size: c(%d,%d) = a(%d,%d) * b(%d,%d)
"&lt;/FONT&gt;,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;P&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;M&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;N&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;N&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;P&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Calculating product %d time(s)
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// a is identity matrix&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;A&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) = 1.0;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// each column of b is the sequence 1,2,...,N&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FO nt="" color="#0000ff"&gt;for&lt;/FO&gt;&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++)&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;B&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) = &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;+1.;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;start&lt;/FONT&gt; = &lt;FONT color="#010001"&gt;time&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;NULL&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#010001"&gt;parallel&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;private&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;)&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;{&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;l&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;l&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;l&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#010001"&gt;single&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nowait&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;if&lt;/FONT&gt; (!&lt;FONT color="#010001"&gt;nthr_checked&lt;/FONT&gt;) {&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifdef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;_OPENMP&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt; = &lt;FONT color="#010001"&gt;omp_get_num_threads&lt;/FONT&gt;();&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;( &lt;FONT color="#a31515"&gt;"
We are using %d thread(s)
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;nthr_checked&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;true&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// Initialize product matrix&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nowait&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;C&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) = 0.0;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// Parallelize by row. The threads don't need to synchronize at&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// loop end, so "nowait" can be used.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nowait&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;k&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;k&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// Each element of the product is just the sum 1+2+...+n&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;C&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) += &lt;FONT color="#010001"&gt;A&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;) * &lt;FONT color="#010001"&gt;B&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;} &lt;FONT color="#008000"&gt;// #pragma omp parallel private(i,j,k)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;} &lt;FONT color="#008000"&gt;// l=0,...NTIMES-1&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt; = &lt;FONT color="#010001"&gt;time&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;NULL&lt;/FONT&gt;) - &lt;FONT color="#010001"&gt;start&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"
Finished calculations.
"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Matmul kernel wall clock time = %.2f sec
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Wall clock time/thread = %.2f sec
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;/&lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"MFlops = %f
"&lt;/FONT&gt;,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;(&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;)(&lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt;)*(&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;)(&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*2)*(&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;)(&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;)/&lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;/1.0e6);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;return&lt;/FONT&gt; 0;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;As can be seen, by defining USE_NEW arrays are allocated on the heap &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;by calls to C++'s new. By leaving USE_NEW undefined, arrays are put&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;on the stack.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;I compile the C++ program with&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;icl /Qstd=c99 /Qopenmp /F256000000 openmp_sample.cpp &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;The best timing result is 2880 MFlops and 3.0 sec wall clock time/thread&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;(2 threads).&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;I compile with&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;icl /Qstd=c99 /Qopenmp /F256000000 /DUSE_NEW openmp_sample.cpp &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;The best timing result is 1016 MFlops and 8.5 sec wall clock time/thread&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;(2 threads).&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;The result when USE_NEW is defined is comparable to not using 
OpenMP.  Why is &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;the speedup lost when dynamically allocated arrays are used? Are OpenMP really only usefull&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;when array sizes are know at compile time (I hardly believe this)? Is there something&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;I ought to set while compiling?&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;I hope you can help explain this.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;Greetings&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;Martin&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 16 Apr 2008 11:59:25 GMT</pubDate>
    <dc:creator>mohspt</dc:creator>
    <dc:date>2008-04-16T11:59:25Z</dc:date>
    <item>
      <title>OpenMP: No speedup with heap allocation</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904115#M4339</link>
      <description>&lt;P&gt;&lt;FONT face="Verdana"&gt;Hello!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Verdana"&gt;Are any in this forum able to explain why the speedup is lost?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Verdana"&gt;I took the open_sample.c, which is found in directory IntelCompilerC++10.1.013samplesopenmp_samples.c, and modified it slightly into the following:&lt;/FONT&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color="#008000" size="2"&gt;&lt;P&gt;&lt;FONT size="1"&gt;/*&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;* Copyright (C) 2006-2007 Intel Corporation. All Rights Reserved.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;*/&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;FONT color="#0000ff" size="2"&gt;&lt;P&gt;&lt;FONT size="1"&gt;include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CSTDIO&gt;&lt;P&gt;&lt;/P&gt;&lt;/CSTDIO&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CTIME&gt;&lt;P&gt;&lt;/P&gt;&lt;/CTIME&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CFLOAT&gt;&lt;P&gt;&lt;/P&gt;&lt;/CFLOAT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;CMATH&gt;&lt;P&gt;&lt;/P&gt;&lt;/CMATH&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifdef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;_OPENMP&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#include&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#a31515"&gt;&lt;OMP.H&gt;&lt;P&gt;&lt;/P&gt;&lt;/OMP.H&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color="#008000"&gt;&lt;P&gt;&lt;FONT size="1"&gt;// Be careful to set your shell's stacksize limit to a high value if you&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;// wish to increase the SIZE.&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt; 4800 &lt;FONT color="#008000"&gt;// Must be a multiple of 8.&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;M&lt;/FONT&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt;/8&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;N&lt;/FONT&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt;/4&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;P&lt;/FONT&gt; &lt;FONT color="#010001"&gt;SIZE&lt;/FONT&gt;/2&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt; 5 &lt;/FONT&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// product matrix calculations&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;// 2D access to 1D data structures&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;A&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) (&lt;FONT color="#010001"&gt;a&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;+&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;])&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;B&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) (&lt;FONT color="#010001"&gt;b&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;+&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;])&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#define&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;C&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) (&lt;FONT color="#010001"&gt;c&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;+&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;])&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;int&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;main&lt;/FONT&gt;(&lt;FONT color="#0000ff"&gt;void&lt;/FONT&gt;)&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;{&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifndef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;USE_NEW&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt; &lt;FONT color="#010001"&gt;a&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;], &lt;FONT color="#010001"&gt;b&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;], &lt;FONT color="#010001"&gt;c&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#else&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt; *&lt;FONT color="#010001"&gt;a&lt;/FONT&gt;, *&lt;FONT color="#010001"&gt;b&lt;/FONT&gt;, *&lt;FONT color="#010001"&gt;c&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt; &lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;bool&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nthr_checked&lt;/FONT&gt;=&lt;FONT color="#0000ff"&gt;false&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;time_t&lt;/FONT&gt; &lt;FONT color="#010001"&gt;start&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;int&lt;/FONT&gt; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;l&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;i1&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;i2&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;i3&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k1&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k2&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;k3&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt;=1;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifdef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;USE_NEW&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;a&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;new&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;b&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;new&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;c&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;new&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;[&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;];&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Using time() for wall clock time
"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Problem size: c(%d,%d) = a(%d,%d) * b(%d,%d)
"&lt;/FONT&gt;,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;P&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;M&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;N&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;N&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;P&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Calculating product %d time(s)
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// a is identity matrix&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;A&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) = 1.0;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// each column of b is the sequence 1,2,...,N&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FO nt="" color="#0000ff"&gt;for&lt;/FO&gt;&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++)&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;B&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) = &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;+1.;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;start&lt;/FONT&gt; = &lt;FONT color="#010001"&gt;time&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;NULL&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#010001"&gt;parallel&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;private&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;)&lt;/FONT&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;{&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;l&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;l&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;l&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#010001"&gt;single&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nowait&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;if&lt;/FONT&gt; (!&lt;FONT color="#010001"&gt;nthr_checked&lt;/FONT&gt;) {&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#ifdef&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;_OPENMP&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt; = &lt;FONT color="#010001"&gt;omp_get_num_threads&lt;/FONT&gt;();&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff" size="1"&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;( &lt;FONT color="#a31515"&gt;"
We are using %d thread(s)
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;nthr_checked&lt;/FONT&gt; = &lt;FONT color="#0000ff"&gt;true&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// Initialize product matrix&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nowait&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++)&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;C&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) = 0.0;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// Parallelize by row. The threads don't need to synchronize at&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// loop end, so "nowait" can be used.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color="#0000ff"&gt;&lt;P&gt;&lt;FONT size="1"&gt;#pragma&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size="1"&gt; &lt;FONT color="#010001"&gt;omp&lt;/FONT&gt; &lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; &lt;FONT color="#010001"&gt;nowait&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;i&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;k&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;k&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;FONT size="1"&gt;// Each element of the product is just the sum 1+2+...+n&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;for&lt;/FONT&gt; (&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;=0; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;&amp;lt;&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;; &lt;FONT color="#010001"&gt;j&lt;/FONT&gt;++) {&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;C&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;) += &lt;FONT color="#010001"&gt;A&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;i&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;) * &lt;FONT color="#010001"&gt;B&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;k&lt;/FONT&gt;,&lt;FONT color="#010001"&gt;j&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;} &lt;FONT color="#008000"&gt;// #pragma omp parallel private(i,j,k)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;} &lt;FONT color="#008000"&gt;// l=0,...NTIMES-1&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt; = &lt;FONT color="#010001"&gt;time&lt;/FONT&gt;(&lt;FONT color="#010001"&gt;NULL&lt;/FONT&gt;) - &lt;FONT color="#010001"&gt;start&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"
Finished calculations.
"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Matmul kernel wall clock time = %.2f sec
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"Wall clock time/thread = %.2f sec
"&lt;/FONT&gt;, &lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;/&lt;FONT color="#010001"&gt;nthr&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#010001"&gt;printf&lt;/FONT&gt;(&lt;FONT color="#a31515"&gt;"MFlops = %f
"&lt;/FONT&gt;,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;(&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;)(&lt;FONT color="#010001"&gt;NTIMES&lt;/FONT&gt;)*(&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;)(&lt;FONT color="#010001"&gt;N&lt;/FONT&gt;*&lt;FONT color="#010001"&gt;M&lt;/FONT&gt;*2)*(&lt;FONT color="#0000ff"&gt;double&lt;/FONT&gt;)(&lt;FONT color="#010001"&gt;P&lt;/FONT&gt;)/&lt;FONT color="#010001"&gt;walltime&lt;/FONT&gt;/1.0e6);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;FONT color="#0000ff"&gt;return&lt;/FONT&gt; 0;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="1"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;As can be seen, by defining USE_NEW arrays are allocated on the heap &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;by calls to C++'s new. By leaving USE_NEW undefined, arrays are put&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;on the stack.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;I compile the C++ program with&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;icl /Qstd=c99 /Qopenmp /F256000000 openmp_sample.cpp &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;The best timing result is 2880 MFlops and 3.0 sec wall clock time/thread&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;(2 threads).&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;I compile with&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;icl /Qstd=c99 /Qopenmp /F256000000 /DUSE_NEW openmp_sample.cpp &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;The best timing result is 1016 MFlops and 8.5 sec wall clock time/thread&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;(2 threads).&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;The result when USE_NEW is defined is comparable to not using 
OpenMP.  Why is &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;the speedup lost when dynamically allocated arrays are used? Are OpenMP really only usefull&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;when array sizes are know at compile time (I hardly believe this)? Is there something&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;I ought to set while compiling?&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;I hope you can help explain this.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;Greetings&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;Martin&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="Verdana"&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000" size="2"&gt;&lt;FONT face="Verdana" color="#000000" size="3"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 16 Apr 2008 11:59:25 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904115#M4339</guid>
      <dc:creator>mohspt</dc:creator>
      <dc:date>2008-04-16T11:59:25Z</dc:date>
    </item>
    <item>
      <title>Re: OpenMP: No speedup with heap allocation</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904116#M4340</link>
      <description>&lt;P&gt;Martin,&lt;/P&gt;
&lt;P&gt;The heap is a single resource shared by all the threads of the process (application). As implemented by the C runtime library it contains critical sections (lets only one thread through at a time). If you want new to be (more) multi-threaded I suggest you consider overloading the low level new such that it maintains seperate heaps, one for each thread. Initiaize each thread heap from the shared heap to a reasonable working space (this allocation will be serialized). During run time should a local heap contain sufficient memory then the allocation can occure in parallel. Should a thread heap run out of memory then obtain additional memory from the common heap (serialized). You can make the scheme simple or complex.&lt;/P&gt;
&lt;P&gt;Jim Dempsey&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 16 Apr 2008 13:03:11 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904116#M4340</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2008-04-16T13:03:11Z</dc:date>
    </item>
    <item>
      <title>Re: OpenMP: No speedup with heap allocation</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904117#M4341</link>
      <description>There are only three heap allocations. After that, the programaccess the memory blocks directly without going through the CRT. So it the big slowdown remains unexplained.</description>
      <pubDate>Fri, 18 Apr 2008 16:07:11 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904117#M4341</guid>
      <dc:creator>rbarron</dc:creator>
      <dc:date>2008-04-18T16:07:11Z</dc:date>
    </item>
    <item>
      <title>Re: OpenMP: No speedup with heap allocation</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904118#M4342</link>
      <description>&lt;P&gt;Martin,&lt;/P&gt;
&lt;P&gt;A few comments on your code&lt;/P&gt;
&lt;P&gt;First use OMP_GET_WTIME to obtain a high precisiondouble of the time for use in timming your application.&lt;/P&gt;
&lt;P&gt;Second, move the report for the number of threads outside the timedloop (rember to remove the #pragma omp single too)&lt;/P&gt;
&lt;P&gt;Third, there is a bug in your code. The initialization of C(i,j)=0.0; is distributing on for(i=0... with no wait and the subsequent computation loop of C(i,j) += ... is also distributing on for(i=0... under the ASSUMPTION that the same thread issued a given i in the first loop is given the same i in the second loop. This assumption is not necessarily the case. You could very well be running on the same i in both loops under different threads. Although the 2nd loop will iterate slower and you would normally never see the 2nd loop complete the same i before the 1st loop completed the same i but there is a non-zero probability that the thread (or more appropriately core) running the 1st loop could be interrupted to run another application or O/S overhead operation and thus cause the 2nd loop on the given i to complete prior to the first loop in the given i. A suggestion is to either:&lt;/P&gt;
&lt;P&gt;a) remove the nowaits from all loops&lt;/P&gt;
&lt;P&gt;or&lt;/P&gt;
&lt;P&gt;b) keep the nowaits and explicitly slice up the distribution of the outer loop by thread (team member) number&lt;/P&gt;
&lt;P&gt;Although if you slice up with nowait then as you iterate through your master loop (NTIMES) you may begin working on different iterations of the master loop at the same time. When you rework this test case into an application you will find that you must place a barrier at the end of the master loop (or remove the nowait from the last loop).&lt;/P&gt;
&lt;P&gt;I would suggest you begin with a) then experiment with slice and dice.&lt;/P&gt;
&lt;P&gt;Jim Dempsey&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 23 Apr 2008 14:49:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/OpenMP-No-speedup-with-heap-allocation/m-p/904118#M4342</guid>
      <dc:creator>jimdempseyatthecove</dc:creator>
      <dc:date>2008-04-23T14:49:19Z</dc:date>
    </item>
  </channel>
</rss>

