क्यों आपको लगता है कि कार्यक्रम के लिए एक से अधिक धागा की आवश्यकता होगी:
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[]) {
int th_id, nthreads;
#pragma omp parallel private(th_id)
{
th_id = omp_get_thread_num();
printf("Hello World from thread %d\n", th_id);
#pragma omp barrier
if (th_id == 0) {
nthreads = omp_get_num_threads();
printf("There are %d threads\n",nthreads);
}
}
return EXIT_SUCCESS;
}
यह आउटपुट है कि मैं मिलता है:
इस कार्यक्रम है? यह स्पष्ट रूप से मामला है कि ओपनएमपी को यह एहसास होता है कि बिना किसी लूप वाले प्रोग्राम चलाने के लिए अतिरिक्त थ्रेड बनाने की आवश्यकता नहीं है, कोई भी कोड जो समानांतर में चल सकता है।
ओपनएमपी के साथ कुछ समांतर सामान चलाने का प्रयास करें। this की तरह कुछ:
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#define CHUNKSIZE 10
#define N 100
int main (int argc, char *argv[])
{
int nthreads, tid, i, chunk;
float a[N], b[N], c[N];
/* Some initializations */
for (i=0; i < N; i++)
a[i] = b[i] = i * 1.0;
chunk = CHUNKSIZE;
#pragma omp parallel shared(a,b,c,nthreads,chunk) private(i,tid)
{
tid = omp_get_thread_num();
if (tid == 0)
{
nthreads = omp_get_num_threads();
printf("Number of threads = %d\n", nthreads);
}
printf("Thread %d starting...\n",tid);
#pragma omp for schedule(dynamic,chunk)
for (i=0; i<N; i++)
{
c[i] = a[i] + b[i];
printf("Thread %d: c[%d]= %f\n",tid,i,c[i]);
}
} /* end of parallel section */
}
आप कुछ हार्ड कोर सामान चाहते हैं, one of these चलाने की कोशिश करें।
स्रोत
2010-12-23 02:07:21
को वातावरण चर OMP_DYNAMIC की स्थापना करके काम कर मिल गया बहुत बहुत शुक्रिया। मैं/openmp के साथ संकलित नहीं था। अब आकर्षक के रूप में काम करता है :) – Nishanth