Установите OpenCL / Pyopencl на Ubuntu 14.04

Существует множество инструкций о том, как запустить OpenCL в Ubuntu, но все они устарели (> 4 года) или просто не работают.

Существует ли какой-либо текущий рабочий учебник о том, как запустить открытый CL в Ubuntu (14.04 или 15.04)?

Я пытался следовать этой инструкции, но мне интересно, лучше ли будет устанавливать его с конвертированных * оборотов в минуту, так как это похоже на взлом.

3
задан 21 September 2015 в 22:43

2 ответа

Если Вы хотите кодировать на своем ЦП/GPU, руководство AMD является, вероятно, хорошим местом для запуска. Для получения драйверов OpenCL, работающих над компьютером с APU/GPU AMD, просто необходимо установить fglrx драйвер от центра программного обеспечения. Чтобы протестировать ту его работу и написать код, можно также хотеть APP AMD SDK.

я использовал версию 3.0 SDK от сайт AMD . Руководство по установке здесь . После того как у Вас есть он, можно следовать за их руководство по программированию .

Вот один из ранних примеров, измененных для простого распечатывания количества, вычисляют единицы на машинах GPU:

            //
            // Copyright (c) 2010 Advanced Micro Devices, Inc. All rights reserved.
            // Modified by Aedazan for learning purposes.
            // Uploaded as fair use teaching material 17 U.S. Code § 107.
            // A minimalist OpenCL program.
            #include <CL/cl.h>
            #include <stdio.h>

            #define NWITEMS 512


            // A simple memset kernel

            //const char *source = "__kernel void memset( __global uint *dst ) \n" "{ \n" " dst[get_global_id(0)] = get_global_id(0);  \n" "} \n";
            const char *source = "__kernel void memset( __global uint *dst ) " "{ " " dst[get_global_id(0)] = get_global_id(0)*get_global_id(0);" 
            ""
            "\n" "} \n";


            int main(int argc, char ** argv)
            {
            // 1. Get a platform.
            cl_platform_id platform;
            clGetPlatformIDs( 1, &platform, NULL );
            // 2. Find a gpu device.
            cl_device_id device;
            cl_uint compute_units;
            clGetDeviceIDs( platform, CL_DEVICE_TYPE_GPU,1,&device,NULL);
            clGetDeviceInfo( device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(cl_uint), &compute_units, NULL);
            printf("Compute units: %d\n", compute_units);

            // 3. Create a context and command queue on that device.
            cl_context context = clCreateContext( NULL, 1, &device, NULL, NULL, NULL);
            cl_command_queue queue = clCreateCommandQueue( context, device, 0, NULL );
            // 4. Perform runtime source compilation, and obtain kernel entry point.
            cl_program program = clCreateProgramWithSource( context, 1, &source, NULL, NULL );
            clBuildProgram( program, 1, &device, NULL, NULL, NULL );
            cl_kernel kernel = clCreateKernel( program, "memset", NULL );
            // 5. Create a data buffer.
            cl_mem buffer = clCreateBuffer( context, CL_MEM_WRITE_ONLY, NWITEMS * sizeof(cl_uint), NULL, NULL );

            // 6. Launch the kernel. Let OpenCL pick the local work size.
            size_t global_work_size = NWITEMS;
            clSetKernelArg(kernel, 0, sizeof(buffer), (void*) &buffer);
            clEnqueueNDRangeKernel( queue,
            kernel,
            1,
            NULL,
            &global_work_size,
            NULL, 0, NULL, NULL);
            clFinish( queue );
            // 7. Look at the results via synchronous buffer map.
            cl_uint *ptr;
            ptr = (cl_uint *) clEnqueueMapBuffer( queue, buffer, CL_TRUE, CL_MAP_READ, 0, NWITEMS * sizeof(cl_uint), 0, NULL, NULL, NULL );
            int i;
            for(i=0; i < NWITEMS; i++)
            //printf("%d %d\n", i, ptr[i]);
            return 0;
            }

можно скомпилировать его со следующей строкой. Это предполагает установку SDK как корня в местоположения по умолчанию.

gcc -o computec.bin -I /opt/AMDAPPSDK-3.0/include/ -L /opt/AMDAPPSDK-3.0/lib/x86_64/ test.c -lOpenCL
0
ответ дан 22 September 2015 в 08:43
  • 1
    Попытайтесь загрузиться в живую установку, смонтируйте свою старую систему под/mnt, chroot в него с ' sudo chroot/mnt' и затем разрешение и выполненный это. Chrooting в Вашу старую систему похож на наличие терминала к нему, Вы просто получили его с помощью другой установки. – Kyle H 12 December 2016 в 01:26

Мы обновляли наш статья ежегодно, таким образом, она должна все еще работать. Да, Вы должны "посторонний объект" об/мин для получения его на Ubuntu.

0
ответ дан 22 September 2015 в 08:43
  • 1
    Спасибо я разрешил свою проблему. Я действительно следовал Вашим инструкциям для монтирования моей старой системы под/mnt. Но после этого, я создаю резервную копию своего важного файла к моему устройству хранения данных Окна, и я тогда решил установить новую систему снова:-?. Это, вероятно, не хорошая идея. Но как я не полностью получил Ваше решение как то, почему, выполняя NVIDIA... выполненную - удаление разрешит мою проблему. Так или иначе, благодарит поддерживать меня. – Brian 14 December 2016 в 20:29

Другие вопросы по тегам:

Похожие вопросы: