-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
23 changed files
with
4,536 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
# Generated from CLion C/C++ Code Style settings | ||
BasedOnStyle: LLVM | ||
AccessModifierOffset: -4 | ||
AlignAfterOpenBracket: Align | ||
AlignConsecutiveAssignments: None | ||
AlignOperands: Align | ||
AllowAllArgumentsOnNextLine: false | ||
AllowAllConstructorInitializersOnNextLine: false | ||
AllowAllParametersOfDeclarationOnNextLine: false | ||
AllowShortBlocksOnASingleLine: Always | ||
AllowShortCaseLabelsOnASingleLine: false | ||
AllowShortFunctionsOnASingleLine: None | ||
AllowShortIfStatementsOnASingleLine: Never | ||
AllowShortLambdasOnASingleLine: All | ||
AllowShortLoopsOnASingleLine: false | ||
AlwaysBreakAfterReturnType: None | ||
AlwaysBreakTemplateDeclarations: Yes | ||
BreakBeforeBraces: Custom | ||
BraceWrapping: | ||
AfterCaseLabel: false | ||
AfterClass: true | ||
AfterControlStatement: Never | ||
AfterEnum: true | ||
AfterFunction: false | ||
AfterNamespace: false | ||
AfterUnion: true | ||
BeforeCatch: false | ||
BeforeElse: false | ||
IndentBraces: false | ||
SplitEmptyFunction: false | ||
SplitEmptyRecord: true | ||
BreakBeforeBinaryOperators: None | ||
BreakBeforeTernaryOperators: true | ||
BreakConstructorInitializers: BeforeColon | ||
BreakInheritanceList: BeforeColon | ||
ColumnLimit: 120 | ||
CompactNamespaces: false | ||
ContinuationIndentWidth: 8 | ||
IndentCaseLabels: true | ||
IndentPPDirectives: BeforeHash | ||
IndentWidth: 4 | ||
KeepEmptyLinesAtTheStartOfBlocks: true | ||
MaxEmptyLinesToKeep: 2 | ||
NamespaceIndentation: All | ||
ObjCSpaceAfterProperty: false | ||
ObjCSpaceBeforeProtocolList: true | ||
PointerAlignment: Right | ||
ReflowComments: false | ||
SpaceAfterCStyleCast: true | ||
SpaceAfterLogicalNot: false | ||
SpaceAfterTemplateKeyword: false | ||
SpaceBeforeAssignmentOperators: true | ||
SpaceBeforeCpp11BracedList: false | ||
SpaceBeforeCtorInitializerColon: true | ||
SpaceBeforeInheritanceColon: true | ||
SpaceBeforeParens: ControlStatements | ||
SpaceBeforeRangeBasedForLoopColon: true | ||
SpaceInEmptyParentheses: false | ||
SpacesBeforeTrailingComments: 0 | ||
SpacesInAngles: false | ||
SpacesInCStyleCastParentheses: false | ||
SpacesInContainerLiterals: false | ||
SpacesInParentheses: false | ||
SpacesInSquareBrackets: false | ||
TabWidth: 4 | ||
UseTab: Never |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# How to use git hooks for this repository: | ||
|
||
* Set `.githooks` directory as root directory for git hooks: | ||
|
||
```bash | ||
git config --local core.hooksPath ./.githooks | ||
``` | ||
|
||
or | ||
|
||
* Copy `pre-commit` file to `.git/hooks`: | ||
|
||
```bash | ||
cp ./.githooks/pre-commit ./.git/hooks/ | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#!/usr/bin/env python | ||
|
||
import subprocess | ||
|
||
|
||
def last_line_valid(path): | ||
""" | ||
Check last file line have linebreak | ||
:param path: path to file | ||
:return: have or haven't | ||
""" | ||
with open(path, 'r') as f: | ||
text = f.readlines() | ||
try: | ||
last_char = text[-1][-1] | ||
return last_char == '\n' | ||
except IndexError: | ||
return False | ||
|
||
|
||
def fix_last_line(path): | ||
""" | ||
Add a linebreak to the end of file if it doesn't have one | ||
""" | ||
if last_line_valid(path): | ||
return | ||
with open(path, 'a') as f: | ||
print(f'Add linebreak to the file: {path}') | ||
f.write('\n') | ||
|
||
|
||
def fix_clang_format(path): | ||
""" | ||
Fix clang-format | ||
""" | ||
if path.endswith('.cpp') or path.endswith('.hpp') or path.endswith('.cl'): | ||
print(f'clang-format fix: {path}') | ||
subprocess.Popen(['clang-format', path, '-i'], stdout=subprocess.DEVNULL).communicate() | ||
|
||
|
||
def fix_format(): | ||
git_diff = subprocess.Popen('git diff-index --name-status --cached HEAD'.split(), stdout=subprocess.PIPE) | ||
remove_deleted = subprocess.Popen('grep -v ^D'.split(), stdin=git_diff.stdout, stdout=subprocess.PIPE) | ||
get_second_column = subprocess.Popen(['awk', '{ print $2 }'], stdin=remove_deleted.stdout, stdout=subprocess.PIPE) | ||
git_diff.stdout.close() | ||
remove_deleted.stdout.close() | ||
output = get_second_column.communicate()[0].decode('utf-8').strip() | ||
if not output: | ||
return | ||
for file in output.split('\n'): | ||
path = f'./{file}' | ||
fix_last_line(path) | ||
fix_clang_format(path) | ||
subprocess.Popen(['git', 'add'] + output.split('\n')).communicate() | ||
|
||
|
||
if __name__ == '__main__': | ||
fix_format() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// Убедитесь что название PR соответствует шаблону: | ||
// Task0N <Имя> <Фамилия> <Аффиляция> | ||
// И проверьте что обе ветки PR (отправляемая из вашего форкнутого репозитория и та в которую вы отправляете PR) называются одинаково - task0N | ||
|
||
// Впишите сюда (между pre и /pre тэгами) вывод тестирования на вашем компьютере: | ||
|
||
<details><summary>Локальный вывод</summary><p> | ||
|
||
<pre> | ||
$ ./enumDevices | ||
Number of OpenCL platforms: 1 | ||
Platform #1/1 | ||
Platform name: | ||
The command "./enumDevices" exited with 0. | ||
</pre> | ||
|
||
</p></details> | ||
|
||
// Затем создайте PR, должна начать выполняться автоматическиая сборка на Github CI (Github Actions) - рядом с коммитом в PR появится оранжевый шарик (сборка в процессе), | ||
// который потом станет зеленой галкой (прошло успешно) или красным крестиком (что-то пошло не так). | ||
// Затем откройте PR на редактирование чтобы добавить в описание (тоже между pre и /pre тэгами) вывод тестирования на Github CI: | ||
// Чтобы его найти - надо нажать на зеленую галочку или красный крестик рядом с вашим коммитов в рамках PR. | ||
// P.S. В случае если Github CIсборка не запустилась - попробуйте через десять минут или через час добавить фиктивный коммит (например добавив где-то пробел). | ||
|
||
<details><summary>Вывод Github CI</summary><p> | ||
|
||
<pre> | ||
$ ./enumDevices | ||
Number of OpenCL platforms: 1 | ||
Platform #1/1 | ||
Platform name: | ||
The command "./enumDevices" exited with 0. | ||
</pre> | ||
|
||
</p></details> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
#!/bin/bash | ||
#See https://github.com/KhronosGroup/SyclParallelSTL/blob/03367798d81fe396cd8ebf5492e51ad6a495467d/.travis/install_intel_opencl.sh | ||
|
||
set -ev | ||
|
||
apt update | ||
|
||
########################### | ||
# Get Intel OpenCL Runtime | ||
########################### | ||
|
||
# https://software.intel.com/en-us/articles/opencl-drivers#latest_CPU_runtime | ||
PACKAGE_URL=https://registrationcenter-download.intel.com/akdlm/irc_nas/vcp/15532/l_opencl_p_18.1.0.015.tgz | ||
PACKAGE_NAME=l_opencl_p_18.1.0.015 | ||
|
||
wget -q ${PACKAGE_URL} -O /tmp/opencl_runtime.tgz | ||
tar -xzf /tmp/opencl_runtime.tgz -C /tmp | ||
sed 's/decline/accept/g' -i /tmp/${PACKAGE_NAME}/silent.cfg | ||
apt-get install -yq cpio | ||
/tmp/${PACKAGE_NAME}/install.sh -s /tmp/${PACKAGE_NAME}/silent.cfg | ||
|
||
################################### | ||
# Check OpenCL runtime with clinfo | ||
################################### | ||
|
||
apt install -yq ocl-icd-opencl-dev ocl-icd-dev opencl-headers | ||
|
||
git clone https://github.com/Oblomov/clinfo | ||
cd clinfo | ||
make -j4 | ||
./clinfo | ||
cd .. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
name: CMake | ||
|
||
on: [push, pull_request] | ||
|
||
env: | ||
BUILD_TYPE: RelWithDebInfo | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-20.04 | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
|
||
- name: Install prerequisites | ||
run: | | ||
sudo apt update | ||
sudo apt install -y g++-7 | ||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 90 | ||
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 90 | ||
- name: Install OpenCL driver for CPU | ||
run: sudo bash .github/scripts/install_intel_opencl.sh; | ||
|
||
- name: Configure CMake | ||
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} | ||
|
||
- name: Build | ||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} | ||
|
||
- name: aplusb | ||
working-directory: ${{github.workspace}} | ||
run: ./build/enumDevices |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
**/*_cl.h | ||
.idea | ||
build | ||
cmake-build* | ||
.vs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
cmake_minimum_required(VERSION 3.1) | ||
|
||
add_subdirectory(libs) | ||
|
||
project(enumDevices) | ||
|
||
set(CMAKE_CXX_STANDARD 11) | ||
|
||
add_executable(${PROJECT_NAME} src/main.cpp) | ||
target_link_libraries(${PROJECT_NAME} libclew) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,114 @@ | ||
# GPGPUTasks2024 | ||
В этом репозитории предложены задания для курса по вычислениям на видеокартах 2024 | ||
В этом репозитории предложены задания для курса по вычислениям на видеокартах 2024. | ||
|
||
[Остальные задания](https://github.com/GPGPUCourse/GPGPUTasks2024/). | ||
|
||
# Задание 0. Вводное. | ||
|
||
[![Build Status](https://github.com/GPGPUCourse/GPGPUTasks2024/actions/workflows/cmake.yml/badge.svg?branch=task00&event=push)](https://github.com/GPGPUCourse/GPGPUTasks2024/actions/workflows/cmake.yml) | ||
|
||
Установка OpenCL-драйвера для процессора | ||
======================================== | ||
|
||
Установить OpenCL-драйвер для процессора полезно, даже если у вас есть видеокарта, т.к. на нем удобно тестировать приложение (драйвер видеокарты гораздо чаще может повиснуть вместе с ОС). | ||
|
||
Windows | ||
------- | ||
|
||
1. Откройте https://software.intel.com/content/www/us/en/develop/tools/opencl-cpu-runtime.html | ||
2. Скачайте (требует регистрацию, [прямая ссылка для Windows](http://registrationcenter-download.intel.com/akdlm/irc_nas/vcp/13794/opencl_runtime_18.1_x64_setup.msi) - если не качает - попробуйте из-под инкогнито или [отсюда](https://disk.yandex.ru/d/dlVbMoI3tsPZfw)) | ||
3. Установите | ||
|
||
Linux (Рекомендуется Ubuntu 18.04, 20.04 или 22.04) | ||
---------------------------------- | ||
|
||
1. Откройте https://software.intel.com/content/www/us/en/develop/tools/opencl-cpu-runtime.html | ||
2. Скачайте (требует регистрацию, [прямая ссылка для Ubuntu](http://registrationcenter-download.intel.com/akdlm/irc_nas/vcp/15532/l_opencl_p_18.1.0.015.tgz) - если не качает - попробуйте из-под инкогнито или [отсюда](https://disk.yandex.ru/d/dlVbMoI3tsPZfw)) | ||
3. ``apt-get install -yq cpio lsb-core`` | ||
4. ``tar -xzf l_opencl_p_18.1.0.015.tgz`` | ||
5. ``sudo ./l_opencl_p_18.1.0.015/install.sh`` | ||
6. Проведите установку. | ||
|
||
Если у вас довольно новый процессор, например i7-8550U, то драйвер может его не поддерживать - ```clCreateContext``` вернет ошибку ```CL_DEVICE_NOT_AVAILABLE```, в таком случае поставьте свежий драйвер [отсюда](https://github.com/intel/compute-runtime/releases) (включает в т.ч. драйвер для встроенной Intel GPU). | ||
|
||
Если в процессе запуска этого задания процессор не виден как допустимое OpenCL-устройство - создайте **Issue** в этом репозитории с перечислением: | ||
|
||
- Версия OS | ||
- Вывод команды ``ls /etc/OpenCL/vendors`` | ||
- Если там в т.ч. есть ``intel.icd`` файл - то его содержимое (это маленький текстовый файл) | ||
|
||
Установка OpenCL-драйвера для видеокарты | ||
======================================== | ||
|
||
Windows | ||
------- | ||
|
||
Поставьте драйвер стандартным образом - скачав инсталлятор с официального сайта вендора вашей видеокарты и установив. | ||
|
||
Linux | ||
----- | ||
|
||
NVidia: ``sudo apt install nvidia-<версия>`` (например, ``nvidia-384`` или ``nvidia-535``) | ||
|
||
AMD: [скачав](https://www.amd.com/en/support) и установив amdgpu-pro драйвер | ||
|
||
Проверка окружения и начало выполнения задания | ||
============================================== | ||
|
||
Про работу под Windows см. в секции [Как работать под windows](#%D0%9A%D0%B0%D0%BA-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C-%D0%BF%D0%BE%D0%B4-windows). | ||
|
||
1. Сделайте fork этого репозитория | ||
2. ``git clone ВАШ_ФОРК_РЕПОЗИТОРИЯ`` | ||
3. ``cd GPGPUTasks2024`` | ||
4. ``git checkout task00`` | ||
5. ``mkdir build`` | ||
6. ``cd build`` | ||
7. ``cmake ..`` | ||
8. ``make -j4`` | ||
9. ``./enumDevices`` должно увидеть хотя бы одну OpenCL-платформу: | ||
|
||
``` | ||
Number of OpenCL platforms: 1 | ||
Platform #1/1 | ||
Platform name: | ||
``` | ||
|
||
Если же вы видите ошибку: | ||
``` | ||
terminate called after throwing an instance of 'std::runtime_error' | ||
what(): Can't init OpenCL driver! | ||
Aborted (Core dumped) | ||
``` | ||
То попробуйте установить ```sudo apt install ocl-icd-libopencl1``` и выполнить ``./enumDevices`` снова. | ||
|
||
Если вы видите ошибку: | ||
``` | ||
: CommandLine Error: Option 'polly' registered more than once! | ||
LLVM ERROR: inconsistency in registered CommandLine options | ||
``` | ||
То, наоборот, может помочь удалить пакет ```sudo apt remove ocl-icd-libopencl1``` и попробовать выполнить ``./enumDevices`` снова. | ||
|
||
Если ``./enumDevices`` не показывает хотя бы одну платформу - создайте **Issue** с перечислением: | ||
|
||
- OS, процессор и видеокарта | ||
- Успешно ли прошла установка Intel-CPU драйвера | ||
- Какое было поведение до установки пакета ``ocl-icd-libopencl1`` и какое поведение стало после | ||
- Вывод ``./enumDevices`` | ||
|
||
Задание | ||
======= | ||
|
||
0. Сделать fork проекта | ||
1. Прочитать все комментарии подряд и выполнить все **TODO** в файле ``src/main.cpp``. Для разработки под Linux рекомендуется использовать CLion. Под Windows рекомендуется использовать CLion+MSVC. Также под Windows можно использовать Visual Studio Community. | ||
2. Отправить **Pull-request** с названием ```Task00 <Имя> <Фамилия> <Аффиляция>```. **Аффиляция** - SPbU/HSE/ITMO. | ||
3. В тексте **PR** укажите вывод программы при исполнении на сервере Github CI (Github Actions) и на вашем компьютере (в **pre**-тэгах, чтобы сохранить форматирование, см. [пример](https://raw.githubusercontent.com/GPGPUCourse/GPGPUTasks2024/task00/.github/pull_request_example.md)). И ваш бранч должен называться так же, как и у меня - **task00**. | ||
4. Убедиться что Github CI (Github Actions) смог скомпилировать ваш код и что все хорошо (если нет - то поправить, пожалуйста, не используйте C++ из будущего, о котором не знает GCC 5.5) | ||
5. Ждать комментарии проверки | ||
|
||
**Дедлайн**: 23:59 10 сентября. Но убедиться, что хотя бы одно OpenCL-устройство у вас обнаруживается, лучше как можно раньше, желательно, до начала лекции 8 сентября, чтобы было больше времени на решение проблем если они возникнут (см. **Проверка окружения** выше). | ||
|
||
Как работать под Windows | ||
======================== | ||
|
||
1. Используйте **64-битный компилятор**, т.е. [amd64](/.figures/clion_msvc_settings.png), а не x86. (Если при запуске видите ``Invalid Parameter - 100``, то вы все еще используете 32-битный компилятор) | ||
2. Рекомендуется использовать CLion+MSVC. | ||
3. Можно использовать Visual Studio 2017 Community или новее, она поддерживает CMake-проекты (``File`` -> ``Open`` -> ``Cmake...``). Разве что передавать аргументы запускаемой программе [неудобно](https://docs.microsoft.com/en-us/cpp/ide/cmake-tools-for-visual-cpp?view=vs-2017#configure-cmake-debugging-sessions). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
add_subdirectory(clew) |
Oops, something went wrong.