Ich bin neu hier, und ich bin auch relativ neu in der Programmierung im Allgemeinen. Ich habe ein Programm in C geschrieben und muss es mit Pthreads beschleunigen. Ich habe versucht, dies mit OpenMP zu tun, aber ich weiß nicht, wie man es debuggt. Außerdem muss ich herausfinden, ob das Programm schneller mit Pthreads und Zeiten ist, aber ich weiß nicht, wie ich das in meinen Code schreiben soll. Hier ist mein CodeBeschleunigen Sie ein C-Programm mit Pthreads
enter code here
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <pthread.h>
#define NTHREADS 2
#define FYLLO(komvos) ((komvos) * 2 + 1)
long factorial(long);
void heap_function (int [], int, int);
void make_heap(long [], int);
void pop_heap(long [], int);
struct thread_data
{
long int n;
long int k;
long *b;
};
main()
{
long int n,k,c,fact=1;
long *a,*b,*d,p[k];
int i,j,rc;
int q[]={2,3,4,5,6,7,8,9,12,13,14,15,16};
pthread_t thread[NTHREADS];
struct thread_data threada;
for(i=0;i<NTHREADS;i++)
{
threada.n=n;
threada.k=k;
threada.b=b;
pthread_create (&thread[i], NULL, (void *)&threada);
}
for (i=0; i<NTHREADS; i++)
rc = pthread_join (thread[i], NULL);
for(i=0;i<13;i++)
{
k=pow(2,q[i])-1;
if(a=(long*)malloc(i*sizeof(long))==NULL);
{
printf("Den yparxei diathesimi mnimi gia desmeusi\n");
exit(1);
}
a[i]=k;
for(a[0];a[13];a[i]++)
{
n=(pow(2,q[i]))*k;
if(d=(long*)malloc((i*i)*sizeof(long))==NULL);
{
printf("Den yparxei diathesimi mnimi gia desmeusi\n");
exit(1);
}
d[i]=n;
}
c=(factorial(n))/((factorial(k))*(factorial(n-k)));
}
if(b=(long*)malloc(((i*i)+i)*sizeof(long))==NULL)
{
printf("Den yparxei diathesimi mnimi gia desmeusi\n");
exit(1);
}
for(i=0;i<13;i++)
{
b[i]=a[i];
}
for(i=13;i<182;i++) /* Gia i=13 exoume i^2=169 kai i^2+i=182*/
{
b[i]=d[i];
}
long heap[sizeof(b)];
make_heap(heap, sizeof(b));
printf("To heap einai:\n");
for (i = sizeof(b); i >=0; i--)
{
printf("%d ", heap[0]);
pop_heap(heap, i);
}
for(i=(n-k);i<=n;i++)
for(j=0;j<k;j++)
{
p[j]=heap[i];
printf("Ta %d mikrotera stoixeia eina ta %ld\n",k,p[j]);
}
free((void*)b);
getch();
}
long factorial(long n)
{
int a;
long result=1;
for(a=1;a<=n;a++)
result=result*a;
return(result);
}
void heap_function(int a[], int i, int n)
{
while (FYLLO(i) < n) /* Vazoume sto heap ta stoixeia san ypodentra */
{
int fyllo = FYLLO(i);
if (fyllo + 1 < n && a[fyllo] < a[fyllo + 1]) /* Dialegoume to maegalytero apo ta dyo paidia komvous */
++fyllo;
if (a[i] < a[fyllo]) /* Metaferoume to megalytero komvo sti riza */
{
int k = a[i];
a[i] = a[fyllo];
a[fyllo] = k;
}
++i; /* Synexizoume ston epomeno komvo */
}
}
void make_heap(long a[], int n) /*Dhmioyrgoume ti sinartisi make_heap gia na mporesoume na valoume ta
stoixeia pou dwsame mesa sto heap kai na ta ta3inomisoume*/
{
int i = n/2;
while (i-- > 0)
heap_function(a, i, n);
}
void pop_heap(long heap[], int n) /*Dhmiourgoume ti sinartisi pop_heap gia na mporesoume na e3agoume
ta stoixeia apo to heap apo to megalytero sto mikrotero*/
{
long k = heap[0];
heap[0] = heap[n];
heap[n] = k;
heap_function(heap, 0, n); /*Afou emfanistei to prwto stoixeio kaloume ti sinartisi heap_function
gia na ta3inomisei ta stoixeia pou menoun sto heap*/
}
Sorry für meine verkorkste Mail, aber ich bin neu ihr jetzt bin ich immer, es zu benutzen
Hinzufügen von Threads _may_ nicht beschleunigen Ihr Programm könnte ein besserer Begriff sein –
@Pavan Manjunath - true. Ich habe meinen Beitrag aktualisiert. – mah
Vielen Dank für Ihre Antwort, die Sache ist, dass ich PThreads in diesem Programm verwenden muss, ich werde versuchen, es besser zu verstehen und ich werde mit weiteren Fragen zurück sein – Vasouli