Articles of matrix умножение

Матричное умножение с использованием подхода divide and conquer

Я новичок в программировании и просто изучил новые концепции и начал писать код для матричного умножения, но я запутался в указателях и других, поэтому я загружаю свой код здесь в поисках рекомендаций. #include #include int **matrixMultiply(int A[][8], int B[][8], int row); int main() { int **A = allocate_matrix(A, 8, 8); int **B = allocate_matrix(B, 8, […]

Матрица Умножение размера 100 * 100 с использованием SSE Intrinsics

int MAX_DIM = 100; float a[MAX_DIM][MAX_DIM]__attribute__ ((aligned(16))); float b[MAX_DIM][MAX_DIM]__attribute__ ((aligned(16))); float d[MAX_DIM][MAX_DIM]__attribute__ ((aligned(16))); /* * I fill these arrays with some values */ for(int i=0;i<MAX_DIM;i+=1){ for(int j=0;j<MAX_DIM;j+=4){ for(int k=0;k<MAX_DIM;k+=4){ __m128 result = _mm_load_ps(&d[i][j]); __m128 a_line = _mm_load_ps(&a[i][k]); __m128 b_line0 = _mm_load_ps(&b[k][j+0]); __m128 b_line1 = _mm_loadu_ps(&b[k][j+1]); __m128 b_line2 = _mm_loadu_ps(&b[k][j+2]); __m128 b_line3 = _mm_loadu_ps(&b[k][j+3]); result = […]

Матрица MPI с умножением

Я пытаюсь сделать матричное умножение с использованием MPI в C, и мы должны сделать версию, которая является последовательной и одной параллельной версией. Моя параллельная версия не дает правильных ответов, и я не знаю, почему. Я думаю, что я не отправляю правильные сообщения в процессы, но я не могу быть уверен. Профессор просто перешел на разные […]

Распараллеливание OpenMP (Block Matrix Mult)

Я пытаюсь реализовать умножение матриц блоков и сделать его более параллельным. Это мой код: int i,j,jj,k,kk; float sum; int en = 4 * (2048/4); #pragma omp parallel for collapse(2) for(i=0;i<2048;i++) { for(j=0;j<2048;j++) { C[i][j]=0; } } for (kk=0;kk<en;kk+=4) { for(jj=0;jj<en;jj+=4) { for(i=0;i<2048;i++) { for(j=jj;j<jj+4;j++) { sum = C[i][j]; for(k=kk;k<kk+4;k++) { sum+=A[i][k]*B[k][j]; } C[i][j] = sum; […]

MPI-matrix-вектор-умножение возвращает иногда правильные иногда странные значения

У меня есть следующий код: //Start MPI… MPI_Init(&argc, &argv); int size = atoi(argv[1]); int delta = 10; int rnk; int p; int root = 0; MPI_Status mystatus; MPI_Comm_rank(MPI_COMM_WORLD, &rnk); MPI_Comm_size(MPI_COMM_WORLD, &p); //Checking compatibility of size and number of processors assert(size % p == 0); //Initialize vector… double *vector = NULL; vector = malloc(size*sizeof(double)); double *matrix […]

Матричное умножение с использованием нескольких streamов?

Я должен умножить 2 матрицы с помощью streamов. Две вещи: я продолжаю получать 0, когда запускаю программу. Я также получаю сообщения об ошибках (для каждого из них сказано «предупреждение: передача аргумента 1 из« printMatrix »из несовместимого типа указателя» на выделенные полужирным шрифтом (где я пытаюсь распечатать вывод). Также следует отметить, что первый выделен полужирный , […]

параллелизация умножения матриц на streamи и SIMD

Я пытаюсь ускорить матричное умножение на многоядерную архитектуру. Для этого я стараюсь использовать streamи и SIMD одновременно. Но мои результаты не очень хорошие. Я тестирую ускорение по последовательному умножению матрицы: void sequentialMatMul(void* params) { cout << "SequentialMatMul started."; int i, j, k; for (i = 0; i < N; i++) { for (k = 0; […]

Массовое сокращение строк по сравнению с крупными матричными умножениями столбцов

В настоящее время я работаю над программой на C, которая пытается вычислить умножение матрицы. Я подошел к этой задаче, перейдя через каждый столбец второй матрицы, как показано ниже. Я установил размер 1000. for(i=0;i<size;i++) { for(j=0;j<size;j++) { for(k=0;k<size;k++) { matC[i][j]+=matA[i][k]*matB[k][j]; } } } Я хотел бы знать, какой проблемный шаблон доступа используется в этой реализации. Что […]

Эффективно хранить треугольную матрицу

Мне нужно эффективно хранить нижнюю треугольную матрицу, не сохраняя все нули в памяти, поэтому я подумал об этом следующим образом: сначала я выделяю память для каждой строки, затем для каждой строки я выделяю i + 1 байт, поэтому я никогда приходится беспокоиться об нулях, но что-то не так при первом распределении. Что я делаю неправильно? […]

Матричное умножение CUDA

Я читал несколько веб-сайтов и даже использовал код NVIDA в качестве руководства, но я все еще получаю неправильный ответ. Основной вопрос будет задан пользователю для размера и отобразит A и B, а затем отобразит результирующую матрицу C. Однако скажем, что я запускаю матрицу 2×2 для A и B, это мой выходной образец: Matrix A 0.000000 […]