Вы можете определить пользовательское сокращение следующим образом:
#pragma omp declare reduction \
(addps:__m128:omp_out+=omp_in) \
initializer(omp_priv=_mm_setzero_ps())
А затем использовать его следующим образом:
#pragma omp parallel for reduction(addps:average)
for(size_t k = 0; k < size * ch; k += ch)
{
average += _mm_loadu_ps(data+k);
}
Я думаю, что самое важное, openmp должен знать, как получите нейтральный элемент (здесь _mm_setzero_ps()
) для вашего сокращения.
Полный рабочий пример: https://godbolt.org/z/Fpqttc
Интересная ссылка: http://pages.tacc.utexas.edu/~eijkhout /pcse/html/omp-reduction.html#User-definedreductions
Самый видимый путь для отображения структур.
Любой класс, который делает это, будет иметь непредсказуемое поведение при использовании в качестве Ключа для Словаря или HashTable. Так как причина, то, что реализация использует и GetHashCode и Равняется для надлежащего нахождения значения в таблице. Короткая версия алгоритма является следующим
Отказ сохранить GetHashCode и Равняется в синхронизации, полностью повредит этот алгоритм (и многочисленные другие).
Думайте о хеше / структура словаря как набор пронумерованных блоков. Если Вы всегда помещаете вещи в блок, соответствующий их GetHashCode (), то только необходимо искать один блок (использование Равняется ()) видеть, там ли что-то. Это работает, если Вы смотрите в правильном блоке.
, Таким образом, правило: если Равняется (), говорит, что два объекта Равны (), они должны иметь тот же GetHashCode ().
Если Вы не переопределяете GetHashCode
, ничто, что выдерживает сравнение, Ваши объекты могут понять его превратно.
, Поскольку это документируется, что GetHashCode
должен возвратить то же значение, если два экземпляра равны, то это - прерогатива любого кода, который хочет протестировать их на равенство для использования GetHashCode
в качестве первой передачи в объекты группы, которые могут быть равными (поскольку это знает, что объекты с различными хэш-кодами не могут быть равными). Если Ваш GetHashCode
метод возвращает различные значения для равных объектов тогда, они могут войти в различные группы в первой передаче и никогда не сравниваются с помощью их Equals
метод.
Это могло влиять на любую структуру данных типа набора, но будет особенно проблематично в основанных на хэш-коде, таких как словари и наборы хеша.
Короче говоря: Всегда переопределение GetHashCode
, когда Вы переопределяете Equals
и гарантируете их реализации, последовательно.
Любой алгоритм, который использует Ключ, не будет работать, предполагая, что он полагается на намеченное поведение ключей хеша.
Два объекта, которые являются Equal
, должны иметь то же значение ключа хеша, которое удаленно не гарантируется реализацией по умолчанию.