Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Утка
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 26
#1

Не вызывается функция

06.06.2017, 01:20. Просмотров 150. Ответов 2
Метки нет (Все метки)

Здравствуйте. Не понимаю почему, но код работает, а программа даже не заходит в функцию. В чем может быть ошибка?
Перепробовала всё, но вроде функция вызывается правильно. Подскажите, пожалуйста, что я не вижу?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
__global__ void func(int n, float *a, float *b, float *c, float *f, float *x)
{
    
    int j = blockDim.x* blockIdx.x + threadIdx.x;
    int r = j*n;
    float m;
    __shared__ float *abuf;
    __shared__ float *bbuf;
    __shared__ float *cbuf;
    __shared__ float *fbuf;
    __shared__ float *xbuf;
 
    for (int i = 1; i < n*s; i++)
    {
        abuf[i] = a[blockIdx.x*z + i];
        __syncthreads();
        
    }
    for (int i = 0; i < (n - 2)*s; i++)
    {
        
        bbuf[i] = b[blockIdx.x*z + i];
        __syncthreads();
        
    }
    for (int i = 0; i < (n - 1)*s; i++)
    {
        
        cbuf[i] = c[blockIdx.x*z + i];
        __syncthreads();
        
    }
    for (int i = 0; i < n*s; i++)
    {
        
        fbuf[i] = f[blockIdx.x*z + i];
        __syncthreads();
        
    }
    for (int i = 0; i < n*s; i++)
    {
        
        xbuf[i] = x[blockIdx.x*z + i];
        __syncthreads();
        
    }
    for (int q = 1; q < z; q++)
    {
        m = abuf[q + r] / cbuf[q - 1 + r];
        cbuf[q + r] = cbuf[q + r] - m*bbuf[q - 1 + r];
        fbuf[q + r] = fbuf[q + r] - m*fbuf[q - 1 + r];
        __syncthreads();
        
    }
 
    xbuf[n - 1 + r] = fbuf[n - 1 + r] / cbuf[n - 1 + r];
    __syncthreads();
    
    
 
    for (int q = n - 2; q >= 0; q--){
        xbuf[q + r] = (fbuf[q + r] - bbuf[q + r] * xbuf[q + 1 + r]) / cbuf[q + r];
        __syncthreads();
        
    }
}
int main()
{
    
    int i;
    float *a, *b, *c, *f, *x;
    float *deva, *devb, *devc, *devf, *devx;
    int size = sizeof( float) * n*z;
    int k = z / s;
    a = (float *)malloc(size);
    b = ( float *)malloc(size);
    c = ( float  *)malloc(size);
    f = ( float  *)malloc(size);
    x = (float  *)malloc(size);
    
    for (i = 0; i < n*z; i++) {
        a[i] = 1;
        b[i] = 2;
        c[i] = 3;
        f[i] = 4;
    }
    for (int j = 0; j < n; j++){
        a[j*n] = 0;
        b[n - 1 + j*n] = 0;
    }
    
    
    cudaMalloc((void **)&deva, size);
    cudaMalloc((void **)&devb, size);
    cudaMalloc((void **)&devc, size);
    cudaMalloc((void **)&devf, size);
    cudaMalloc((void **)&devx, size);
    cudaMemcpy(deva, a, size, cudaMemcpyHostToDevice);
    cudaMemcpy(devb, b, size, cudaMemcpyHostToDevice);
    cudaMemcpy(devc, c, size, cudaMemcpyHostToDevice);
    cudaMemcpy(devf, f, size, cudaMemcpyHostToDevice);
    
    cudaEvent_t start, stop;
    float gpuTime = 0.0f;
    cudaEventCreate(&start);
    cudaEventCreate(&stop);
    cudaEventRecord(start, 0);
 
    func << <k, s >> > (n, deva, devb, devc, devf, devx);
 
    cudaEventRecord(stop, 0);
    cudaEventSynchronize(stop);
    cudaMemcpy(x, devx, size, cudaMemcpyDeviceToHost);
    cudaEventElapsedTime(&gpuTime, start, stop);
    printf("time na GPU: %.10f seconds\n", gpuTime / 1000);
    
    cudaFree(deva); cudaFree(devb); cudaFree(devc); cudaFree(devf); cudaFree(devx);
    free(a); free(b); free(c); free(f); free(x);
    unsigned int time = clock();
    
    
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2017, 01:20
Ответы с готовыми решениями:

Не вызывается функция?
int main() { cout&lt;&lt;&quot;Let's go!\n\n\n&quot;; int Fill_array(); } int...

Не вызывается функция
Здравствуйте. Не работает условие в цикле. Просто не вызывается функция prior....

Не вызывается функция
Когда код функции находился в главной функции, то выполнялся без нареканий(не...

Не вызывается функция GetComputerName
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; #ifndef _MAC ...

Не вызывается дружественная функция
Создал класс, есть дружественная функция: int NOD(int a,int b) { ...

2
nmcf
06.06.2017, 08:49
  #2

Не по теме:

Что это за синтаксис в 109-й строке?

0
Утка
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 26
06.06.2017, 08:57  [ТС] #3
Это как раз вызов функции ядра,которая выполняет подсчёт элементов. К- количество блоков,s- количество нитей в блоке,которые проводят расчёт.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2017, 08:57

Функция не вызывается 2й раз
Смысл - функция служит для записи числа в массив (посимвольно) int*...

Не вызывается функция из функции
Добрый вечер! Пытаюсь вызвать функцию add из функции i, но вылезает ошибка. В...

Когда какая функция вызывается?
Вот две функции const Item &amp;figure::operator (int i) const { cout &lt;&lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru