Openclначало работы с opencl

Примеры

Пример вычисления БПФ:

  // создание вычислительного контекста для GPU (видеокарты)
  context = clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU, NULL, NULL, NULL);

  // создание очереди команд
  queue = clCreateCommandQueue(context, NULL, , NULL);

  // выделение памяти в виде буферов
  memobjs = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(float)*2*num_entries, srcA, NULL);
  memobjs1 = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(float)*2*num_entries, NULL, NULL);

  // создание программы из исходных текстов
  program = clCreateProgramWithSource(context, 1, &fft1D_1024_kernel_src, NULL, NULL);

  // компиляция программы
  clBuildProgram(program, , NULL, NULL, NULL, NULL);

  // создание объекта kernel из скомпилированной программы
  kernel = clCreateKernel(program, "fft1D_1024", NULL);

  // подготовка аргументов
  clSetKernelArg(kernel, , sizeof(cl_mem), (void *)&memobjs]);
  clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&memobjs1]);
  clSetKernelArg(kernel, 2, sizeof(float)*(local_work_size+1)*16, NULL);
  clSetKernelArg(kernel, 3, sizeof(float)*(local_work_size+1)*16, NULL);

  // задание N-D диапазона с размерностями work-item и отправка в очередь исполнения
  global_work_size = num_entries;
  local_work_size = 64;
  clEnqueueNDRangeKernel(queue, kernel, 1, NULL, global_work_size, local_work_size, , NULL, NULL);

Непосредственные вычисления (основаны на отчете «Fitting FFT onto the G80 Architecture»):

  // Данный код вычисляет FFT длины 1024, путём разбиения на 16, 16 и 4

  __kernel void fft1D_1024 (__global float2 *in, __global float2 *out,
                          __local float *sMemx, __local float *sMemy) {
    int tid = get_local_id();
    int blockIdx = get_group_id() * 1024 + tid;
    float2 data16];

    // адрес начала обрабатываемых данных в глобальной памяти
    in = in + blockIdx;  out = out + blockIdx;

    globalLoads(data, in, 64); // coalesced global reads
    fftRadix16Pass(data);      // in-place radix-16 pass
    twiddleFactorMul(data, tid, 1024, );

    // локальная перестановка с использованием локальной памяти
    localShuffle(data, sMemx, sMemy, tid, (((tid & 15) * 65) + (tid >> 4)));
    fftRadix16Pass(data);               // in-place radix-16 pass
    twiddleFactorMul(data, tid, 64, 4); // twiddle factor multiplication

    localShuffle(data, sMemx, sMemy, tid, (((tid >> 4) * 64) + (tid & 15)));

    // 4 вызова БПФ порядка 4
    fftRadix4Pass(data);      // radix-4 function number 1
    fftRadix4Pass(data + 4);  // radix-4 function number 2
    fftRadix4Pass(data + 8);  // radix-4 function number 3
    fftRadix4Pass(data + 12); // radix-4 function number 4

    // coalesced global writes
    globalStores(data, out, 64);
  }

Полноценная реализация БПФ на OpenCL доступна на сайте Apple.

Develop OpenCL™ Applications

Tools to develop OpenCL applications for Intel Processors

Intel oneAPI: DPC++ Compiler

  • DPC++/SYCL programs can run SYCL kernels by way of underlying OpenCL implementations.
  • OpenCL-C kernels can also be directly ingested and run by a SYCL runtime. Users of the OpenCL C++ API wrapper may find the SYCL specification particularly appealing.
  • As of article publication, this compiler is in Beta.

Intel System Studio

  • For compilation, cross-platform, IoT, power considerate development, and performance analysis.
    • OpenCL development tools component:
      • Develop OpenCL applications targeting Intel Xeon Processors, Intel Core Processors, and/or Intel Graphics Technology.
      • Develop applications with expanded IDE functionality, debug, and analysis tools.
      • Earlier versions of the SDK contain an experimental OpenCL 2.1 implementation. Intel CPU Runtime for OpenCL Applications 18.1 was intended as a replacement for the experimental implementation.
  • Visit the Intel System Studio portal

Intel SDK for OpenCL Applications

  • Standalone distribution of Intel System Studio: OpenCL Tools component.
  • Develop OpenCL Applications targeting Intel Xeon Processors, Intel Core Processors, and/or Intel Graphics Technology.
  • Develop applications with expanded IDE functionality, debug, and analysis tools.
    • Note: Some debug and analysis features have been removed from recent versions of the SDK.
    • Earlier versions of the SDK contain an experimental OpenCL 2.1 implementation suitable for development testing on CPU OpenCL targets. Intel CPU Runtime for OpenCL Applications 18.1 was intended as a replacement for that experimental implementation.
  • See release notes, requirements, and download links through the Intel SDK for OpenCL Applications portal.

Intel FPGA SDK for OpenCL Software Technology

  • Build OpenCL Applications and OpenCL kernels for Intel FPGA devices.
  • See release notes, requirements, and download links through the SDK’s portal webpage.
  • For OpenCL runtimes and required system drivers, visit Download Center for FPGAs.

Intel Distribution of OpenVINO toolkit

  • The Intel Distribution of OpenVINO toolkit is available for vision and deep learning inference. It benefits from OpenCL acceleration for each of these components:

    • Intel Deep Learning Deployment Toolkit
    • OpenCV
    • OpenVX*
  • The Intercept Layer for Debugging and Analyzing OpenCL Applications (clIntercept) can intercept, report, and modify OpenCL API calls.
  • No application-level modifications nor OpenCL implementation modifications are necessary.
  • clIntercept functionality can supplement removed functionality from recent releases of the Intel SDK for OpenCL Applications.

Часть пятая — Тестирование и замеры производительности

Вот и пришло время запустить приложение, оценить производительность и сделать некоторые выводы.

Итак, приступим к разбору результатов, а результаты, надо сказать, очень даже впечатляющие. GPU на ноутбуке в ~110X быстрее хоста, а на десктопе и вовсе в ~340X быстрее, впечатляющий результат, однако. Перед тем, как в меня начнут бросать тапки и говорить, что такое сравнение не правильное, я скажу, что в нем действительно есть несколько лукавств, но не более того.

Во-первых, я мы тут не учитываем время копирования данных на устройство и обратно. С одной стороны, это неправильно, так как с учетом копирования все может выглядеть не так радостно. С другой стороны, копирование можно выполнять одновременно с вычислениями, а может его и вовсе не нужно производить, если данные уже находятся на устройстве. В общем все далеко не так однозначно и зависит от конкретной задачи.

Во-вторых, помните как выглядел математический код? Для тех, кто не смотрел на него, скажу, что это много много математических операций над одними и теми же данными, причем получился он путем простого копипаста и замены цифр в коэффициентах, а изначально он был проще и занимал всего одну строку, только вот когда я начал тестировать, результаты были не такие радостные, GPU было всего в 4-5 раз быстрее. Как думаете, почему? (вопрос риторический, можно не думать:)). А все просто, мы уперлись в производительность памяти. Я надеюсь, что попозже у меня дойдут руки и я напишу статью о взаимосвязи производительности памяти и процессора, но это отдельная история, в этой статье нам интересен лишь тот факт, что с данным ядром у нас получился чистый тест арифметической производительности процессора.

Учитывая эти два момента, можно сказать, что GPU действительно в сотни раз быстрее не-параллельного кода на CPU для чистой арифметики, что в целом, соответствует разнице в теоретической производительности. (Еще одна надежда на то, что дойдут руки замерить реальные цифры и их соответствие теории для другой статьи).

Но о том, что GPU быстро считает мы знаем, а в результате нашего теста получилось, что и CPU выполняет OpenCL код довольно быстро, если быть точным, то в 13X и 25Х раз быстрее, чем обычный код скомпилированный MSVC10 с дефолтными настройками. Давайте разбираться, как так получается и откуда взялись эти цифры.

