Вопросы по теме 'loop-unrolling'

Оптимизация программы с разворачиванием цикла
У меня возник вопрос относительно разворачивания цикла в цикле for и того, как использовать цикл for, если вы не знаете количество итераций до ввода пользователя. Я видел примеры развертывания цикла в циклах, где задано количество итераций, и за...
169 просмотров
schedule 18.10.2021

Как развертывание цикла снижает штраф за переход?
Я пытаюсь понять концепцию развертывания цикла, и, согласно Википедии, это ограничивает/минимизирует штраф за ветку? Теперь я понимаю, что такое развертывание цикла. Это в основном увеличение шага приращения цикла и повторение операторов внутри...
100 просмотров
schedule 08.03.2022

Саморазворачивающийся макроцикл в C/C++
В настоящее время я работаю над проектом, где важен каждый цикл. При профилировании своего приложения я обнаружил, что накладные расходы некоторых внутренних циклов довольно высоки, потому что они состоят всего из нескольких машинных инструкций....
31318 просмотров
schedule 17.04.2022

Способны ли Clang или GCC автовекторизировать развернутые вручную циклы?
У меня есть идея стиля кода для написания определенных типов числовых алгоритмов, где вы пишете свой алгоритм исключительно в агностической манере размещения данных. то есть все ваши функции принимают (один или несколько) скалярных аргументов и...
382 просмотров

Разрешение переполнения поля структуры следующим полем
Рассмотрим следующий простой пример: struct __attribute__ ((__packed__)) { int code[1]; int place_holder[100]; } s; void test(int n) { int i; for (i = 0; i < n; i++) { s.code[i] = 1; } } Цикл for выполняет запись в поле code ,...
525 просмотров

Развертывание переносимого цикла с параметром шаблона в C++ с помощью GCC/ICC
Я работаю над программой для высокопроизводительных параллельных вычислений гидродинамики , которая требует много легкие циклы и, следовательно, получают примерно 30% производительности, если все важные циклы полностью развернуты. Это можно легко...
312 просмотров
schedule 07.08.2022

Профилирование теста, скомпилированного для SPARC v8 на x86
Я пытаюсь сделать (небольшое) улучшение процессора leon3 (набор инструкций - SPARC v8) для академического упражнения. Прежде чем я решу, что нужно улучшить, я хочу описать пару программ тестирования, для которых я хочу адаптировать улучшения. У...
601 просмотров
schedule 25.01.2023

Влияние развертывания цикла на данные, привязанные к памяти
Я работал с фрагментом кода, который сильно привязан к памяти. Я пытаюсь оптимизировать его в рамках одного ядра, вручную реализуя блокировку кеша, предварительную выборку sw, развертывание цикла и т. д. Несмотря на то, что блокировка кеша дает...
803 просмотров
schedule 22.11.2022

Что именно делает #pragma unroll? Влияет ли это на количество потоков?
Я новичок в CUDA, и я не могу понять развертывание цикла. Я написал кусок кода, чтобы понять технику __global__ void kernel(float *b, int size) { int tid = blockDim.x * blockIdx.x + threadIdx.x; #pragma unroll for(int i=0;i<size;i++)...
35386 просмотров
schedule 24.09.2023

Уменьшение количества инструкций, удаленных после развертывания цикла
У меня есть цикл обработки изображений O (N ^ 4), и после его профилирования (с использованием Intel Vtune 2013) я вижу, что количество удаленных инструкций резко сокращается. Мне нужна помощь в понимании этого поведения на многоядерной архитектуре....
307 просмотров

Заставить/убедить/обмануть GCC, чтобы развернуть _длинные_ циклы?
Как мне убедить GCC развернуть цикл, в котором количество итераций известно, но велико? Я компилирую с -O3 . Реальный рассматриваемый код, конечно, сложнее, но вот упрощенный пример, который имеет такое же поведение: int const constants[] =...
685 просмотров
schedule 02.04.2023

Цикл CUDA разворачивается в треугольной области
Можно ли развернуть цикл на треугольной области, например: for (int i = 0; i < ROW_LENGTH; i++) { for (int j = 0; j < i; j++) { // Some array operation here } } где ROW_LENGTH — константа, определенная во время...
84 просмотров
schedule 02.07.2023

Как попросить GCC полностью развернуть этот цикл (т.е. очистить этот цикл)?
Есть ли способ указать GCC (я использую 4.8.4) развернуть цикл while в нижней функции полностью , то есть очистить этот цикл? Количество итераций цикла известно во время компиляции: 58. Позвольте мне сначала объяснить, что я пробовал. Проверяя...
4469 просмотров
schedule 25.12.2022

GCC 5.1 Развертывание цикла
Учитывая следующий код #include <stdio.h> int main(int argc, char **argv) { int k = 0; for( k = 0; k < 20; ++k ) { printf( "%d\n", k ) ; } } Использование GCC 5.1 или более поздней версии с -x c -std=c99 -O3...
647 просмотров

Почему прошедшее время равно 0?
Я сделал программу, которая разворачивает циклы и измеряет время, необходимое для сортировки массива, но проблема в том, что иногда программа развернутого цикла дает мне ответ 0 за наносекунды, а этого просто не может быть. Я пробовал это и с...
366 просмотров
schedule 09.04.2023

Ручное развертывание петли с известным максимальным размером
Пожалуйста, взгляните на этот код в ядре OpenCL: uint point_color = 4278190080; float point_percent = 1.0f; float near_pixel_size = (...); float far_pixel_size = (...); float delta_pixel_size = far_pixel_size - near_pixel_size; float3 near =...
194 просмотров
schedule 08.04.2023

Почему генератор кода gcc для эпилога развернутого цикла выглядит чрезмерно сложным?
Спасибо за все комментарии. Мне жаль, что я использовал плохой пример в своем первоначальном вопросе, о котором почти все сказали бы: "О, вы должны использовать memcopy !" Но мой вопрос не об этом. Мой вопрос более общий о том, как следует...
2535 просмотров
schedule 02.10.2023

Может ли компилятор (gcc) гарантировать выполнение циклов С++?
Мне нужно выполнить следующие операции AVX: __m256 perm, func; __m256 in = _mm256_load_ps(inPtr+x); __m256 acc = _mm256_setzero_ps(); perm = _mm256_shuffle_ps(in, in, _MM_SHUFFLE(3,2,1,0)); func = _mm256_load_ps(fPtr+0); acc = _mm256_add_ps(acc,...
132 просмотров
schedule 30.04.2024