Поиск знаний о массивах массивов памятиC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Поиск знаний о массивах массивов памяти

Сообщение Anonymous »

Контекст: многоканальная обработка цифровой аудио-аудио в реальном времени.for (int sample = 0; sample < size; ++sample)
{
for (int channel = 0; channel < size; ++channel)
{
auto data = arr[channel][sample];
// do some computations
}
}
< /code>

Я ищу советы о том, как сделать жизнь проще для процессора и памяти в целом. Я понимаю, что чередование данных будет лучше, но это невозможно. < /p>

Моя теория такова, что, пока вы последовательно получаете память на некоторое время, ЦП будет предварительно перераспределять его - будет ли это удерживаться для буферов N (канала)? Как насчет размера буферов, любых «разбитых моментов»? < /p>

будет очень полезно иметь каналы в смежной памяти (увеличение местности), или это содержится только для очень маленьких буферов (например, размер линий кеша)? Мы могли бы говорить о буферах> 100 кб друг от друга. Таким образом, любой выбор дизайна, который я делаю, может только положительно повлиять на эту конкретную систему. Любые знания по этим вопросам ценятся, ссылки, литература и т. Д., Специфические знания платформы. < /P>

Дайте мне знать, если вопрос слишком расплывчат, я в первую очередь думал, что было бы неплохо иметь некоторый опыт /информация о WikiSISH /Info. Три случая, которые я упомянул (далекий, смежный и смежный, упомянутый в предположительно увеличивающемся порядке производительности), в котором эти паттерны проверяют малые и большие наборы данных. Может быть, люди будут запускать это и сообщать о аномалиях. < /P>

#include
#include
#include

const int b = 196000;
const int s = 64 / sizeof(float);
const int extra_it = 16;
float sbuf1;
float bbuf1;

int main()
{

float sbuf2;
float bbuf2;
float * sbuf3 = new float;
float * bbuf3 = new float;
float * sbuf4 = new float[s * 3];
float * bbuf4 = new float[b * 3];
float use = 0;

while (1)
{
using namespace std;

int c;
bool sorb;

cout > sorb))
return -1;

cout c))
return -1;

auto t = std::chrono::high_resolution_clock::now();

if (c == 0)
{
// "worst case scenario", 3 distant buffers constantly touched
if (sorb)
{
for (int k = 0; k < b * extra_it; ++k)
for (int i = 0; i < s; ++i)
{
sbuf1 = k; // static memory
sbuf2 = k; // stack memory
sbuf3 = k; // heap memory
}
}
else
{
for (int k = 0; k < s * extra_it; ++k)
for (int i = 0; i < b; ++i)
{
bbuf1 = k; // static memory
bbuf2 = k; // stack memory
bbuf3 = k; // heap memory
}
}

}
else if (c == 1)
{
// "best case scenario", only contiguous memory touched, interleaved
if (sorb)
{
for (int k = 0; k < b * extra_it; ++k)
for (int i = 0; i < s * 3; i += 3)
{
sbuf4 = k;
sbuf4[i + 1] = k;
sbuf4[i + 2] = k;
}
}
else
{
for (int k = 0; k < s * extra_it; ++k)
for (int i = 0; i < b * 3; i += 3)
{
bbuf4 = k;
bbuf4[i + 1] = k;
bbuf4[i + 2] = k;
}
}

}
else if (c == 2)
{
// "compromise", adjecant memory buffers touched
if (sorb)
{
auto b1 = sbuf4;
auto b2 = sbuf4 + s;
auto b3 = sbuf4 + s * 2;

for (int k = 0; k < b * extra_it; ++k)
for (int i = 0; i < s; ++i)
{
b1 = k;
b2 = k;
b3[i] = k;
}
}
else
{
auto b1 = bbuf4;
auto b2 = bbuf4 + b;
auto b3 = bbuf4 + b * 2;

for (int k = 0; k < s * extra_it; ++k)
for (int i = 0; i < b; ++i)
{
b1[i] = k;
b2[i] = k;
b3[i] = k;
}
}

}
else
break;

cout

Подробнее здесь: https://stackoverflow.com/questions/341 ... erformance
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Поиск передовых знаний разработчика MS Dynamics 365
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Поиск расширенных знаний разработчиков MS Dynamics 365 [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Поиск местных максимумов в больших 3D -массивах Numpy
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Синтаксис C++, двойной доступ к памяти с использованием круглых скобок в массивах
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как я могу построить модель прогнозирования знаний Word? Есть ли рекомендации по моделям? [закрыто]
    Гость » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»