В настоящее время я имею многопоточную C-программу, закодированную с использованием Pthreads, которая использует 2 потока. Я хочу увеличить нет. нитей и меры ускоряются при этом. Я хотел бы запустить мой код в автоматическом режиме, где нет. используемых потоков продолжает увеличиваться, и я хочу графически отображать время работы моего кода. Мне бы это понравилось, если бы я мог понять, как это сделать, особенно о том, как автоматизировать весь процесс и графически его графически отображать. Вот мой код:Измерение скорости многопоточной программы C (реализация с использованием Pthreads)
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 2
#define VECTOR_SIZE 40
struct DOTdata
{
/* data */
long X[VECTOR_SIZE];
long Y[VECTOR_SIZE];
long sum;
long compute_length;
};
struct DOTdata dotstr;
pthread_mutex_t mutex_sum;
void *calcDOT(void *);
int main(int argc, char *argv[])
{
long vec_index;
for(vec_index = 0 ; vec_index < VECTOR_SIZE ; vec_index++){
dotstr.X[vec_index] = vec_index + 1;
dotstr.Y[vec_index] = vec_index + 2;
}
dotstr.sum = 0;
dotstr.compute_length = VECTOR_SIZE/NUM_THREADS;
pthread_t call_thread[NUM_THREADS];
pthread_attr_t attr;
void *status;
pthread_mutex_init(&mutex_sum, NULL);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
long i;
for(i = 0 ; i < NUM_THREADS ; i++){
pthread_create(&call_thread[i], &attr, calcDOT, (void *)i);
}
pthread_attr_destroy(&attr);
for (i = 0 ; i < NUM_THREADS ; i++){
pthread_join(call_thread[i], &status);
}
printf("Resultant X*Y is %ld\n", dotstr.sum);
pthread_mutex_destroy(&mutex_sum);
pthread_exit(NULL);
}
void *calcDOT(void *thread_id)
{
long vec_index;
long start_index;
long end_index;
long length;
long offset;
long sum = 0;
offset = (long)thread_id;
length = dotstr.compute_length;
start_index = offset * length;
end_index = (start_index + length) - 1;
for(vec_index = start_index ; vec_index < end_index ; vec_index++){
sum += (dotstr.X[vec_index] * dotstr.Y[vec_index]);
}
pthread_mutex_lock(&mutex_sum);
dotstr.sum += sum;
pthread_mutex_unlock(&mutex_sum);
pthread_exit((void *)thread_id);
}
Я хотел бы, чтобы увеличить свой параметр NUM_THREADS и запустить его после каждого шага, записать время выполнения после каждого шага и построить график времени выполнения против числа потоков.
Какая операционная система? И чтобы было ясно, вам уже удалось заставить ваше приложение работать с произвольным количеством потоков, или вы также ищете помощь для этого? – giusti
Я написал свой код, который использует n потоков, хотя константа в течение всего цикла выполнения. Моя ОС - macOS Sierra. –
Я могу изменить свой параметр NUM_THREADS и запустить его отдельно, но я хочу автоматизировать процесс, записать время выполнения каждого цикла и графически отобразить его. –