Оба процессора содержат 4 реальных и 8 виртуальных ядер, а OpenCL как раз и сделан для того, чтобы все ядра использовать, но улучшение у нас гораздо больше, чем 4Х. А тут надо сказать спасибо Intel, которая в своей реализации OpenCL, добавила поддержку автоматической векторизации, т.е. без каких-либо изменений в коде, OpenCL использует SSE или AVX, в зависимости от того, что доступно. Учитывая, что SSE у нас 128битное, а AVX работает с 256битами, получается, что производительность должна подняться в 16X и 32X соответственно. Это уже ближе к истине, но все еще не совсем точное совпадение. А дальше нам надо вспомнить о такой радостной штуке, как TurboBoost. Процессоры эти работают на частотах 1,73GHz/3,06GHz (ноутбук) и 3,4GHz/3,8GHz (десктоп), но по факту могу сказать, что частота ноутбучного процессора скачет от 1,73 до 2,8 непрерывно, да и греется он весьма сильно (тут следует бросить большой каметь в Dell за кривую систему охлаждения), поэтому реально во время теста частоты 3,06GHz сколь нибудь значимое время мы не увидим. Плюс не надо забывать, что практический результат всегда меньше теоретически возможного (десктоп по идее должен работать быстрее), но как мы видим, 25Х улучшение производительности можно получить практически бесплатно на одном и том же железе.

opencl.dll Dosya Özellikleri

Versiyon Bit Boyut Açıklama İşletim Sistemi Dosya
24.20.11021.1000 64 Bit 74.1 KB OpenCL Client DLL Windows 10, 8.1, 8, 7, Vista, XP İndir
23.20.793.1024 64 Bit 72 KB OpenCL Client DLL Windows 10, 8.1, 8, 7, Vista, XP İndir
1.2.11.0 32 Bit 22.3 KB OpenCL Client DLL Windows 10, 8.1, 8, 7, Vista, XP İndir
1.0.0.0 32 Bit 26.7 KB OpenCL Client DLL Windows 10, 8.1, 8, 7, Vista, XP İndir

İşletim sistemi 32 bit olan kullanıcılar indirme sırasında indirdikleri DLL dosyasının 32 bit, 64 bit kullanıcılar ise 64 bit olarak indirdiklerine emin olması gerekmektedir. Bilgisayarınızdaki Windows sürümü 32 bit mi, yoksa 64 bit mi? bilmiyorsanız Windows Sürümüm 32 Bit mi, Yoksa 64 Bit mi? sayfasına girerek öğrenebilirsiniz. sırasında anlatılan yöntemleri sırası ile paragraf, paragraf okuyunuz ve bilgisayarınızda anlatılan şekilde uygulayınız.

DLL uyarısını kaldıramayan kullanıcıların sıklıkla yapmış olduğu eksiklik, işlemleri okumamalarından kaynaklandığı gözlemlenmiştir. Sayfa içerisinde bulunan yöntemleri dikkatli olarak okumanızı, anlamadığınız işlemleri alanından sormanızı tavsiye ediyoruz.

Часть вторая — Инициализация OpenCL

Итак, терпеливые дочитали до этой части и обрадовались, что начинается интересное, а нетерпеливые этого чувства испытать не смогут, они прошлый абзац пропустили:)

Сначала я скажу о том, что OpenCL Runtime API представляет из себя именно API для C, а не для C++. В целом, в этом нет ничего плохого кроме того, что для проверки ошибок надо проверять код, возвращаемый каждой функцией и это не очень удобно. А также надо вручную следить за освобождением выделенных ресурсов.
Но есть также и официальная C++ обертка (ее можно найти на сайте Khronos), которая представляет из себя набор классов, соответствующих объектам OpenCL и поддерживающим подсчеты ссылок (reference counting который) и бросание исключений в случае ошибок (исключения надо включать при помощи #define __CL_ENABLE_EXCEPTIONS). Вот эту самую обертку я и буду использовать в нашем тесте.

Итак первым делом мы получаем список доступных платформ:

Платформа в OpenCL соответствует вендору, т.е. у NVidia будет одна платформа с ее устройствами, у Intel другая итд итп. В моем случае мне доступны как раз две платформы NVidia и Intel.

Сразу еще один маленький трюк, C++ wrapper может пользоваться своими собственными векторами (если ему об этом сказать) или векторами из STD, так что если где-то в примерах попадется что-то вроде cl::vector, не пугайтесь, он знает оба формата.

После того как мы получили список платформ, для каждой платформы мы получаем список доступных устройств:

Собственно устройства — это то, что будет выполнять наши вычисления. Это может быть и GPU, и CPU и какой-то специальный ускоритель, который подключен к хосту, т.е. той системе, на которой запускается OpenCL. Вместо CL_DEVICE_TYPE_ALL можно передать CL_DEVICE_TYPE_GPU, тогда он будет выдавать только видеокарты или CL_DEVICE_TYPE_CPU для центральных процессоров.

Для каждого найденного устройства я запускаю тест, о котором расскажу чуть ниже, и пытаюсь отловить исключения, которые бросит OpenCL в случае проблем, а если все прошло хорошо, то CheckResults сравнивает результаты с теми, которые мы насчитали в первой части на хосте и рассчитывает статистику ошибок.

Причины ошибок в файле Opencl64.dll

Большинство ошибок opencl64.dll связано с отсутствием или повреждениями файлов opencl64.dll. Тот факт, что opencl64.dll – внешний файл, открывает возможность для всяческих нежелательных последствий.

Непредвиденные завершения работы вашего компьютера или заражение вирусом может повредить opencl64.dll, что приведет к ошибкам dll. Когда файл opencl64.dll повреждается, он не может быть нормально загружен и выведет сообщение об ошибке.

В других случаях ошибки файла opencl64.dll могут быть связаны с проблемами в реестре Windows. Нерабочие ссылки DLL файлов могут помешать зарегистрировать файл dll должным образом и вызвать ошибку opencl64.dll. Эти нерабочие ключи реестра могут появиться в результате отсутствия файла DLL, перемещения файла DLL или ввиду наличия остаточной ссылки DLL файла в реестре Windows после неудачной установки или удаления программы.

Более конкретно, данные ошибки opencl64.dll могут быть вызваны следующими причинами:

  • Ошибочные или поврежденные записи реестра для opencl64.dll
  • Вирус или вредоносное ПО, повредившее файл opencl64.dll.
  • Отказ оборудования Avid Technology, Inc., например, некачественный жесткий диск, вызвавший повреждение файла opencl64.dll.
  • Другая программа изменила требуемую версию opencl64.dll.
  • Другая программа злонамеренно или по ошибке удалила файл opencl64.dll.
  • Другая программа удалила файл opencl64.dll.

Develop OpenCL™ Applications

Tools to develop OpenCL applications for Intel Processors

Intel oneAPI: DPC++ Compiler

  • DPC++/SYCL programs can run SYCL kernels by way of underlying OpenCL implementations.
  • OpenCL-C kernels can also be directly ingested and run by a SYCL runtime. Users of the OpenCL C++ API wrapper may find the SYCL specification particularly appealing.
  • As of article publication, this compiler is in Beta.

Intel System Studio

  • For compilation, cross-platform, IoT, power considerate development, and performance analysis.
    • OpenCL development tools component:
      • Develop OpenCL applications targeting Intel Xeon Processors, Intel Core Processors, and/or Intel Graphics Technology.
      • Develop applications with expanded IDE functionality, debug, and analysis tools.
      • Earlier versions of the SDK contain an experimental OpenCL 2.1 implementation. Intel CPU Runtime for OpenCL Applications 18.1 was intended as a replacement for the experimental implementation.
  • Visit the Intel System Studio portal

Intel SDK for OpenCL Applications

  • Standalone distribution of Intel System Studio: OpenCL Tools component.
  • Develop OpenCL Applications targeting Intel Xeon Processors, Intel Core Processors, and/or Intel Graphics Technology.
  • Develop applications with expanded IDE functionality, debug, and analysis tools.
    • Note: Some debug and analysis features have been removed from recent versions of the SDK.
    • Earlier versions of the SDK contain an experimental OpenCL 2.1 implementation suitable for development testing on CPU OpenCL targets. Intel CPU Runtime for OpenCL Applications 18.1 was intended as a replacement for that experimental implementation.
  • See release notes, requirements, and download links through the Intel SDK for OpenCL Applications portal.

Intel FPGA SDK for OpenCL Software Technology

  • Build OpenCL Applications and OpenCL kernels for Intel FPGA devices.
  • See release notes, requirements, and download links through the SDK’s portal webpage.
  • For OpenCL runtimes and required system drivers, visit Download Center for FPGAs.

Intel Distribution of OpenVINO toolkit

  • The Intel Distribution of OpenVINO toolkit is available for vision and deep learning inference. It benefits from OpenCL acceleration for each of these components:

    • Intel Deep Learning Deployment Toolkit
    • OpenCV
    • OpenVX*
  • The Intercept Layer for Debugging and Analyzing OpenCL Applications (clIntercept) can intercept, report, and modify OpenCL API calls.
  • No application-level modifications nor OpenCL implementation modifications are necessary.
  • clIntercept functionality can supplement removed functionality from recent releases of the Intel SDK for OpenCL Applications.

DLL Yükleme

opencl.dll Eksik

  • İndirdiğiniz DLL dosyasını hata aldığınız bilgisayarınızda sıkıştırılmış halden Winrar yardımı ile açınız. Klasör içerisinde bulunan tek DLL dosyasını Mouse ile sağa tıklayarak kopyalayınız.
  • Kopyalamış olduğunuz DLL dosyasını Windows 32 bit işletim sistemi kullanıyorsanız, C sürücüsü içerisinde Windows içerisinde System32 (C:\Windows\System32) klasörüne yükleyiniz.
  • Windows 64 bit işletim sistemi kullanıyorsanız, kopyalamış olduğunuz DLL dosyasını C sürücüsü içerisinde Windows içerisinde SysWOW64 (C:\Windows\SysWOW64) klasörüne ve C sürücüsü içerisinde Windows içerisinde System32 (C:\Windows\System32) klasörüne yükleyiniz.
  • Klasör içerisine DLL dosyasını yüklerken dosyanın zaten var olduğuna dair uyarı alırsanız, bilgisayarınızda bulunan DLL dosyası değiştirilmesini isteyerek üzerine yükleyiniz. Bu şekilde bozuk DLL dosyasını yenilemiş olursunuz.
  • DLL dosyasını anlatılan şekilde bilgisayarınıza yükledikten sonra bilgisayarınızı tekrar başlatınız. Hata aldığınız oyun veya programı çalıştırınız.

Bazı program veya oyunlarda DLL dosyasını sistem klasörü haricinde hata aldığınız oyun veya programın kurulu olduğu kök dizine (ilk klasör) atmak gerekebiliyor. Sistem klasörüne DLL dosyasını yükler yine DLL uyarısı alırsanız oyun ya da programın kök dizinine DLL dosyasını yükleyiniz.

İşlemleri yaptığınız halde DLL hatası devam ediyorsa, Windows 32 bit için başlat menüsünden çalıştır alanına CMD yazınız, açmadan CMD dosyası üzerinde Mouse ile sağa tıklayarak “Yönetici olarak çalıştır” menüsüne tıklayınız. Açılan komut penceresine “RegSvr32 C:\Windows\System32\opencl.dll” komutunu girerek Enter tuşuna basınız.

Windows 64 bit için yine aynı şekilde “Yönetici olarak çalıştır” menüsüne tıklayarak açılan komut penceresine “RegSvr32 C:\Windows\SysWOW64\opencl.dll” komutunu girerek Enter tuşuna basınız. Bilgisayarınızı son defa sisteminizin tamamen yenilenmesi için tekrar başlatınız. CMD komut sistemi nasıl çalışır ve komutlar neler öğrenmek isterseniz DLL Dosyası için CMD Komutları sayfasına gidebilirsiniz.

Yukarıda bahsedilen yöntemleri uygulayarak, Windows işletim sisteminizi yeniden başlattıktan sonra tekrar sayfa içerisinde yaptığınız işlemlerin doğruluğunu kontrol etmenizi tavsiye ediyoruz.

Windows 32 bit ve Windows 64 bit için CMD komut penceresine sfc /scannow komutunu girerseniz, bilgisayarınızda bulunan tüm DLL dosyalarını onarırsınız.

DLL Kategorisi: O ile Başlayan DLL Dosyaları

Acknowledgements

The OpenCL specification is the result of the contributions of many people,
representing a cross section of the desktop, hand-held, and embedded
computer industry.
Following is a partial list of the contributors, including the company that
they represented at the time of their contribution:

Chuck Rose, Adobe
Eric Berdahl, Adobe
Shivani Gupta, Adobe
Bill Licea Kane, AMD
Ed Buckingham, AMD
Jan Civlin, AMD
Laurent Morichetti, AMD
Mark Fowler, AMD
Marty Johnson, AMD
Michael Mantor, AMD
Norm Rubin, AMD
Ofer Rosenberg, AMD
Brian Sumner, AMD
Victor Odintsov, AMD
Aaftab Munshi, Apple
Abe Stephens, Apple
Alexandre Namaan, Apple
Anna Tikhonova, Apple
Chendi Zhang, Apple
Eric Bainville, Apple
David Hayward, Apple
Giridhar Murthy, Apple
Ian Ollmann, Apple
Inam Rahman, Apple
James Shearer, Apple
MonPing Wang, Apple
Tanya Lattner, Apple
Mikael Bourges-Sevenier, Aptina
Anton Lokhmotov, ARM
Dave Shreiner, ARM
Hedley Francis, ARM
Robert Elliott, ARM
Scott Moyers, ARM
Tom Olson, ARM
Anastasia Stulova, ARM
Christopher Thompson-Walsh, Broadcom
Holger Waechtler, Broadcom
Norman Rink, Broadcom
Andrew Richards, Codeplay
Maria Rovatsou, Codeplay
Alistair Donaldson, Codeplay
Alastair Murray, Codeplay
Stephen Frye, Electronic Arts
Eric Schenk, Electronic Arts
Daniel Laroche, Freescale
David Neto, Google
Robin Grosman, Huawei
Craig Davies, Huawei
Brian Horton, IBM
Brian Watt, IBM
Gordon Fossum, IBM
Greg Bellows, IBM
Joaquin Madruga, IBM
Mark Nutter, IBM
Mike Perks, IBM
Sean Wagner, IBM
Jon Parr, Imagination Technologies
Robert Quill, Imagination Technologies
James McCarthy, Imagination Technologie
Jon Leech, Independent
Aaron Kunze, Intel
Aaron Lefohn, Intel
Adam Lake, Intel
Alexey Bader, Intel
Allen Hux, Intel
Andrew Brownsword, Intel
Andrew Lauritzen, Intel
Bartosz Sochacki, Intel
Ben Ashbaugh, Intel
Brian Lewis, Intel
Geoff Berry, Intel
Hong Jiang, Intel
Jayanth Rao, Intel
Josh Fryman, Intel
Larry Seiler, Intel
Mike MacPherson, Intel
Murali Sundaresan, Intel
Paul Lalonde, Intel
Raun Krisch, Intel
Stephen Junkins, Intel
Tim Foley, Intel
Timothy Mattson, Intel
Yariv Aridor, Intel
Michael Kinsner, Intel
Kevin Stevens, Intel
Benjamin Bergen, Los Alamos National Laboratory
Roy Ju, Mediatek
Bor-Sung Liang, Mediatek
Rahul Agarwal, Mediatek
Michal Witaszek, Mobica
JenqKuen Lee, NTHU
Amit Rao, NVIDIA
Ashish Srivastava, NVIDIA
Bastiaan Aarts, NVIDIA
Chris Cameron, NVIDIA
Christopher Lamb, NVIDIA
Dibyapran Sanyal, NVIDIA
Guatam Chakrabarti, NVIDIA
Ian Buck, NVIDIA
Jaydeep Marathe, NVIDIA
Jian-Zhong Wang, NVIDIA
Karthik Raghavan Ravi, NVIDIA
Kedar Patil, NVIDIA
Manjunath Kudlur, NVIDIA
Mark Harris, NVIDIA
Michael Gold, NVIDIA
Neil Trevett, NVIDIA
Richard Johnson, NVIDIA
Sean Lee, NVIDIA
Tushar Kashalikar, NVIDIA
Vinod Grover, NVIDIA
Xiangyun Kong, NVIDIA
Yogesh Kini, NVIDIA
Yuan Lin, NVIDIA
Mayuresh Pise, NVIDIA
Allan Tzeng, QUALCOMM
Alex Bourd, QUALCOMM
Anirudh Acharya, QUALCOMM
Andrew Gruber, QUALCOMM
Andrzej Mamona, QUALCOMM
Benedict Gaster, QUALCOMM
Bill Torzewski, QUALCOMM
Bob Rychlik, QUALCOMM
Chihong Zhang, QUALCOMM
Chris Mei, QUALCOMM
Colin Sharp, QUALCOMM
David Garcia, QUALCOMM
David Ligon, QUALCOMM
Jay Yun, QUALCOMM
Lee Howes, QUALCOMM
Richard Ruigrok, QUALCOMM
Robert J. Simpson, QUALCOMM
Sumesh Udayakumaran, QUALCOMM
Vineet Goel, QUALCOMM
Lihan Bin, QUALCOMM
Vlad Shimanskiy, QUALCOMM
Jian Liu, QUALCOMM
Tasneem Brutch, Samsung
Yoonseo Choi, Samsung
Dennis Adams, Sony
Pr-Anders Aronsson, Sony
Jim Rasmusson, Sony
Thierry Lepley, STMicroelectronics
Anton Gorenko, StreamHPC
Jakub Szuppe, StreamHPC
Vincent Hindriksen, StreamHPC
Alan Ward, Texas Instruments
Yuan Zhao, Texas Instruments
Pete Curry, Texas Instruments
Simon McIntosh-Smith, University of Bristol
James Price, University of Bristol
Paul Preney, University of Windsor
Shane Peelar, University of Windsor
Brian Hutsell, Vivante
Mike Cai, Vivante
Sumeet Kumar, Vivante
Wei-Lun Kao, Vivante
Xing Wang, Vivante
Jeff Fifield, Xilinx
Hem C. Neema, Xilinx
Henry Styles, Xilinx
Ralph Wittig, Xilinx
Ronan Keryell, Xilinx
AJ Guillon, YetiWare Inc

Часть четвертая — Код OpenCL kernel

А вот тут мы и дошли до того места, где нам надо начинать писать код (хотя это и кодом назвать сложно, так… баловство:)) на OpenCL. Вот так выглядит OpenCLFile1.cl:

