Форум программистов, компьютерный форум CyberForum.ru

Фрактал Джулия - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Danzel
6 / 6 / 3
Регистрация: 21.08.2012
Сообщений: 45
07.09.2012, 18:42     Фрактал Джулия #1
Здравствуйте, решил разобраться с примером по куда из книги Сандерса,вот код:

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
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "gl_helper.h"
#include "cpu_bitmap.h"
#include "book.h"
 
#define DIM 1000
 
struct cuComplex 
{
    double r;
    double i;
    cuComplex( double a, double b) : r(a), i(b) {}   //конструктор
    __device__ double magnitude2(void)
    {
        return r*r+i*i;
    }
    __device__ cuComplex operator+(const cuComplex& a)
    {
        return cuComplex(r+a.r, i+a.i);
    }
 
    __device__ cuComplex operator*(const cuComplex& a)
    {
        return cuComplex(r*a.r-i*a.i, i*a.r+r*a.i);
    }
};  
 
 
 __device__ int julia(int x, int y)
{
    const float scale = 1.5;
    double jx=scale*(double)(DIM/2 - x)/(DIM/2);
    double jy=scale*(double)(DIM/2 - x)/(DIM/2);
    cuComplex  c(-0.8, 0.156);
    cuComplex  a(jx , jy);
 
    int i=0;
    for(i=0;i<200;i++){
        a=a*a + c;
        if(a.magnitude2()>1000)
            return 0;
    }
    return 1;
}
 
 
 __global__ void kernel(unsigned char *ptr){
    //отображаем blockIdx на позицию пикселя
    int x=blockIdx.x;
    int y=blockIdx.y;
    int offset = x+y*gridDim.x;
    //вычисления значения в этой позиции
    int juliaValue=julia(x,y);
    ptr[offset*4 + 0]=255*juliaValue;
    ptr[offset*4 + 1]=0;
    ptr[offset*4 + 2]=0;
    ptr[offset*4 + 3]=255;
}
 
int main(void){
    CPUBitmap bitmap(DIM,DIM);
    unsigned char *dev_bitmap;
    cudaMalloc((void**)&dev_bitmap,bitmap.image_size() );
    dim3 grid(DIM,DIM);
    kernel<<<grid,1>>>(dev_bitmap);
    cudaMemcpy(bitmap.get_ptr(),dev_bitmap,bitmap.image_size(),cudaMemcpyDeviceToHost);
    bitmap.display_and_exit();
    cudaFree(dev_bitmap);
    
}


после компелирования выдает 4 ошибки:
1>c:/Users/ъюы*/Documents/Visual Studio 2008/Projects/julia/julia/main.cu(37): error: calling a host function("cuComplex::cuComplex") from a __device__/__global__ function("julia") is not allowed
1>c:/Users/ъюы*/Documents/Visual Studio 2008/Projects/julia/julia/main.cu(38): error: calling a host function("cuComplex::cuComplex") from a __device__/__global__ function("julia") is not allowed
1>c:/Users/ъюы*/Documents/Visual Studio 2008/Projects/julia/julia/main.cu(42): error: calling a host function("cuComplex::cuComplex") from a __device__/__global__ function("julia") is not allowed
1>c:/Users/ъюы*/Documents/Visual Studio 2008/Projects/julia/julia/main.cu(42): error: calling a host function("cuComplex::cuComplex") from a __device__/__global__ function("julia") is not allowed

с одногрупником попробовали исправить ,но наши старания успехов не принесли,помогите пожалуйста,заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2012, 18:42     Фрактал Джулия
Посмотрите здесь:

Фрактал C++
Matlab Фрактал
Фрактал Turbo Pascal
MathCAD Фрактал
Delphi Фрактал
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.09.2012, 22:35     Фрактал Джулия #2
Цитата Сообщение от Danzel Посмотреть сообщение
C
1
cuComplex( double a, double b) : r(a), i(b) {} //конструктор
это не C
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
07.09.2012, 22:41     Фрактал Джулия #3
Цитата Сообщение от Danzel Посмотреть сообщение
cuComplex( double a, double b) : r(a), i(b) {} //конструктор
попробуй так
C
1
2
3
4
5
cuComplex( double a, double b)
{
 r=a;
 i=b; 
}
хотя не знаю могут ли в С быть конструкторы в структуре в плюсах точно могут
Danzel
6 / 6 / 3
Регистрация: 21.08.2012
Сообщений: 45
08.09.2012, 18:49  [ТС]     Фрактал Джулия #4
Спасибо за советы но это не помогло.

accept - я же писал в начале что это код cuda.

Я уже 3 день ломаю голову как исправить эту ошибку.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
08.09.2012, 19:09     Фрактал Джулия #5
скинь сюда полный проект, покумекаем
Danzel
6 / 6 / 3
Регистрация: 21.08.2012
Сообщений: 45
09.09.2012, 17:21  [ТС]     Фрактал Джулия #6
Все я разобрался с программой,спасибо всем,но только теперь ошибка с выводом на экран,

ссылка на неразрешенный внешний символ __imp____glutCreateWindowWithExit@8 в функции "public: void __thiscall CPUBitmap::display_and_exit(void (__cdecl*)(void *))" (?display_and_exit@CPUBitmap@@QAEXP6AXPAX@Z@Z)

щас по инету полазаю ,думаю что исправлю))
monochromer
 Аватар для monochromer
375 / 343 / 133
Регистрация: 03.01.2013
Сообщений: 903
20.05.2013, 17:34     Фрактал Джулия #7
Danzel, а в чем ошибка-то была? Поделитесь найденным решением.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 22:15     Фрактал Джулия
Еще ссылки по теме:

фрактал C#
фрактал ньютона Mathematica
C++ Фрактал (множество) Жюлиа

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

Или воспользуйтесь поиском по форуму:
monochromer
 Аватар для monochromer
375 / 343 / 133
Регистрация: 03.01.2013
Сообщений: 903
09.06.2013, 22:15     Фрактал Джулия #8
Кстати, правильнее говорить не "Джулия", а фрактал Жюлиа с ударением на последний слог. Это же фамилия французского математика.
Yandex
Объявления
09.06.2013, 22:15     Фрактал Джулия
Ответ Создать тему
Опции темы

Текущее время: 15:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru