2014-03-21 1 views
0

Я пытаюсь генерировать различные типы интенсивности данных на шине в многопроцессорной среде. В основном мне нужны два шаблона - почти незначительный трафик на автобусе и очень высокий трафик на автобусе. Первоначально я думал о доступе к регистрам и не записывал их обратно в кеш/основную память для генерации трафика с низкой шиной. Но я не очень уверен в этой идее. Кроме того, я занимаюсь кодированием в Java.Генерировать различную интенсивность данных на шине

Любые подсказки, как это сделать?

Архитектура: x86_64

EDIT: У меня есть следующий фрагмент кода.

mutex.lock(); 
    try{ 
     // Generate Bus traffic 
    } 
    finally{ 
     mutex.unlock(); 
    } 

Для каждого потока, я пытаюсь генерировать трафик в критической секции.

+0

Просьбы уточнить - какую шину микропроцессора вы говорите (данные, управление, ...) – ErstwhileIII

+0

данных шина конечно. – sbasu276

+0

Неграмотный трафик: Thread.sleep (Long.MAX_VALUE); – Durandal

ответ

0

Доступ к регистрам генерирует нулевой трафик на шине (если вы не имеете в виду некоторую внутреннюю шину процессора). Чтобы генерировать максимальный трафик на шине памяти CPU, просто прочитайте массив, превышающий ваш самый большой кеш (обычно L3 с несколькими мегабайтами). Убедитесь, что данные чтения получает фактически используется, так что DCE не загнуться.

long[] data = new long[1<<24]; // 8 * 16MB 
volatile long blackhole; 

void saturateBus() { 
    long sum = 0; 
    for (long x : data) sum += x; 
    blackhole = sum; 
} 

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

long sum0 = 0, sum1 = 0; 
    for (int i=0; i<data.length; i+=2) { // assuming even `data.length` 
     sum0 += data[i+0]; 
     sum1 += data[i+1]; 
    } 
    blackhole = sum0 + sum1; 
+0

Спасибо! Теперь, придя к доступу к части регистров, как я могу это сделать? Возможно ли это на Java? – sbasu276

+0

@ sbasu276: Я не понимаю. Большинство программ используют регистры большую часть времени, поскольку они намного быстрее, чем кэш/память. – maaartinus

+0

Простите меня за то, что вы так наивны. Выделение регистра для переменной зависит от компилятора, которому я верю. Если запросов на регистрацию слишком много, большинство из них будут доступны через кэш/память. Все, что я хотел знать, есть ли способ обеспечить, чтобы я действительно обращался к регистру во время выполнения? – sbasu276

 Смежные вопросы

  • Нет связанных вопросов^_^