Итак по порядку:
Первым делом мы включаем в наш код файл MathCode.cpp, который содержит математическую функцию, ту самую на которую я просил обратить внимание ранее и ту самую, которая используется для традиционных вычислений на хосте. Как вы видите, мы даже не копируем код, мы используем один и тот же файл с математическим кодом.
Дальше мы создаем ядро, которое помечаем ключевым словом __kernel

Некоторые аргументы ядра также помечены ключевым словом __global, которое указывает на то, что это буфер в глобальной памяти устройства, созданный нами в коде хоста.
В коде ядра мы получаем номер элемента, который необходимо обработать:

Параметр get_global_id указывает на измерение, так как обрабатываемые элементы могут представлять из себя 1, 2 или 3мерный массив.
Затем проверяем граничные условия:

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

Распространенные сообщения об ошибках в Opencl.dll

Наиболее распространенные ошибки opencl.dll, которые могут возникнуть на компьютере под управлением Windows, перечислены ниже:

  • «Opencl.dll не найден.»
  • «Файл opencl.dll отсутствует.»
  • «Opencl.dll нарушение прав доступа.»
  • «Файл opencl.dll не удалось зарегистрировать.»
  • «Файл C:\Windows\System32\DriverStore\FileRepository\rdvgwddmdx11.inf_x86_0ca28df71678acdd\\opencl.dll не найден.»
  • «Не удалось запустить Windows. Отсутствует необходимый компонент: opencl.dll. Пожалуйста, установите Windows заново.»
  • «Не удалось запустить данное приложение, так как не найден файл opencl.dll. Повторная установка приложения может решить эту проблему.»

Такие сообщения об ошибках DLL могут появляться в процессе установки программы, когда запущена программа, связанная с opencl.dll (например, Windows), при запуске или завершении работы Windows, или даже при установке операционной системы Windows

Отслеживание момента появления ошибки opencl.dll является важной информацией при устранении проблемы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector