Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.99.24] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер, у меня HP ProBook 4515s (ATI Radeon 4330)прочел в документах что есть поддержка OpenCL1.1, установил SDK, протестил в Geeks GPU Caps Viewer показывает следующую инфу: OpenCL 1.1 AMD-APP-SDK-v2.5 (732.1) - CU: 2 @ 2300MHz , ну все круто, открываю VS 2010 создаю консольное приложение на плюсах (С++) и пихаю туда этот код:
/ // Hello World for OpenCL // Copyright 2009 David Black-Schaffer // #include "OpenCL/opencl.h" #include <stdlib.h> #include <stdio.h> #define LENGTH 10240 // Define our kernel. It just calculates the sin of the input data. char *source = { "kernel calcSin(global float *data) {\n" " int id = get_global_id(0);\n" " data[id] = sin(data[id]);\n" "}\n" }; // Note: there is no error handling here. This is bad practice in general. int main (int argc, const char * argv[]) { // OpenCL Objects cl_device_id device; cl_context context; cl_command_queue queue; cl_program program; cl_kernel kernel; cl_mem buffer; // Create and initialize the input data cl_float *data; data = (cl_float*)malloc(sizeof(cl_float)*LENGTH); for (int i=0; i<LENGTH; i++) data[i] = i; // Setup OpenCL clGetDeviceIDs(NULL, CL_DEVICE_TYPE_DEFAULT, 1, &device, NULL); context = clCreateContext(NULL, 1, &device, NULL, NULL, NULL); queue = clCreateCommandQueue(context, device, (cl_command_queue_properties)0, NULL); // Setup the input buffer = clCreateBuffer(context, CL_MEM_COPY_HOST_PTR, sizeof(cl_float)*10240, data, NULL); // Build the kernel program = clCreateProgramWithSource(context, 1, (const char**)&source, NULL, NULL); clBuildProgram(program, 0, NULL, NULL, NULL, NULL); kernel = clCreateKernel(program, "calcSin", NULL); // Execute the kernel clSetKernelArg(kernel, 0, sizeof(buffer), &buffer); size_t global_dimensions[] = {LENGTH,0,0}; clEnqueueNDRangeKernel(queue, kernel, 1, NULL, global_dimensions, NULL, 0, NULL, NULL); // Read back the results clEnqueueReadBuffer(queue, buffer, CL_TRUE, 0, sizeof(cl_float)*LENGTH, data, 0, NULL, NULL); // Clean up clReleaseMemObject(buffer); clReleaseKernel(kernel); clReleaseProgram(program); clReleaseCommandQueue(queue); clReleaseContext(context); // Print out the results for (int i=0; i<LENGTH; i++) printf("sin(%d) = %f\n", i, data[i]); free(data); } Но компилятор ругается на подключенную либу, а именно на эту строку: #include "OpenCL/opencl.h" и соответственно на все API openCL тоже (((. Может я что-то делаю не так? Подскажите пожалуйста, хочу разобраться а инфы в интернете мало p.s. спасибо |
Сообщ.
#2
,
|
|
|
Цитата war13 @ Но компилятор ругается на подключенную либу, а именно на эту строку: #include "OpenCL/opencl.h" Это не на подключенную либу, а на ненайденый хидер. В свойствах проекта, настройках компиляции найди Additional include directories, и добавь туда путь к папке, где у тебя лежат хидеры. Я не знаю структуры файлов там в openCL, но допустим, что он у тебя установлен в C:\Program files\OpenCL, следовательно, где-то в этой папке должна быть папка include или что-то подобное, где должна располагаться папка OpenCL, и в которой должны располагаться хидеры. Следовательно, получается, что хидеры лежат в C:\Program files\OpenCL\include\OpenCL. Нужно прописать в Additional Include Directories строку C:\Program files\OpenCL\include\ |
Сообщ.
#3
,
|
|
|
Вот когда перестанет ругаться на ненайденный хидер и откомпилится, тогда, возможно будет ругаться на ненайденные при сборке имена - вот это и будет неподключение либы.
Если такое произойдет, можно просто добавить нужную либу к списку используемых. |
Сообщ.
#4
,
|
|
|
war13, почему ты не используешь C++-обертку над OpenCL API от AMD?
|
Сообщ.
#5
,
|
|
|
Короче я не верно задал вопрос), я установил дрова, и сдк,потом протестил в Geeks GPU Caps Viewer и там показано что есть OpenCL, однако я не могу найти на компе папку OpenCl, CL, итд, все что есть это opencl.dll все , может кто сталкивался с этим и может что нить посоветовать ?
|
Сообщ.
#6
,
|
|
|
Цитата B.V. @ почему ты не используешь C++-обертку над OpenCL API от AMD? о чем речь? |
Сообщ.
#8
,
|
|
|
B.V., спасибо. а то я что-то не мог понять, это стандартная обертка, или созданная AMD.
|
Сообщ.
#9
,
|
|
|
Инструкция по настройке зависимостей OpenCL в Visual Studio 2010 можно посмотреть тут Ссылка , материал не идеальная инструкция , но с места сдвинутся поможет! , у меня первая прога по определению устройств и их типов скомпилировалась!
|