Вопросы по теме 'loop-unrolling'
Оптимизация программы с разворачиванием цикла
У меня возник вопрос относительно разворачивания цикла в цикле for и того, как использовать цикл for, если вы не знаете количество итераций до ввода пользователя.
Я видел примеры развертывания цикла в циклах, где задано количество итераций, и за...
169 просмотров
schedule
18.10.2021
Как развертывание цикла снижает штраф за переход?
Я пытаюсь понять концепцию развертывания цикла, и, согласно Википедии, это ограничивает/минимизирует штраф за ветку?
Теперь я понимаю, что такое развертывание цикла. Это в основном увеличение шага приращения цикла и повторение операторов внутри...
100 просмотров
schedule
08.03.2022
Саморазворачивающийся макроцикл в C/C++
В настоящее время я работаю над проектом, где важен каждый цикл. При профилировании своего приложения я обнаружил, что накладные расходы некоторых внутренних циклов довольно высоки, потому что они состоят всего из нескольких машинных инструкций....
31318 просмотров
schedule
17.04.2022
Способны ли Clang или GCC автовекторизировать развернутые вручную циклы?
У меня есть идея стиля кода для написания определенных типов числовых алгоритмов, где вы пишете свой алгоритм исключительно в агностической манере размещения данных.
то есть все ваши функции принимают (один или несколько) скалярных аргументов и...
382 просмотров
schedule
16.06.2022
Разрешение переполнения поля структуры следующим полем
Рассмотрим следующий простой пример:
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 просмотров
schedule
30.06.2022
Развертывание переносимого цикла с параметром шаблона в 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 просмотров
schedule
11.11.2022
Заставить/убедить/обмануть 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 просмотров
schedule
17.11.2022
Почему прошедшее время равно 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