Необработанный тип - это имя общего класса или интерфейса без аргументов типа. Например, с учетом общего класса Box:
public class Box {
public void set(T t) { /* ... */ }
// ...
}
Чтобы создать параметризованный тип Box
, вы указываете фактический аргумент типа для параметра формального типа T
:
Box intBox = new Box<>();
Если аргумент фактического типа опущен, вы создаете необработанный тип Box
:
Box rawBox = new Box();
. Поэтому Box
является необработанным типом родового типа Box
. Однако не общий тип или тип интерфейса не является сырым типом.
Необработанные типы отображаются в устаревшем коде, потому что многие классы API (например, классы Collections) не были типичными до JDK 5.0. При использовании сырых типов вы, по существу, получаете поведение перед генериками - Box
дает вам Object
s. Для обратной совместимости допускается присвоение параметризованного типа его необработанному типу:
Box stringBox = new Box<>();
Box rawBox = stringBox; // OK
Но если вы назначаете сырой тип параметризованному типу, вы получите предупреждение:
Box rawBox = new Box(); // rawBox is a raw type of Box
Box intBox = rawBox; // warning: unchecked conversion
Вы также получаете предупреждение, если используете необработанный тип для вызова общих методов, определенных в соответствующем родовом типе:
Box stringBox = new Box<>();
Box rawBox = stringBox;
rawBox.set(8); // warning: unchecked invocation to set(T)
Предупреждение показывает, что необработанные типы обходят общие проверки типа, откладывая улов небезопасных код для выполнения. Поэтому вам следует избегать использования необработанных типов.
В разделе «Тип стирания» содержится дополнительная информация о том, как компилятор Java использует необработанные типы.
As упомянутый ранее, при смешивании устаревшего кода с общим кодом вы можете столкнуться с предупреждающими сообщениями, подобными следующим:
Примечание: Example.java использует непроверенные или небезопасные операции.
Примечание. : Перекомпиляция с -Xlint: не проверяется для деталей.
blockquote>Это может произойти при использовании более старого API, который работает с необработанными типами, как показано в следующем примере:
public class WarningDemo { public static void main(String[] args){ Box
bi; bi = createBox(); } static Box createBox(){ return new Box(); } } Термин «непроверенный» означает, что компилятор не имеет достаточной информации о типе для выполнения всех проверок типа, необходимых для обеспечения безопасности типа. Предупреждение «unchecked» по умолчанию отключено, хотя компилятор дает подсказку. Чтобы просмотреть все «непроверенные» предупреждения, перекомпилируйте с помощью -Xlint: unchecked.
Повторная компиляция предыдущего примера с -Xlint: unchecked показывает следующую дополнительную информацию:
WarningDemo.java:4: warning: [unchecked] unchecked conversion found : Box required: Box
bi = createBox(); ^ 1 warning Чтобы полностью отключить unchecked warnings, используйте флаг -Xlint: -unchecked. Аннотации
@SuppressWarnings("unchecked")
подавляют непроверенные предупреждения. Если вы не знакомы с синтаксисом@SuppressWarnings
, см. Аннотации.Исходный источник: Учебники по Java
Короткий ответ: нет.
cuPrintf и встроенная поддержка printf в среде исполнения Fermi и Kepler реализована с использованием устройства для размещения копий. Этот механизм ничем не отличается от использования cudaMemcpy для передачи буфера самому хосту.
Почти все совместимые с CUDA графические процессоры поддерживают так называемую память с нулевой копией (AKA «закрепленная, отображаемая»), что позволяет GPU, чтобы отобразить буфер хоста в его адресное пространство и выполнить передачу DMA в эту карту памяти. Обратите внимание, однако, что настройка и инициализация сопоставленной памяти имеют значительно более высокие накладные расходы, чем обычное распределение памяти (поэтому вам действительно нужно много транзакций для амортизации этих накладных расходов на протяжении всего срока службы вашего приложения) и что драйвер CUDA не может использовать нуль -copy с любыми другими адресами, поддерживаемыми физической памятью. Таким образом, вы не можете mmap-файл и использовать на нем нуль-копию, т.е. вам все равно понадобится явный код ввода I-го кода для получения из буфера нулевой копии на диск.