배열 A의 값과 배열 B의 값을 더해서 배열 C에 저장하는 간단한 예제를 작성해보았다.C프로그래밍에 비해 설정이 많기 때문에 상대적으로 난이도가 높은 것 같다.아래는 실행코드이다. #include #include #include #include #include #include void vec_add(float *A, float *B, float *C, int N); void verify(float *C1, float *C2, int N); void vec_add_opencl(float *A, float *B, float *C, int N); int main(int argc, char *argv[]) { int i; int N = 4096; if(argc == 2) N = atoi(argv[1]); flo..
#include #include #include #include #include #define NUM_NUMBERS 1000000 #define NUM_ITERS 1000 #define NUM_THREADS 16 #define CACHE_LINE_SIZE 64 int numbers[NUM_NUMBERS]; int num_threads; typedef struct { double sum; char pad[CACHE_LINE_SIZE - sizeof(double)]; } ps_t; ps_t *partial_sum; double get_elapsed(struct timeval, struct timeval); void *par_sum(void *arg) { int i, iter; long my_id = (lon..
#include #include #include #include #include #define NUM_NUMBERS 1000000 #define NUM_ITERS 1000 #define NUM_THREADS 16 int numbers[NUM_NUMBERS]; int num_threads; double *partial_sum; double get_elapsed(struct timeval, struct timeval); void *par_sum(void *arg) { int i, iter; long my_id = (long)arg; int chunk = NUM_NUMBERS/ num_threads; int start = my_id * chunk; int end = start + chunk; if(my_id ..
#define _GNU_SOURCE #include #include #include "pthread.h" #define NUM_THREADS 4 #define SIZE 256 #define ITER 100000 int* a; int* b; void* thread_func_write(void* arg) { int* array = (int*) arg; int i, j; for(i = 0; i < ITER; i++) { for(j = 0; j < SIZE ; j++) { array[j] = array[j] + 1; } } return NULL; } void* thread_func_read(void* arg) { int* array = (int*)arg; int i, j; int sum = 0; for(i = ..
#include #include #include #include #include "timers.h" #define NDIM 1024 #define MIN(a,b) ((a) < (b) ? (a) : (b)) float a[NDIM][NDIM]; float b[NDIM][NDIM]; float c[NDIM][NDIM]; int print_matrix = 0; int validation = 0; int tiling = 0; int ijk = 1; int kij = 0; int jki = 0; void mat_mul_blocked(float c[NDIM][NDIM], float a[NDIM][NDIM], float b[NDIM][NDIM]) { int i, j, k, ii, jj, kk; int B = 16; ..
#include #include #include #define MAX_SIZE 2400 #define MAX_THREADS 5 typedef struct { int queue[MAX_SIZE]; int front, end; pthread_mutex_t mutex; } Queue; void init(Queue *q) { q->front = 0; q->end = 0; pthread_mutex_init(&(q->mutex), NULL); } int isEmpty(Queue *q) { if(q->front == q->end) return 1; else return 0; } int isFull(Queue *q) { if((q->end+1) == MAX_SIZE) return 1; else return 0; } v..
#include #include #include #include #include "timers.h" #include #define RANGE 100 #define MAX_NUM 1000 void *worker(void *); typedef struct { int tid; int thread_num; int *data; int **buckets; pthread_barrier_t *barrier; } thread_args; int main(int argc, char** argv) { int thread_num=0; int i, j; thread_args arg[MAX_NUM]; int *buckets[MAX_NUM]; int data[MAX_NUM]; if(argc < 2) { printf("please i..