Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Умножение матрицы на матрицу с помощью Cuda 
:(
    Опции темы
Toyamatokanava
Дата 20.2.2013, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.10.2012
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Есть код для умножение простой матрицы 2на2 на матрицу 2на2. Программа нормально вычисляет первую строку получившейся матрицы, а вторую криво. Может есть знающие люди, которые могут подсказать ошибку?

Код

#include <stdio.h> 
#include <stdlib.h> 
#include <vector>
#include <conio.h>
#define N (2)
// вычисление умножения матрицы на матрицу 

__global__ void mult( int *a, int *b, int *c) { 
    int bx = blockIdx.x; 
    int by = blockIdx.y; 
    int tx = threadIdx.x; 
    int ty = threadIdx.y; 
    float sum = 0.0; 
    int ia=N * 128 * by + N * ty; 
    int ib=128 * bx + tx; 
    for (int k=0; k < N; k++) 
        sum += a[ia + k] * b[ib + k * N]; 
    int ic = N * 128 * by + 128 * bx; 
    c[ic + N * ty + tx] = sum; 
}
int main( void ) { 
    int *a,*b; 
    int *c; 
    a=(int *)malloc(N*N*sizeof(int)); 
    b=(int *)malloc(N*N*sizeof(int)); 
    c=(int *)malloc(N*N*sizeof(int)); 
    int *dev_a, *dev_b; 
    int *dev_c; 
    cudaMalloc((void**) &dev_a, N*N*sizeof(int)); 
    cudaMalloc((void**) &dev_b, N*N*sizeof(int)); 
    cudaMalloc((void**) &dev_c, N*N*sizeof(int)); 
    for (int i=0; i<N*N; i++) { 
        a[i]=i; 
        b[i]=i*2; 
    } 
    for (int i=0; i<N*N; i++) c[i]=0; 
    printf("Initialization is finished\n"); 
    cudaMemcpy(dev_a, a,N*N*sizeof(int),cudaMemcpyHostToDevice); 
    cudaMemcpy(dev_b, b,N*N*sizeof(int),cudaMemcpyHostToDevice); 
    cudaMemcpy(dev_c, c,N*N*sizeof(int),cudaMemcpyHostToDevice); 
 mult<<<max(1,N/128),128>>>(dev_a,dev_b,dev_c); 
    printf("Done"); 
    cudaMemcpy(c, dev_c,N*N*sizeof(int),cudaMemcpyDeviceToHost); 
    for (int i=0; i<N*N; i++) { 
        if (i%N==0) printf("\n"); 
        printf("%i ",a[i]); 
    } 
    printf("\n"); 
    for (int i=0; i<N*N; i++) { 
        if (i%N==0) printf("\n"); 
        printf("%i ",b[i]); 
    } 
    printf("\n"); 
    for (int i=0; i<N*N; i++) { 
        if (i%N==0) printf("\n"); 
        printf("%i ",c[i]); 
    } 
    _getch();
    cudaFree( dev_a); 
    cudaFree( dev_b); 
    cudaFree( dev_c); 
    free(a); 
    free(b); 
    free(c); 
    return 0; 
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0391 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.