Raycaster не работает с OpenCL

На данный момент я пытаюсь написать движок raycaster с OpenCL и Java (LWJGL).

Однако при запуске ядра я не могу печатать или писать в переменную отладки, если на то пошло. У меня такое ощущение, что ядро ​​резко отключается, также с учетом того, что время, о котором сообщалось (вне opencl), показывает очень быстрые результаты (60 кадров в секунду), быстрее, чем в примере Мандельброта!

Я смотрю на gDEBugger, но не думаю, что он будет поддерживать Java.

Любые комментарии по моему коду также очень приветствуются, так как я новичок. Также приветствуются комментарии к моей математике raycast.

#ifdef USE_TEXTURE
    #define OUTPUT_TYPE __write_only image2d_t
#else
    #define OUTPUT_TYPE global uint *
#endif

#define MAX_RAY_LENGTH 1024


bool isSolid(int x, int y, int z, global uchar *objectIsSolidStorage, int width, int height, int depth) {
    uint placex = x / 8;
    uint placey = y / 8;
    uint placez = z / 8;

    uint widthbychar = (width/8);
    uint heightbychar = (height/8);
    int calcbychar = placex + placey * widthbychar + placez * widthbychar * heightbychar;

    int leftover = x % 8;
    uchar solidchar = objectIsSolidStorage[calcbychar];

    if (x > width || y > height || z >> depth ||
        x < 0 || y < 0 || z < 0) return 1;

    if ((solidchar & ( 1 << leftover )) >> leftover) {
        return 1;
    }
    return 0;
}

int getColor(int x, int y, int z)
{
        return 0xFFFFFFFF;
}

kernel void raycast(
        const int width,
        const int height,
        const float positionX,
        const float positionY,
        const float positionZ,
        const float directionX,
        const float directionY,
        const float directionZ,
        OUTPUT_TYPE output,
        global uchar *objectIsSolidStorage,
        const int objectStorageWidth,
        const int objectStorageHeight,
        const int objectStorageDepth,
        global uint *objectColorStorage,
        global uint *smallObjectsMap,
        global uint *hangableObjectsMap,
        global uint *largeObjectsMap,
        const int objectMapWidth,
        const int objectMapHeight,
        const float frustrumAngleX,
        const float frustrumAngleY,
        global char debug
) {

    unsigned int rayx = get_global_id(0);
    unsigned int rayy = get_global_id(1);

    bool hit = false;
    int itr = 0;
    float x = positionX;
    float y = positionY;
    float z = positionZ;

    printf("work");
    int addX = (rayx - width / 2) * frustrumAngleX;
    int addY = (rayy - height / 2) * frustrumAngleY;
    int color = 0xFFAAFF;
    while(!hit) {
        x += addX;
        y += addY;
        z += itr;
        if (MAX_RAY_LENGTH < itr) {
            hit = true;
            color = 0xFFFFFFFF;
            break;
        } else if (isSolid(x,y,z,objectIsSolidStorage,objectStorageWidth,objectStorageHeight,objectStorageDepth)) {
            hit = true;
            color = 0xAAAAAAAA;
            break;
        }
        itr++;
    }

    #ifdef USE_TEXTURE
        float4 oc = (float4)(
            (c & 0xFF) >> 0,
            (c & 0xFF00) >> 8,
            (c & 0xFF0000) >> 16,
            255.0f
        );
        write_imagef(output, (int2)(rayx, rayy), color / 255.0f);
    #else
        output[rayy * width + rayx] = color;
    #endif
}

person RobotRock    schedule 12.07.2011    source источник
comment
Какую реализацию OpenCL вы используете?   -  person Dr. Snoopy    schedule 13.07.2011
comment
OpenCL 1.1 на Intel x86-64. Он основан на JOCL (Java OpenCL) в LWJGL.   -  person RobotRock    schedule 13.07.2011
comment
извини но это не правильно. Привязка Java LWJGL к CL не основана на JOCL.   -  person mbien    schedule 10.08.2011


Ответы (2)


это должно быть применимо для вашей разработки OpenCL + java: присоединяйтесь к процессу java и отлаживайте ядра OpenCL с помощью простого

http://suhorukov.blogspot.com/2011/12/opencl-kernel-debugging-for-java-host.html

person Igor Suhorukov    schedule 03.12.2011

вы можете запустить его на процессоре для отладки (расширение amd)

#pragma OPENCL EXTENSION cl_amd_printf : enable

person mbien    schedule 12.07.2011
comment
ЖУРНАЛ ПОСТРОЕНИЯ:: 9:26: предупреждение: ожидаемый идентификатор в '#pragma OPENCL' - игнорируется Я использую #pragma OPENCL EXTENSION cl_intel_printf : включить, так как я на процессоре Intel - person RobotRock; 12.07.2011